relecture et correction d'ajouts
This commit is contained in:
parent
8ae466d36e
commit
43da24c07b
140
HowtoMySQL.md
140
HowtoMySQL.md
|
@ -742,28 +742,18 @@ Pour sauvegarder une base de données au format *tab-separated data files*, avec
|
|||
|
||||
~~~
|
||||
# mkdir /tmp/foo && chown mysql:mysql /tmp/foo
|
||||
$ mysqldump -T --hex-blob foo > /tmp/foo
|
||||
$ mysqldump -T foo > /tmp/foo
|
||||
~~~
|
||||
|
||||
> *Note* : le répertoire de destination doit exister et *mysqld* doit avoir les droits d'écrire dedans.
|
||||
|
||||
Restaurer une base de données (sans et avec compression) :
|
||||
On peut utiliser les options `--fields-xxx` pour obtenir des fichiers au format CSV :
|
||||
|
||||
~~~
|
||||
$ mysqladmin create foo
|
||||
$ mysql foo < foo.sql
|
||||
$ gunzip < foo.sql.gz | mysql foo
|
||||
$ mysqldump --hex-blob --fields-enclosed-by='\"' --fields-terminated-by=',' -T /tmp/foo foo
|
||||
~~~
|
||||
|
||||
Restaurer une table avec les données brutes :
|
||||
|
||||
~~~
|
||||
$ mysqladmin create foo
|
||||
$ mysql foo < /path/foo.sql
|
||||
$ mysqlimport foo /path/bar.txt
|
||||
~~~
|
||||
|
||||
Sauvegarder toutes les bases (exemples en mode classique et en mode `-T`) :
|
||||
Pour sauvegarder toutes les bases (exemples en mode classique et en mode `-T`) :
|
||||
|
||||
~~~
|
||||
$ mysqldump --opt --all-databases --events --hex-blob > all.sql
|
||||
|
@ -816,54 +806,20 @@ mygrants()
|
|||
}
|
||||
~~~
|
||||
|
||||
Pour extraire une table depuis un dump (dans le cas où il y a pas de backup avec table séparé)
|
||||
|
||||
Il faut déterminer la structure des tables du dump avec :
|
||||
|
||||
~~~
|
||||
grep -n "Table structure" dump.sql
|
||||
~~~
|
||||
|
||||
Ce qui donne quelque chose comme ça :
|
||||
|
||||
~~~
|
||||
19:-- Table structure for table `wp-cgp`
|
||||
43:-- Table structure for table `wp_WP_SEO_404_links`
|
||||
73:-- Table structure for table `wp_WP_SEO_Redirection`
|
||||
109:-- Table structure for table `wp_WP_SEO_Redirection_LOG`
|
||||
143:-- Table structure for table `wp_acccess`
|
||||
170:-- Table structure for table `wp_avant_premiere`
|
||||
196:-- Table structure for table `wp_commentmeta`
|
||||
223:-- Table structure for table `wp_comments`
|
||||
265:-- Table structure for table `wp_icl_string_translations`
|
||||
294:-- Table structure for table `wp_icl_strings`
|
||||
322:-- Table structure for table `wp_investments`
|
||||
396:-- Table structure for table `wp_links`
|
||||
431:-- Table structure for table `wp_login_redirects`
|
||||
458:-- Table structure for table `wp_mtouchquiz_answer`
|
||||
486:-- Table structure for table `wp_mtouchquiz_question`
|
||||
~~~
|
||||
|
||||
Si l'on veux extraire la table *wp_investments*, on détermine ou commence et fini la table, ici elle commence a 322 et fini à 395, la fin ce détermine toujours à n-1 de la prochaine table.
|
||||
|
||||
On fait un *sed -n* avec le début et la fin de la table pour l'extraire dans un fichier .sql :
|
||||
|
||||
~~~
|
||||
sed -n '[numéro_du_début_de_la_ligne],[numéro_de_fin_de_la_ligne] p' dump.sql > table.sql
|
||||
~~~
|
||||
|
||||
Exemple avec la table *wp_investments* :
|
||||
|
||||
~~~
|
||||
sed -n '322,395 p' dump.sql > wp_investments.sql
|
||||
~~~
|
||||
|
||||
### Restaurer
|
||||
|
||||
Pour avoir un dump avec un seul insert par ligne, pratique pour restaurer partiellement les bases `mysql.user` et `mysql.db` par exemple :
|
||||
|
||||
~~~
|
||||
$ mysqldump --skip-extended-insert --events mysql > mysql.sql
|
||||
$ mysqldump --skip-extended-insert --events --hex-blob mysql > mysql.sql
|
||||
~~~
|
||||
|
||||
### Restauration
|
||||
|
||||
Pour restaurer une base de données (sans et avec compression) :
|
||||
|
||||
~~~
|
||||
$ mysqladmin create foo
|
||||
$ mysql foo < foo.sql
|
||||
$ gunzip < foo.sql.gz | mysql foo
|
||||
~~~
|
||||
|
||||
Pour restaurer uniquement la base _foo_ à partir d'un dump complet on peut utiliser :
|
||||
|
@ -872,7 +828,14 @@ Pour restaurer uniquement la base _foo_ à partir d'un dump complet on peut util
|
|||
$ mysql -o foo < all.sql
|
||||
~~~
|
||||
|
||||
Pour restaurer une base avec un dump de type "tab-separated data files" (`mysqldump -T`, voir plus haut) :
|
||||
Pour restaurer une table de type "tab-separated data files" (`mysqldump -T`) dans une base _foo_ (exemples par défaut et avec des options `--fields-xxx`) :
|
||||
|
||||
~~~
|
||||
$ mysqlimport --default-character-set=utf8 foo /tmp/foo/bar.txt
|
||||
$ mysqlimport --default-character-set=utf8 --fields-enclosed-by='\"' --fields-terminated-by=',' foo /tmp/foo/bar.txt
|
||||
~~~
|
||||
|
||||
Pour restaurer une base entière avec un dump de type "tab-separated data files" (exemples par défaut et avec des options `--fields-xxx`) :
|
||||
|
||||
~~~{.bash}
|
||||
db=test1
|
||||
|
@ -886,21 +849,31 @@ grep CHARSET= *txt
|
|||
for file in *.txt; do
|
||||
tablename=$(basename $file .txt)
|
||||
echo "LOAD DATA INFILE '$PWD/$file' INTO TABLE \`$tablename\`" CHARACTER SET utf8 | mysql $db
|
||||
#echo "LOAD DATA INFILE '$PWD/$file' INTO TABLE \`$tablename\`" CHARACTER SET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' | mysql $db
|
||||
done
|
||||
~~~
|
||||
|
||||
Pour le CHARACTER SET, se baser au character_set_database de la base :
|
||||
|
||||
~~~{.bash}
|
||||
$ mysql -e 'show variables;' | grep character_set_database
|
||||
character_set_database utf8
|
||||
~~~
|
||||
|
||||
Si cela concerne plusieurs bases répartis dans différents répertoires :
|
||||
|
||||
\<se placer sur le répertoire en question (/home/mysqltmp/)\>
|
||||
> *Note 1* : Attention, l'utilisateur MySQL doit avoir le droit de lecture sur les fichiers .txt
|
||||
Se positionner dans un répertoire où mysql a les droits (mysqltmp - /home/mysqltmp par ex).
|
||||
|
||||
> *Note 2* : Si vous n'avez pas toutes vos tables en utf8 (par exemple du `CHARSET=LATIN1`), ce n'est pas bien… et vous devrez pour la peine adapter le script (en détectant le charset utilisé avec « file » si nécessaire)
|
||||
|
||||
> *Note 3* : Si erreur 150 : «Can't create table» voir du côté des foreign keys :
|
||||
>
|
||||
>~~~{.bash}
|
||||
>$ mysql -e 'SHOW ENGINE INNODB STATUS\G;' | grep LATEST\ FOREIGN -A3
|
||||
>~~~
|
||||
>
|
||||
>et ignorer les erreurs pour pouvoir recréer les tables :
|
||||
>
|
||||
>~~~{.bash}
|
||||
>$ mysql -e "set GLOBAL foreign_key_checks=OFF;"
|
||||
>~~~
|
||||
|
||||
Si cela concerne plusieurs bases réparties dans différents sous-répertoires :
|
||||
|
||||
~~~{.bash}
|
||||
cd /home/mysqldump
|
||||
for dir in *
|
||||
do
|
||||
echo "=======base $dir========="
|
||||
|
@ -921,31 +894,6 @@ do
|
|||
done
|
||||
~~~
|
||||
|
||||
> *Note 1* : Attention, l'utilisateur MySQL doit avoir le droit de lecture sur les fichiers .txt
|
||||
Se positionner dans un répertoire où mysql a les droits (mysqltmp - /home/mysqltmp par ex).
|
||||
|
||||
> *Note 2* : Si vous n'avez pas toutes vos tables en utf8 (par exemple du `CHARSET=LATIN1`), ce n'est pas bien… et vous devrez pour la peine adapter le script (en détectant le charset utilisé avec « file » si nécessaire)
|
||||
|
||||
> *Note 3* : Si erreur 150 : «Can't create table» voir du côté des foreign keys :
|
||||
>
|
||||
>~~~{.bash}
|
||||
>$ mysql -e 'SHOW ENGINE INNODB STATUS\G;' | grep LATEST\ FOREIGN -A3
|
||||
>~~~
|
||||
>
|
||||
>et ignorer les erreurs pour pouvoir recréer les tables :
|
||||
>
|
||||
>~~~{.bash}
|
||||
>$ mysql -e "set GLOBAL foreign_key_checks=OFF;"
|
||||
>~~~
|
||||
|
||||
Il est possible d'exporter le contenu d'une base au format CSV :
|
||||
|
||||
~~~
|
||||
$ mysqldump --hex-blob -T /tmp --fields-enclosed-by=\" --fields-terminated-by=, --no-create-db --no-create-info foo
|
||||
~~~
|
||||
|
||||
> *Note* : il est nécessaire que MySQL ait les droits d'écriture dans le répertoire de destination (ici `/tmp`).
|
||||
|
||||
On peut également restaurer un dump _foo.sql_ (ou tout script au format SQL) de façon interactive via la commande `source` :
|
||||
|
||||
~~~{.sql}
|
||||
|
@ -1394,3 +1342,5 @@ Voir [/HowtoMySQL/Replication]().
|
|||
## FAQ et erreurs courantes
|
||||
|
||||
Voir [/HowtoMySQL/Troubleshooting]().
|
||||
|
||||
|
||||
|
|
|
@ -564,4 +564,43 @@ ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size in (MB)"
|
|||
FROM information_schema.TABLES
|
||||
WHERE table_schema = "<NOM_BDD>"
|
||||
ORDER BY (data_length + index_length) DESC;
|
||||
~~~
|
||||
~~~
|
||||
|
||||
## Restauration d'une table depuis un dump complet
|
||||
|
||||
Pour extraire une table depuis un dump complet `dump.sql`, on détermine la liste des tables via `grep -n "Table structure"`, par exemple :
|
||||
|
||||
~~~
|
||||
$ grep -n "Table structure" dump.sql
|
||||
|
||||
19:-- Table structure for table `wp-cgp`
|
||||
43:-- Table structure for table `wp_WP_SEO_404_links`
|
||||
73:-- Table structure for table `wp_WP_SEO_Redirection`
|
||||
109:-- Table structure for table `wp_WP_SEO_Redirection_LOG`
|
||||
143:-- Table structure for table `wp_acccess`
|
||||
170:-- Table structure for table `wp_avant_premiere`
|
||||
196:-- Table structure for table `wp_commentmeta`
|
||||
223:-- Table structure for table `wp_comments`
|
||||
265:-- Table structure for table `wp_icl_string_translations`
|
||||
294:-- Table structure for table `wp_icl_strings`
|
||||
322:-- Table structure for table `wp_investments`
|
||||
396:-- Table structure for table `wp_links`
|
||||
431:-- Table structure for table `wp_login_redirects`
|
||||
458:-- Table structure for table `wp_mtouchquiz_answer`
|
||||
486:-- Table structure for table `wp_mtouchquiz_question`
|
||||
~~~
|
||||
|
||||
Si l'on veut extraire la table `wp_investments`, on détermine où commence et finit la table, ici elle commence à la ligne 322 et finit à la ligne 395 (juste avant la table suivante).
|
||||
|
||||
On peut ainsi utiliser `sed -n` pour extraire la table :
|
||||
|
||||
~~~
|
||||
$ sed -n '[numéro_du_début_de_la_ligne],[numéro_de_fin_de_la_ligne] p' dump.sql > table.sql
|
||||
~~~
|
||||
|
||||
Exemple avec la table *wp_investments* :
|
||||
|
||||
~~~
|
||||
$ sed -n '322,395 p' dump.sql > wp_investments.sql
|
||||
~~~
|
||||
|
||||
|
|
Loading…
Reference in a new issue