« Mysql » : différence entre les versions

De Marmits Wiki
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


mac os X
== export serveur dédié ==
mysqldump sans mot de passe:
générer la config
/usr/local/mysql/bin/mysql_config_editor set --login-path=local --host=localhost --user=root --password


voir la config
mysqldump --host=localhost --user=unuser --password=unpassword -C -Q -e --default-character-set=latin1  unebase | gzip -c > unebase.gz
/usr/local/mysql/bin/mysql_config_editor print --all


se connecter:
/usr/local/mysql/bin/mysql --login-path=local


dump:
== Remplacer des caractères ou une chaine ==
/usr/local/mysql/bin/mysqldump  --login-path=local --host=localhost --user=root -C -Q -e --default-character-set=latin1 base | gzip -c > /users/.../base.gz
UPDATE  table SET  le_champs replace(le_champs, 'é', 'é')  WHERE  id > 0;




== Quelques fonctions: ==


avec homebrew et zsh
* json
dans le fichier .zshrc (equivalent -->.bash_profile)
SELECT JSON_EXTRACT(champs,"$.propriete")  FROM table
where (JSON_UNQUOTE(JSON_EXTRACT(champs,"$.propriete")) = 'crit')  


export PATH=${PATH}:/usr/local/mysql/bin


mac OS X
* entre 2 dates
export serveur dédié
where DATE(t.unedate) between DATE('2023-07-31') AND DATE('2023-08-01')
mysqldump --host=localhost --user=unuser --password=unpassword -C -Q -e --default-character-set=latin1  unebase | gzip -c > unebase.gz
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


import mac os X
* Créer un index FULLTEXT:
gzip -d < unebase.gz | /usr/local/mysql/bin/mysql --host=localhost --user=unuser --password=unpassword unebase
  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');


Remplacer des caractères ou une chaine
* par boolean :
UPDATE table SET le_champs =  replace(le_champs, 'é', 'é') WHERE  id > 0;
  SELECT * FROM table WHERE MATCH (titre,contenu)
  AGAINST ('+ mots clefs' IN BOOLEAN MODE) order by date desc;


procédures stockées
SELECT * FROM table WHERE MATCH (titre,contenu)
Procédures et fonctions sous MySQL: les bases:
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


repérer les doublons:
== Étendre la recherche aux mots de 3 lettres ==
SELECT champsadoublons, count(*)
FROM table
GROUP BY champsadoublons
HAVING count(*) > 1


Créer un index FULLTEXT:
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 :
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 :
[mysqld]
SELECT * FROM table WHERE MATCH (titre,contenu)
ft_min_word_len=3
  AGAINST ('+ mots clefs' IN BOOLEAN MODE) order by date desc;
[myisamchk]
  ft_min_word_len=3


SELECT * FROM table WHERE MATCH (titre,contenu)
* creer un utilisteur full
  AGAINST ("mots clefs" IN BOOLEAN MODE) order by date desc;
  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;


expression
* divers
SELECT * FROM table WHERE MATCH (titre,contenu)
mysql -p
  AGAINST ('"Grande première"*' IN BOOLEAN MODE) order by date desc;
  GRANT ALL PRIVILEGES ON db.* TO user @'%' IDENTIFIED BY 'pass';
flush privileges;


* commençant par ....


Reconstruire l'index:
DELETE FROM mysql.db WHERE user='user' and host='%';
REPAIR TABLE table


source:http://www.siteduzero.com/tutoriel-3-482339-index.html#ss_part_4
* 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


Étendre la recherche aux mots de 3 lettres
* acces à distance
GRANT ALL ON user.* TO base@'ipduposte' IDENTIFIED BY 'password' WITH GRANT OPTION;


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 :
/usr/local/mysql/bin/mysql -h ipdistante -u user -p --port=3306


[mysqld]
dans  /etc/mysql/my.cnf
ft_min_word_len=3
désactivé
[myisamchk]
#bind-address          = 127.0.0.1
ft_min_word_len=3


creer un utilisteur full
ouvrir le port 3306 dans le firewall
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
== Changer l'encodage d'une base de données MySQL ==
mysql -p
Nettoyer et convertir en utf8
GRANT ALL PRIVILEGES ON db.* TO user @'%' IDENTIFIED BY 'pass';
=== Backup de la base ===
flush privileges;
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


DELETE FROM mysql.db WHERE user='user' and host='%';
=== 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;


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
=== Réimport de la base au format utf8 ===
sudo /usr/bin/mysqldump --default-character-set=latin1 --host=localhost --user=root --password=pass -A > /rep/fichier_dump.SQL
mysql -uusername -ppassword --default-character-set=utf8 dbname< dump-fixed.sql


acces à distance
== Wamp ==
GRANT ALL ON user.* TO base@'ipduposte' IDENTIFIED BY 'password' WITH GRANT OPTION;
=== Git BASH ===
Import ex:<br />
/c/wamp64/bin/mariadb/mariadb10.5.15/bin/mysql.exe --user=root --password=123456 --database=unebdd < undump.dump


/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
[[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