Spa*_*pta 2 mysql mysql-replication mysql5
昨晚,其中一位开发人员在主机上运行了错误的 mySQL 语句(查询插入具有重复主键的行)。突然,复制到它的从站停止了。Slave 开始将它写入 mysql_relay_logs,在我们可以监控和修复它之前,磁盘空间不足。
Master 配置为保存最近 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)
Run Code Online (Sandbox Code Playgroud)
从站状态: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)
Run Code Online (Sandbox Code Playgroud)
有人能给我确切的命令让一切恢复正常吗?正如我所说,我确信我们已经丢失了从磁盘上的数据,因为它的磁盘用完了,但我们必须在主上有数据。
我的下一个问题是:如何确保这种情况不再发生。
非常感谢 Sparsh Gupta
直接的做法是清除从站上的数据,然后从主站的新副本重新开始。可以使用 mysqldump 或通过诸如 rsync 之类的东西来复制 master。根据您的数据库有多大,您可能会遇到停机时间。这将始终有效。
如果您清除从驱动器上的空间,则有可能通过使用(从 mysql 内部)从发生错误的位置开始复制:
start slave
如果 master 的 bin.log 文件就位,复制就有可能立即开始。我没有太多的经历发生这种情况。
上次我这样做是当开发人员向数据库添加一个新表时,并没有先在从属设备上创建它。我创建了表,不得不使用 sql_slave_skip_counter 跳过 bin.log 中丢失的位。然后我手动插入了我跳过的 20 行数据。
归档时间: |
|
查看次数: |
1993 次 |
最近记录: |