Christophe Casalegno

MySQL : quelques rappels et astuces en cas de problèmes.

Comment faire un backup de toutes les bases MySQL d’un serveur ?

Pour effectuer une sauvegarder locale il vous suffit de taper :
mysqldump -u utilisateur_autorisé –password=mot_de_passe –all-databases > backup.sql

Vous pouvez également compresser votre sauvegarde à la volée :
mysqldump -u utilisateur_autorisé –password=mot_de_passe –all-databases | gzip>backup.sql.gz

Enfin si vous avez plusieurs machines, vous pouvez également sauvegarder votre base à distance :

Depuis le serveur de sauvegarde :
mysqldump -u utilisateur_autorisé –password=mot_de_passe –all-databases –host=serveur_sql > backup.sql | gzip>backup.sql.gz

Depuis le serveur MySQL :
mysqldump -u utlisateur_autorisé –password=mot_de_passe –all-databases | gzip | ssh root@serveur_backup “cat > /home/backup/backup.sql.gz”

Il est également possible d’effectuer un backup “binaire” de vos bases de données. Si ces dernières ont une taille très importante, ce type de backup peut représenter certains avantages, comme la rapidité de la sauvegarde :

Il faut tout d’abord mettre les requêtes en cours en attente.
mysql -u root -p
>FLUSH TABLES WITH READ LOCK ;

Dans un autre term, vous pouvez alors faire une sauvegarde binaire de vos bases de données :
tar cvfz /home/backup/backup_sql.tar.gz /var/lib/mysql

Vous pouvez également comme dans les cas cités plus haut, l’envoyer directement sur un serveur distant :
tar cvfz /home/backup/backup_sql.tar.gz /var/lib/mysql | ssh root@serveur_backup “cat > /home/backup/backup_sql.tar.gz”

Revenez ensuite au premier term et libérez les requêtes :
>UNLOCK TABLES;

Vous pouvez également effectuer la même opération en arrêtant la base, puis en la redémarrant une fois l’opération effectuée :
/etc/rc.d/init.d/mysql stop
/etc/rc.d/init.d/mysql start

Comment vérifier et réparer une base MySQL ?

Il existe 2 grandes méthodes pour vérifier et réparer une base de données MySQL. La première consiste à utiliser la commande “mysqlcheck” :

mysqlcheck tbase -p : va vérifier la base “tbase”
mysqlcheck –all-databases -p : va vérifier toutes les bases installées
mysqlcheck –auto-repair –all-databases -p : va vérifier puis réparer automatiquement les erreurs détectées sur les différentes bases

Pour plus d’informations : mysqlcheck –help

La seconde methode est d’utiliser “myisamchk”. Contrairement à mysqlcheck, myisamchk n’a pas besoin que MySQL tourne pour fonctionner : il va directement analyser les tables depuis leur forme binaire dans le répertoire /var/lib/mysql/toto/bla.MYI. Exemple :

myisamchk -i -o /var/lib/mysql/toto/bla.MYI -> va vérifier et réparer la table “bla” de la base “toto”.

Pour plus d’informations : myisamchk –help

Comment réinjecter un dump MySQL en ligne de commande ?

Pour réinjecter un fichier .sql, il existe 2 méthodes possibles :

1) Utiliser phpMyAdmin
2) Utiliser la commande mysql

Si le fichier s’appelle sauvegarde.sql, vous pouvez la réinjecter directement en ligne de commande, sans passer par phpMyAdmin avec la commande suivante :

mysql -u utilisateur -p –database=nom_de_la_base

Comment transférer une base MySQL d’un serveur à l’autre sans passer par un fichier ?

Pour cela le plus simple est de combiner les deux méthodes vues plus haut à savoir effectuer un dump et injecter un dump mais sans passer par un fichier, c’est à dire en utilisant un tube (pipe) à la place : démonstration :

mysqldump -u utilisateur_autorisé –password=mot_de_passe –all-databases –host=serveur_sql |mysql -u utilisateur –host=serveur_sql -pmot_de_passe –database=nom_de_la_base


Christophe Casalegno
http://twitter.com/Brain_0verride
http://www.facebook.com/brain.override

1 Comment

  1. Pingback: Tweets that mention MySQL : quelques rappels et astuces en cas de problèmes. « Carnet de route d’un Hacker / Christophe Casalegno -- Topsy.com

Leave a Comment