wenn die mysql replikation aufgrund eines fehlers in einem statement mal aussteigt, dann muss man dieses statement einfach weg lassen 😉
im logfile (bei debian /var/log/daemon.log) steht dann so ein kram:
Query caused different errors on master and slave. Error on
master: 'Table '%-.64s' already exists' (1050), Error on
slave: 'You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right
syntax to use near '' at line 1' (1064).
[...]
[ERROR] Error running query, slave SQL thread aborted. Fix
the problem, and restart the slave SQL thread with "SLAVE
START". We stopped at log 'mysql-bin.003535' position 91778974
oder wenn man sich den slave status auf der commandline ansieht:
SHOW SLAVE STATUS \G
was solch einen output liefert.
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: xxx.xxxxxx.xxx
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.003535
Read_Master_Log_Pos: 97111481
Relay_Log_File: host-relay-bin.007674
Relay_Log_Pos: 91779321
Relay_Master_Log_File: mysql-bin.003535
Slave_IO_Running: Yes
Slave_SQL_Running: No
[...]
wenn da nun “Slave_SQL_Running” auf “No” steht, weiss man, dass die replikation nicht laeuft.
wenn man sich nun sicher ist, dass das naechste statement vom master nicht benoetigt wird (weils wie in diesem falle hier zu einem fehler fuehrt), kann man dieses kommando ausfuehren, um ein statement zu ueberspringen:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
weitere hilfe und bemerkungen dazu auf den mysql development seiten.