mysql复制跳过语句.这是可能的吗?

hs1rzwqc  于 5个月前  发布在  Mysql
关注(0)|答案(6)|浏览(46)

有一个基于行的复制系统。昨天我不小心在master上执行了一个heavy语句,发现我的slave远远落后于master。我已经中断了master上的查询,但它仍然在slave上运行。所以我得到的slave比master晚了15个小时。
我已经尝试过通过重置slave和增加MASTER_SEARCH_POS来跳过一个位置,但是没有运气:没有找到位置,因为中继日志没有读到比一个重查询事件更远的地方。

Read_Master_Log_Pos == Exec_Master_Log_Pos

字符串

  • 有什么方法可以跳过繁重的查询吗?(我不关心必须通过查询更改的数据)
  • 有没有一种方法可以杀死从中继日志中获取的从服务器上的查询?
  • 是否有办法将从机回滚到1位置,从主机bin日志中删除事件并恢复复制?
5ktev3wc

5ktev3wc1#

在slave上尝试以下操作:

STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;

字符串
这将停止从线程并跳过主线程的下一个事件。当你遇到跳过它们的语句问题时,你通常会使用它。
也可以阅读mysql文档的以下部分:set-global-sql-slave-skip-counter

pcrecxhr

pcrecxhr2#

首先在master上使用以下命令浏览二进制日志,以找到导致问题的SQL语句:

SHOW BINLOG EVENTS IN 'mysql-bin.000XXX' LIMIT 200;

字符串
然后将从服务器设置为只同步到之前的语句,然后在您想要跳过的语句之后恢复。
在这个例子中,我们将跳过日志位置100的事件。我们将salve设置为同步,直到日志位置99,然后从101恢复:

STOP SLAVE;
START SLAVE UNTIL MASTER_LOG_FILE='mysql-bin.000XXX', MASTER_LOG_POS=99;

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000XXX', MASTER_LOG_POS=101;
START SLAVE;


根据需要更改主日志文件(mysql-bin. 000 XXX)和位置。

警告:跳过从服务器上的SQL语句将导致主服务器和从服务器之间的数据不同,从而导致数据完整性问题。只有在您完全了解所跳过的SQL查询的作用以及恢复复制可能产生的任何后果的情况下,才能执行此操作。

2o7dmzc5

2o7dmzc53#

对于那些使用Amazon RDS MySQL的用户,您可以使用以下命令在从属服务器上一次跳过一个错误:

CALL mysql.rds_skip_repl_error;

字符串
在运行此之前无需停止复制。

yshpjwxd

yshpjwxd4#

我发现首先启动io_thread

start slave io_thread;

字符串
并使用以下命令检查中继日志

SHOW RELAYLOG EVENTS IN 'mysql-bin.000XXX' LIMIT 100;


这为我节省了很多时间。

u5i3ibmn

u5i3ibmn5#

您可以按以下方式设置跳过计数器:

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE;

字符串
要查看进程列表:

mysql> show [full] processlist;
kill "number from first col";


从特定位置启动从站:

START SLAVE UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos


参考号:http://dev.mysql.com/doc/refman/5.0/en/start-slave.html

kzipqqlq

kzipqqlq6#

如果您启用了GTID_MODE,则会出现此错误:
错误1858(HY 000):当服务器在@@GLOBAL.GTID_MODE = ON的情况下运行时,无法设置sql_slave_skip_counter。相反,对于要跳过的每个事务,请使用与该事务相同的GTID生成一个空事务
您可以使用this method生成空交易。
1.查找故障GTID:

show slave status

字符串
Last_SQL_Error:协调器已停止,因为工作进程中存在错误。最近的失败是:工作进程4无法在主日志mysql-bin.000033,end_log_pos 11323712处执行事务“47 f34807 - 98 ef-11 ee-ac 0 c-d 00 d1 ad 56 dd 7:409671”。有关此失败或其他失败(如果有)的详细信息,请参阅错误日志和/或performance_schema.replication_applier_status_by_worker表。
1.停止从机并更换故障GTID:

STOP SLAVE;
SET GTID_NEXT="47f34807-98ef-11ee-ac0c-d00d1ad56dd7:409671";
BEGIN; COMMIT;


1.设置回GTID_NEXT并启动从机

SET GTID_NEXT="AUTOMATIC";
START SLAVE;

相关问题