Replication de bases
Pour limiter le nombre et donc l'espace occupé par les logs sur l'esclave, on peut le configurer avec /etc/mysql/my.cnf :
[mysqld] relay-log-purge=1 # Virer les logs ne servant plus a rien relay-log-space-limit=104857600 # Limitation des tailles de logs de relay total # (min 2 fois la valeur de max-relay-log-size) max-relay-log-size=30485760 # Limitation de la taille d'un log de relay
Pour vérifier la replication :
mysql> show slave status\G
Vérifier la première ligne Slave_IO_State :
- Si elle est vide, la replication ne foncitonne pas
-
Waiting for the slave SQL thread to free enough relay log space: demande de nettoyage par MySQL des anciens logs qui restent
-
Queueing master event to the relay log: Transfert de données en cours
-
Waiting for master to send event: Attente de données depuis le maître.
En cas de panne de la replication pour nettoyer l'esclave :
/etc/init.d/mysql stop
rm /var/lib/mysql/master.info /var/lib/mysql/relay-log.info
(regarder aussi rm /var/lib/mysql/relay-log.info /var/lib/mysql/master.info)
/etc/init.d/mysql start
Si l'esclave reste bloqué sur
Waiting for the slave SQL thread to free enough relay log space, il est souhaitable de vérifier l'écart entre le maître et l'esclave : mysql -u root -e "SHOW SLAVE STATUS\G" | grep Seconds_Behind_Master.
Si cette valeur diminue, l'esclave est en train de vouloir récupérer du retard sur le maître. En cas de trop grand écart, (et que l'on peut perdre les données non enregistrées dans l'esclave), il est peut-être souhaitable de supprimer les vieux logs du maître.
On peut voir la liste de tous les logs sur le maître avec SHOW BINARY LOGS;. Si il y en a trop a récupérer par l'esclave, on peut supprimer des logs en executant sur le maître PURGE MASTER LOGS BEFORE '2006-08-09 16:30:00';. Une fois nettoyé l'esclave avec les commandes, l'erreur est supprimée... mais des données sont perdues.
Quand tout est planté, la commande RESET SLAVE;, tapée sur l'esclave, permet de redémarrer toute la procédure...