破坏的奴隶(MySQL复制)

昨天晚上,开发者之一在主机上运行了一个错误的mySQL语句(查询插入一个重复的主键)。 突然,它的奴隶的复制停了下来。 从服务器开始将其写入mysql_relay_logs,在我们监控和修复之前,磁盘空间不足。

Master被configuration为保存最近3天的bin_logs,所以我们还没有完全丢失复制。 有人可以帮我解决这个混乱现在。

我的主人身份:

mysql> SHOW MASTER STATUS\G *************************** 1. row *************************** File: mysql-bin.000017 Position: 30844254 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec) 

从属状态:mysql

 > SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Master_Host: 192.168.140.110 Master_User: replication_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000014 Read_Master_Log_Pos: 61132382 Relay_Log_File: mysqld-relay-bin.000037 Relay_Log_Pos: 1405976 Relay_Master_Log_File: mysql-bin.000014 Slave_IO_Running: No 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: 1062 Last_Error: Error 'Duplicate entry '13676-1-2' for key 1' on query. Default database: 'XXX'. Query: 'YYY' Skip_Counter: 0 Exec_Master_Log_Pos: 1405839 Relay_Log_Space: 8974037551 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 1 row in set (0.00 sec) 

有人可以给我确切的命令,使一切恢复正常? 正如我所说,我确信我们丢失了从盘上的数据,但是我们必须在主盘上有数据。

我的下一个问题是:如何确保这不再发生。

谢谢一吨Sparsh Gupta

直接的行动是消灭奴隶上的数据,并用新的副本重新开始。 主人可以通过使用mysqldump或通过像rsync的东西来复制。 根据数据库的大小,您可能会遇到停机时间。 这将始终有效。

有一个机会,如果你清除奴隶驱动器的空间,你可以从错误发生的地方开始复制(从MySQL内部):

start slave

如果master的bin.log文件就位,则复制将有可能开始。 发生这种事情我没有很多的经验。

上一次我做这个时,开发人员添加了一个新的表到数据库,并没有创build它在奴隶第一。 我创build了表,并且必须使用sql_slave_skip_counter来跳过bin.log中丢失的位。 然后手动插入我跳过的20行数据。

只要停止奴隶,并跳过使用( http://dev.mysql.com/doc/refman/5.0/en/set-global-sql-slave-skip-counter.html )重复条目的sql语句

 mysql> stop slave; mysql> SET GLOBAL sql_slave_skip_counter = 1; mysql> start slave; 

如果运行上述命令后错误不同,只需重复一遍,直到从机工作。 但如果这种方式不起作用,你必须从头开始重新创build奴隶。