Vous êtes sur la page 1sur 6

km.azerttyu.

net
Rplication Mysql ou comment sauvegarder
ses bases de donnes
jeudi 30 juillet 2009, par km

Cet article a juste pour objectif de donner une procdure pour sauvegarder
lintgralit dun serveur MySQL [http://fr.wikipedia.org/wiki/MySQL] et
maintenir automatiquement les mises jours.
Je ninvente rien tout se trouve sur le net principalement sur le site MySQL
[http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html]

Pr requis
Avant de poursuivre la lecture de cet article, nous devons avoir :
2 serveurs MySQL
Un compte root MySQL pour chacun
Des comptes *nix avec accs ssh et les bons droits
lip [http://fr.wikipedia.org/wiki/ip] ou nom dhte du maitre MySQL
Pour les dnominations, je parlerais de Maitre pour le serveur sauvegarder, dEsclave pour le
serveur de sauvegarde.

Prparer le Maitre
Il faut :
crer un compte de rplication, qui sera autoris se connecter pour obtenir les mises
jours
configurer le serveur
faire une sauvegarde complte des donnes un instant T connu.
sauvegarder le fichier de configuration debian.cnf
Crer le compte de rplication

Au choix, nous avons phpmyadmin [http://fr.wikipedia.org/wiki/phpmyadmin] avec son


interface accessible et la console MySQL.
Concernant phpmyadmin, linterface est suffisamment claire. Depuis la page daccueil on
accde la gestion des comptes via le lien Privilges.
Concernant la ligne de commande, il faut accder la console MySQL via : maitre:~#mysql
-u root -p
Les points prendre en compte sont :
% pour le host
% pour les bases de donnes
REPLICATION SLAVE pour les privilges
Avec les paramtres prcdents, on souhaite que le compte de rplication puisse accder au
mettre lensemble des bases de donnes et ce depuis nimporte o sur le net.
Si on matrise bien MySQL, on peut dfinir les bases sauvegardables et les IP possibles du
serveur esclave (dans ce cas on sort du cadre de cet article et il faut lire la vraie
documentation).
Au choix de linterface MySQL, nous saisissons :
CREATE USER 'esclave'@ '%' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE ON * . * TO 'esclave'@ '%' IDENTIFIED BY
'***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON `esclave_%` . * TO 'esclave'@ '%';
Tlcharger

Configurer
Si la configuration initialee ne la pas fait, dans le fichier maitre:~# /etc/mysql/my.cnf,
nous devons saisir :
[mysqld]
log-bin
server-id=master_id
Tlcharger

master_id est un entier compris entre 1 et 2^32 1.


Si ces donnes sont ajoutes, il faut alors relancer le serveur MySQL avec maitre:~#
/etc/init.d/mysql stop ; /etc/init.d/mysql start

Exporter les donnes


SQL
La rplication ne peut se faire quen partant dun rfrentiel temps commun et une copie des
donnes exactes cet instant. Pour raliser ceci, il existe plusieurs solutions, je vous invite la
lire la documentation officielle pour les voir.
Mon choix sest port sur une solution la plus agnostique vis vis des choix de configuration
(Myisam, innodb, base mysql, ...) mais qui en contre partie est la plus lente.
maitre:~#mysqldump -u root -p --all-databases --master-data >
dump.sql
Lattribut
[http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_alldatabases] --all-databases indique une copie complte du serveur.
Lattribut
[http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_masterdata] --master-data exporte aussi le rfrentiel temps au moment de la copie, de plus il
verrouille les bases le temps de la sauvegarde.
debian.cnf
Comme on effectue une copie exhaustive de la base, nous perdons les donnes prsente dans la
table mysql. Cette base contient entre autres les paramtres des comptes. Pour viter que
lesclave se mlange les pinceaux, il faut copier le fichier /etc/mysql/debian.cnf

Configurer lesclave
Nous devrons :
importer les donnes du maitre
mettre jour debian.cnf
indiquer ladresse du maitre
lancer la synchronisation

Importer
Limportation se fait en ligne de commande grce esclave:~# mysql -u root -p
< dump.sql
Debian.cnf
Comme nous venons dcraser lintgralit des bases de donnes, nous devons aussi remplacer
les paramtres de connexion mysql.
Nous crasons simplement le fichierdebian.cnf par celui du maitre.
Pour charger les modifications, nous relanons le serveur
esclave:~#
/etc/init.d/mysql stop ; /etc/init.d/mysql start
Tlcharger
Configurer
Nous avons 2 choses faire :
donner un identifiant serveur diffrent du master dans /etc/mysql/my.cnf
indiquer la localisation du maitre.
esclave:~# /etc/mysql/my.cnf
[mysqld]
server-id=slave_id
Tlcharger
slave_id est un entier compris entre 1 et 2^32 1 et diffrent de master_id.
Depuis une commande mysql (esclave:~# mysql -u root -p ), nous indiquons les
paramtres de connexion.
CHANGE MASTER TO
MASTER_HOST='nom d'hte du maitre ou IP',
MASTER_USER='compte esclave',
MASTER_PASSWORD='mot de passe'
Tlcharger

Les paramtres de synchronisation MASTER_LOG_FILE et MASTER_LOG_POS ont dj t


sauvegard lors de limportation. (se reporter la documentation
[http://dev.mysql.com/doc/refman/5.0/fr/change-master-to.html])

Synchroniser
Maintenant nous avons un maitre qui est prt transmettre ses mises jours depuis la
cration du fichier dump.sql et un esclave lidentique du maitre cet instant configur pour
chercher les dernires modifications.
La synchronisation se fait laide START SLAVE;. Nous controlons le bon comportement via
le fichier de log systme.(esclave:~# tail -f -n 50 /var/log/syslog)
Jul 29 17:14:50 esclave mysqld[3600]: 090729 17:14:50 [Note] Slave
SQL thread initialized, starting replication in log 'mysqlbin.000792' at position 401029, relay log './mysqld-relay-bin.000001'
position: 4
Jul 29 17:14:50 esclave mysqld[3600]: 090729 17:14:50 [Note] Slave
I/O thread: connected to master 'esclave@hote.master.com:3306',
replication started in log 'mysql-bin.000792' at position 401029
Tlcharger
Si vous navez pas un log similaire, vous tes bon pour lire la vraie documentation
[http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html].

http://www.howtoforge.com/mysql_database_replication
[http://www.howtoforge.com/mysql_database_replication]
http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html
[http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html]
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_alldatabases
[http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_alldatabases]
http://www.webexpertys.com/replication-maitre-esclave-mysql-5
[http://www.webexpertys.com/replication-maitre-esclave-mysql-5]

Messages

1. Rplication Mysql ou comment sauvegarder ses bases de donnes, 25 fvrier


2010, 16:11, par .Gilles
A mon avis ce nest pas vraiment une technique de sauvegarde fiable : certes a protge du
plantage matriel dun serveur, mais pas dun delete malheureux..
Enfin, cest ce qui est dit sur la doc de MySql (http://dev.mysql.com/doc/refman/5.0...
[http://dev.mysql.com/doc/refman/5.0/en/backup-methods.html])

Un message, un commentaire ?

Vous aimerez peut-être aussi