« Mysql » : différence entre les versions
Page créée avec « mysqldump export mysqldump --host=localhost --user=utilisateur --password=motdepass -C -Q -e --default-character-set=latin1 basededonnee | gzip -c > fichiersql.gz exp... » |
Aucun résumé des modifications |
||
(21 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
mysqldump | == mysqldump == | ||
export | export | ||
mysqldump --host=localhost --user=utilisateur --password=motdepass -C -Q -e --default-character-set=latin1 basededonnee | gzip -c > fichiersql.gz | mysqldump --host=localhost --user=utilisateur --password=motdepass -C -Q -e --default-character-set=latin1 basededonnee | gzip -c > fichiersql.gz | ||
export all database | export all database | ||
mysqldump --host=localhost --user=root --password=motdepasse -C -Q -e --default-character-set=latin1 --all-databases | tar -zcvf > all_databases.gz | mysqldump --host=localhost --user=root --password=motdepasse -C -Q -e --default-character-set=latin1 --all-databases | tar -zcvf > all_databases.gz | ||
import | == import == | ||
gzip -d < fichiersql.gz | mysql --host=localhost --user= utilisateur --password= motdepass basededonnee | 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 : | 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 | mysql -u root -p --one-database BASE_A_RESTAURER < dumpcomplet.sql | ||
extraire sous forme de fichier SQL, la base qui vous intéresse ? | == 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 | 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 | |||
[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_replace options mysqldump replace] | |||
[http://sylvain.benest.free.fr/Documentation%20APACHE_PHP_MYSQL/Manuel%20MYSQL/Manuel%20html/mysqldump.html 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 | |||
where (JSON_UNQUOTE(JSON_EXTRACT(champs,"$.propriete")) = 'crit') | |||
* 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 (<span style="color:red">'"Grande première"*'</span> IN BOOLEAN MODE) order by date desc; | |||
<i>* commençant par ....</i> | |||
* 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:<br /> | |||
/c/wamp64/bin/mariadb/mariadb10.5.15/bin/mysql.exe --user=root --password=123456 --database=unebdd < undump.dump | |||
[[category:Sql]] |
Dernière version du 27 août 2024 à 12:03
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 where (JSON_UNQUOTE(JSON_EXTRACT(champs,"$.propriete")) = 'crit')
- 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