MYSQL - Dump MySQL à chaud

De PedroWiki

Introduction

Le dump des données d'une base MySQL par la commande mysqldump est un dump qui doit se faire "à froid", i.e. une fois la base stoppée proprement, afin de s'assurer de la cohérence des données dans la base.

Ceci peut être problématique si l'on souhaite dumper une base de production en cours d'utilisation.

La manipulation décrite dans cet article permet de faire ce dump grâce à la commande mysqlhotcopy. Cette commande verrouille les écritures dans la base, de manière à assurer la cohérence des données. La base à dumper est alors copiée, et cette copie non impactée par des modifications fréquentes peut alors être dumpée grâce à mysqldump.

Liens utiles

Le howto dont est extrait cette synthèse

Méthode

  • Se connecter en ssh au serveur portant la base.
  • Identifier correctement la base, ou la/les table(s) d'une base que l'on souhaite dumper:
En tant que root
# mysql -p
Enter password: => entrer ici le mot de passe root d'accès à MySQL
> show databases ; => on obtient la liste des bases
> use <une_base> ; => pour sélectionner une base en particulier
> show tables ; => pour lister les tables d'une base
> quit ;
  • La commande mysqlhotcopy ne supporte pas l'option -p permettant d'entrer son mot de passe de manière interactive, il faut donc rajouter temporairement (et le moins longtemps possible) la section suivante dans le fichier /etc/my.cnf (base RedHat) ou /etc/mysql/my.cnf (base Debian):
[client]
user     = <dbadmin>
password = <motdepasse>
  • Il est alors possible de créer son dump par la commande suivante:
# mysqlhotcopy <base> <repertoire de destination>
  • Supprimer immédiatement la section [client] dans le fichier my.cnf.
  • Par défaut le répertoire de destination est /var/lib/mysql/<base>_copy/ et la base dans MySQL se nomme <base>_copy.
  • Dumper la copie de la base:
# mysqldump -p <base>_copy > /root/dump_<base>.sql
  • copier le script SQL sur la machine de destination:
# scp /root/dump_<base>.sql root@<ip destination>:/root/