wenn die mysql replikation mal klemmt

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.

Author: sd

Leave a Reply

Your email address will not be published. Required fields are marked *