Mysql
mysqldump
export
mysqldump --host=localhost --user=utilisateur --password=motdepass -C -Q -e --default-character-set=latin1 basededonnee | gzip -c > fichiersql.gz
export all database
mysqldump --host=localhost --user=root --password=motdepasse -C -Q -e --default-character-set=latin1 --all-databases | tar -zcvf > all_databases.gz
import
gzip -d < fichiersql.gz | mysql --host=localhost --user= utilisateur --password= motdepass basededonnee
Pour importer une seule base à partir d'un dump complet, il faut entrer la commande suivante :
mysql -u root -p --one-database BASE_A_RESTAURER < dumpcomplet.sql
extraire sous forme de fichier SQL, la base qui vous intéresse ?
sed -n '/^-- Current Database: `BASE_A_EXTRAIRE`/,/^-- Current Database: `/p' dumpcomplet.sql > mabase.sql
mac os X
- générer la config
/usr/local/mysql/bin/mysql_config_editor set --login-path=local --host=localhost --user=root --password
- voir la config
/usr/local/mysql/bin/mysql_config_editor print --all
- se connecter:
/usr/local/mysql/bin/mysql --login-path=local
- dump:
/usr/local/mysql/bin/mysqldump --login-path=local --host=localhost --user=root -C -Q -e --default-character-set=latin1 unebase | gzip -c > /users/.../base.gz mysqldump --host=localhost --user=root --password=motdepasse -C -Q -e --default-character-set=utf8mb4 unebase | gzip -c > /users/.../dumpsql.gz -C: --compress -Q: --quote-names -e: --extended-insert options mysqldump replace options mysqldump replace traduction
- avec homebrew et zsh
dans le fichier .zshrc (equivalent -->.bash_profile) export PATH=${PATH}:/usr/local/mysql/bin
- import mac os X
gzip -d < unebase.gz | /usr/local/mysql/bin/mysql --host=localhost --user=unuser --password=unpassword unebase
export serveur dédié
mysqldump --host=localhost --user=unuser --password=unpassword -C -Q -e --default-character-set=latin1 unebase | gzip -c > unebase.gz
Remplacer des caractères ou une chaine
UPDATE table SET le_champs = replace(le_champs, 'é', 'é') WHERE id > 0;
Quelques fonctions:
- json
SELECT JSON_EXTRACT(champs,"$.propriete") FROM table
- entre 2 dates
where DATE(t.unedate) between DATE('2023-07-31') AND DATE('2023-08-01') where '2023-05-28' BETWEEN t.valide_du AND t.valide_au
- repérer les doublons:
SELECT champsadoublons, count(*) FROM table GROUP BY champsadoublons HAVING count(*) > 1
- Créer un index FULLTEXT:
CREATE FULLTEXT INDEX fti_matable ON matable( titre, contenu )
Requête de recherche avec INDEX FULL TEXT:
- par pertinence :
SELECT *, MATCH (titre,contenu) AGAINST ('mots clefs') AS score FROM table WHERE MATCH (titre,contenu) AGAINST ('mots clefs');
- par boolean :
SELECT * FROM table WHERE MATCH (titre,contenu) AGAINST ('+ mots clefs' IN BOOLEAN MODE) order by date desc;
SELECT * FROM table WHERE MATCH (titre,contenu) AGAINST ("mots clefs" IN BOOLEAN MODE) order by date desc;
- expression
SELECT * FROM table WHERE MATCH (titre,contenu)
AGAINST ('"Grande première"*' IN BOOLEAN MODE) order by date desc;
* commençant par ....
- Reconstruire l'index:
REPAIR TABLE table
source:http://www.siteduzero.com/tutoriel-3-482339-index.html#ss_part_4
Étendre la recherche aux mots de 3 lettres
Par défaut MySQL FULLTEXT indexe les mots de quatre lettres ou plus. Pour étendre la recherche aux mots de 3 lettres ou plus, il faut modifier la config du serveur (/etc/mysql/my.cnf sous Debian), et ajouter les deux éléments suivants :
[mysqld] ft_min_word_len=3 [myisamchk] ft_min_word_len=3
- creer un utilisteur full
mysql -p GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION; flush privileges;
- divers
mysql -p GRANT ALL PRIVILEGES ON db.* TO user @'%' IDENTIFIED BY 'pass'; flush privileges;
DELETE FROM mysql.db WHERE user='user' and host='%';
- archiver une base
sudo /usr/bin/mysqldump --default-character-set=latin1 --host=localhost --user=compte --password=pass base > /rep/base.sql
- archiver toutes les bases
sudo /usr/bin/mysqldump --default-character-set=latin1 --host=localhost --user=root --password=pass -A > /rep/fichier_dump.SQL
- acces à distance
GRANT ALL ON user.* TO base@'ipduposte' IDENTIFIED BY 'password' WITH GRANT OPTION;
/usr/local/mysql/bin/mysql -h ipdistante -u user -p --port=3306
dans /etc/mysql/my.cnf désactivé #bind-address = 127.0.0.1
ouvrir le port 3306 dans le firewall
Changer l'encodage d'une base de données MySQL
Nettoyer et convertir en utf8
Backup de la base
mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql cp dump.sql dump-fixed.sql vi dump-fixed.sql
Rechercher / remplacer dans le fichier ouvert dans vi
- %s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
- %s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
- wq
Suppression de la base de données et recréation en utf8
DROP DATABASE dbname; CREATE DATABASE dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Réimport de la base au format utf8
mysql -uusername -ppassword --default-character-set=utf8 dbname< dump-fixed.sql
Wamp
Git BASH
Import ex:
/c/wamp64/bin/mariadb/mariadb10.5.15/bin/mysql.exe --user=root --password=123456 --database=unebdd < undump.dump