我有两个MySQL服务器,一个主站和一个从站。
有人去奴隶,并创build了一个表,然后继续主人,并创build了同一个表。 当然,这个DDL语句被复制到从站,导致错误,导致复制停止在错误点。
在删除从机上的表之后或者在该语句之后开始复制之后,如何重新启动复制过程?
显示从站状态输出:
mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: xx.xx.xx.xx Master_User: buildbot Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.024536 Read_Master_Log_Pos: 33489509 Relay_Log_File: mysqld-relay-bin.049047 Relay_Log_Pos: 32575097 Relay_Master_Log_File: mysql-bin.024476 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1050 Last_Error: Error 'Table 'checklist' already exists' on query. Default database: 'dbname'. Query: 'CREATE TABLE `checklist` ( `checklist_id` int(11) NOT NULL AUTO_INCREMENT, `description` varchar(768) NOT NULL, `url` varchar(512) NOT NULL, `active` bit(1) NOT NULL, `insert_date` datetime NOT NULL, `xcred` int(11) NOT NULL, PRIMARY KEY (`checklist_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1' Skip_Counter: 0 Exec_Master_Log_Pos: 32574952 Relay_Log_Space: 6766519525 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 2013 Last_IO_Error: error reconnecting to master '[email protected]:3306' - retry-time: 60 retries: 86400 Last_SQL_Errno: 1050 Last_SQL_Error: Error 'Table 'checklist' already exists' on query. Default database: 'dbname'. Query: 'CREATE TABLE `checklist` ( `checklist_id` int(11) NOT NULL AUTO_INCREMENT, `description` varchar(768) NOT NULL, `url` varchar(512) NOT NULL, `active` bit(1) NOT NULL, `insert_date` datetime NOT NULL, `xcred` int(11) NOT NULL, PRIMARY KEY (`checklist_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1'
你可以使用下面的命令(在mysql提示符下):
mysql> STOP SLAVE; mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; mysql> START SLAVE; mysql> SHOW SLAVE STATUS;
值1表示要跳过的语句的数量。 您可以重复执行,直到复制被修复。 你可以看到这个页面 。
你没有。 实际上,您需要像第一次那样从头开始重新设置复制,因为如果您只是跳过语句,则可能会失去完整性。 为了安全起见,您必须从已知的安全起点复制。