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

Un commentaire

  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