在我们开始之前,我可以给出一些版本的信息,
Ubuntu - 14.04,MySQL - 5.5
我已经用两个EC2 Ubuntu实例成功地配置了主从复制。我的主人在Ubuntu 14中,从服务器在Ubuntu 18中。复制成功,奴隶在过去3-4天中复制数据。但是,突然间,我的从站(Ubuntu 18)因查询错误而停止复制。
错误信息: Last_SQL_Error:对查询中的“主”键错误“重复条目”11379183。默认数据库:“测试”。查询:‘插入testTable (id、value1、value2、value3、value4、value5、value6)值(22、"5“、"429438”、"1592499300“、"1”、"8“、”1“)
Slave_IO_Running:是的,Slave_SQL_Running:不
我试过了,
停止从;设置全局SQL_SLAVE_SKIP_COUNTER=1;启动从;
它帮助了我一段时间。但是复制又被破坏了。
我们如何解决这种复制错误?有什么自动化的方法来修复坏掉的奴隶吗?
在MySQL 5.5中,基于GTID的复制可以吗?我认为GTID可以从MySQL版本5.6中获得吗?
发布于 2020-06-25 16:17:45
有两种方法可以绕过重复的关键错误。
my.cnf中配置它
将此行添加到[mysqld]组标题下的my.cnf中
[mysqld]
slave-skip-errors=1062然后重新启动mysql。
一旦复制开始,所有重复的键错误都将被绕过。一旦Seconds_Behind_Master为0,您就会陷入困境。然而,奴隶的数据与母版不同步.接下来你要做什么?
我相信你没有时间跑
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;一遍又一遍。如果自动化工具能为你做到这一点,那不是很好吗?这样的工具是存在的。它叫pt-slave-restart。
你会这样运行它:
pt-slave-restart --error-numbers 1062把这个放进crontab,每分钟都会响。
* * * * * pt-slave-restart --error-numbers 1062更好的是,您可以创建一个服务器守护进程而不使用crontab。
pt-slave-restart --error-numbers 1062 --daemonize并且您不需要重新启动mysqld。
无论哪种方式,pt-slave-restart都会一次又一次跳过该错误,直到Seconds_Behind_Master为0。当你结束了让奴隶被抓住,停止使用pt-slave-restart。
但是,您仍然存在与方法1相同的问题:从服务器上的数据与主服务器的数据不同步。接下来你要做什么?
您必须将奴隶上的数据与您的主同步。如果有一个实用程序可以为你做到这一点,那不是很好吗?这样的工具是存在的。事实上,有两个工具。他们被称为pt-table-checksum和pt-table-sync。
他们是做什么的?
使用pt-table-checksum检查MySQL复制完整性。如果您遇到主从之间有不同校验和的任何表,则“奴隶”上的这样一个表是不同步的。
您可以使用pt-table-sync同步MySQL表数据。
你可以跑
pt-table-sync --print > sync_file.txt看看什么会改变(这就像真实事物的模拟一样)
然后你就跑
pt-table-sync --execute执行实际同步。
注意:遗憾的是,使用MySQL 5.5和GTID绝对没有任何功能。
发布于 2020-06-27 15:25:04
如果主数据库不是那么大,我会重建它。您可以使用逻辑备份(如mysqldump ),也可以使用物理备份(如percona )--使用时间转储中的一个点,这样就可以安全地将从服务器重新定位为主程序。
https://dba.stackexchange.com/questions/269872
复制相似问题