MySql: Replikation neu aufsetzen

Wenn der Slave bei der Replikation Fehler anzeigt (mysql> SHOW SLAVE STATUS;) und die zu verarbeitende Datenmenge zu gross ist, dann geht es oftmals schneller, die Replikation neu zu starten. Voraussetzung: Es muss eine funktionierende Replikation bestehen (Replikations-User und Einstellungen in my.conf vorhanden, root user).

*** SLAVE:

#> mysql
mysql> STOP SLAVE;

*** MASTER:

#> mysql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
-- Filename und Position merken
mysql> UNLOCK TABLES;
mysql>quit;
#> mysqldump typo3dev > /root/typo3dev.sql
#> scp /root/typo3dev.sql root@slave.server:/root/typo3dev.sql

Hier werden die Tabllen gesperrt und die derzeitige Replikations-Position gemerkt (Filename und Position, die später im Slave benötigt werden).
zB:

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000410 |  9769379 |              | mysql,test       |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

File wird für MASTER_LOG_FILE benötigt und Position für MASTER_LOG_POS.

Nach dem Merken der Position unbedingt die Tabellen entsperren.

*** SLAVE:

mysql> DROP DATABASE typo3dev;
mysql> CREATE DATABASE typo3dev;
mysql> quit;
#> cat /root/typo3dev.sql | mysql typo3dev -u root -p
#> mysql
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000410', MASTER_LOG_POS=9769379;
mysql> START SLAVE;

Für den Fall, dass auf dem Master noch alte Binary Files sind (im Beispiel vor „mysqld-bin.000410“) können diese mit folgendem Befehl aus dem Index und von der Platte gelöscht werden:

mysql> PURGE BINARY LOGS TO 'mysqld-bin.000410';