détails sur mysqldump, notamment l'option -T et --hex-blob
This commit is contained in:
parent
7eae86ed1a
commit
df89f5f16e
|
@ -501,51 +501,65 @@ mysql> SET @@max_connect_errors=50;
|
|||
|
||||
## Sauvegarde
|
||||
|
||||
Pour sauvegarder une base de données (sans et avec compression) :
|
||||
Pour sauvegarder une base de données dans un seul fichier (sans et avec compression) :
|
||||
|
||||
~~~
|
||||
# mysqldump foo > foo.sql
|
||||
# mysqldump foo | gzip > foo.sql.gz
|
||||
$ mysqldump --hex-blob foo > foo.sql
|
||||
$ mysqldump --hex-blob foo | gzip > foo.sql.gz
|
||||
~~~
|
||||
|
||||
*Note* : l'option *--hex-blob* est importante pour ne pas risquer de perdre certains caractères dans les colonnes de type BINARY/BLOB/BIT
|
||||
|
||||
Pour sauvegarder une base de données au format *tab-separated data files*, avec - pour chaque table - un fichier .sql contenant la structure de la table (CREATE TABLE) et un fichier .txt contenant les données brutes (ré-injectable avec `LOAD DATA INFILE`) :
|
||||
|
||||
~~~
|
||||
# mkdir /tmp/foo && chown mysql:mysql /tmp/foo
|
||||
$ mysqldump -T --hex-blob foo > /tmp/foo
|
||||
~~~
|
||||
|
||||
*Note* : le répertoire de destination doit exister et *mysqld* doit avoir les droits d'écrire dedans.
|
||||
|
||||
Pour restaurer une base de données (sans et avec compression) :
|
||||
|
||||
~~~
|
||||
# mysqladmin create foo
|
||||
# mysql foo < foo.sql
|
||||
# gunzip < foo.sql.gz | mysql foo
|
||||
$ mysqladmin create foo
|
||||
$ mysql foo < foo.sql
|
||||
$ gunzip < foo.sql.gz | mysql foo
|
||||
~~~
|
||||
|
||||
Sauvegarder toutes les bases :
|
||||
Sauvegarder toutes les bases (exemples en mode classique et en mode `-T`) :
|
||||
|
||||
~~~
|
||||
# mysqldump --opt --all-databases > all.sql
|
||||
$ mysqldump --opt --all-databases --events --hex-blob > all.sql
|
||||
$ for db in $(mysql -P3308 -e "SHOW DATABASES" | egrep -v "^(Database|information_schema|performance_schema)") \
|
||||
mkdir /backupmysql/$db && chown mysql:mysql /backupmysql/$db && \
|
||||
mysqldump --events --hex-blob -T /backupmysql/$db $db; done
|
||||
~~~
|
||||
|
||||
Pour sauvegarder uniquement certaines tables :
|
||||
|
||||
~~~
|
||||
# mysqldump foo TABLE0 [TABLE1…] > foo_tables.sql
|
||||
$ mysqldump --hex-blob foo TABLE0 [TABLE1…] > foo_tables.sql
|
||||
~~~
|
||||
|
||||
Pour presque faire un `--exclude` (qui manque cruellement à *mysqldump*):
|
||||
|
||||
~~~
|
||||
mysql -B -N -e 'show databases' | \
|
||||
perl -ne 'print unless /\b(?:phpmyadmin|mysql|information_schema)\b/' | \
|
||||
xargs echo mysqldump -B
|
||||
$ mysql -B -N -e 'show databases' | \
|
||||
perl -ne 'print unless /\b(?:phpmyadmin|mysql|information_schema)\b/' | \
|
||||
xargs echo mysqldump --hex-blob -B
|
||||
~~~
|
||||
|
||||
Et pour sauvegarder des tables correspondant à un motif (préfixe le plus souvent) :
|
||||
|
||||
~~~
|
||||
# mysqldump foo $(mysql foo -B --column-names=False -e "show tables like 'exemple_%'") > foo_motif.sql
|
||||
$ mysqldump --hex-blob foo $(mysql foo -B --column-names=False -e "show tables like 'exemple_%'") > foo_motif.sql
|
||||
~~~
|
||||
|
||||
Pour dumper avec une condition particulière :
|
||||
|
||||
~~~
|
||||
mysqldump -t foo bar --where="id='66666666'"
|
||||
$ mysqldump -t foo bar --hex-blob --where="id='66666666'"
|
||||
~~~
|
||||
|
||||
Ce qui permet de réinjecter des données résultantes d'un `SELECT * FROM foo.bar WHERE id='66666666'`.
|
||||
|
@ -569,16 +583,16 @@ mygrants()
|
|||
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 mysql > mysql.sql
|
||||
$ mysqldump --skip-extended-insert --events mysql > mysql.sql
|
||||
~~~
|
||||
|
||||
Pour restaurer une seule base d'un dump complet on peut utiliser :
|
||||
|
||||
~~~
|
||||
mysql -o foo < all.sql
|
||||
$ mysql -o foo < all.sql
|
||||
~~~
|
||||
|
||||
Pour restaurer une base, dont la structure de chaque table est stockée dans un fichier SQL indépendant, et dont les données sont dans des fichiers de type "tab-separated data files" (option -T de mysqldump) avec une extension .txt :
|
||||
Pour restaurer une base avec un dump de type "tab-separated data files" (`mysqldump -T`, voir plus haut) :
|
||||
|
||||
~~~{.bash}
|
||||
db=test1
|
||||
|
@ -591,7 +605,7 @@ grep CHARSET= *txt
|
|||
|
||||
for file in *.txt; do
|
||||
tablename=`basename $file .txt` #tablename=${file%.*}
|
||||
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 | mysql $db
|
||||
done
|
||||
~~~
|
||||
|
||||
|
@ -604,7 +618,7 @@ Se positionner dans un répertoire où mysql a les droits (mysqltmp - /home/mysq
|
|||
Il est possible d'exporter le contenu d'une base au format CSV :
|
||||
|
||||
~~~
|
||||
# mysqldump -T /tmp --fields-enclosed-by=\" --fields-terminated-by=, --no-create-db --no-create-info foo
|
||||
$ 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`).
|
||||
|
|
Loading…
Reference in New Issue