MYSQL 备库延迟一直增加,无法设置READ_ONLY

本文详细记录了一次MySQL从库复制延迟的问题排查与解决过程,重点在于如何处理由mysqldump导出时产生的SET SESSION.SQL_LOG_BIN=0命令导致的复制异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例背景:
mysql 从库延迟一直增加,但RELAY_LOG_POS一直停止不前,设置READ_ONLY直接HANG死。用SHOW PROCESS LIST或者SHOW ENGINE INNODB STATUS均查看不到异常。
操作回顾:
1.接到业务需求方需要从另一个实例里迁移一张表过来并进行运算。
2. 导出表:
mysqldump -urebirth -p -h127.0.0.1  --complete-insert --extended-insert --single-transaction --default-character-set=utf8   --database db_name --tables table_name >table_name_0119.sql

3. 在目标库执行此文件:

source table_name_0119.sql
4. 对表做运算:
从库中断,原因: 无TABLE_NAME此表。  
分析:为何在主库上执行了导入命令,为何没有到从库呢, 经过对BINLOG的分析, 发现并没有产生TABLE_NAME相关的BINLOG.
检查导入数据文本:
在文件中发现了如下内容:
SET @@SESSION.SQL_LOG_BIN= 0;
明白是什么事了。
可为何会产生这个命令串呢
In MySQL 5.6 and later when mysqldump is used to create a backup and --set-gtid-purged is enabled (this is the default if GTIDs are enabled), then it also adds a

   SET @@SESSION.SQL_LOG_BIN= 0;

详细BUG连接:

https://bugs.mysql.com/bug.php?id=77845
在导出的时候SET-GTID-PURGED是默认开启的,所以生成了这个语句。知道此情况,那么就好解决了, 在从库上执行不就完了。
5. 在从库上执行此文件:
source table_name_0119.sql

6. 重启复制:

stop slave;
start slave;
分析:
分析这些操作,并没有什么大的问题。 可为何就造成复制一直延迟呢?
 
检查RELAY LOG:
mysqlbinlog --base64-output=decode-rows -v -v relbin3306.000008 > 0119.log
less 0119.log
找到对应的LOG POS位置, 发现此前做运行计算的SQL 就在这个POS位置。
解决方案:
拿出这个运行计算的SQL在从库手动跑一次,并跳过此操作:
STOP SLAVE;
SET GTID_NEXT="76dc568d-f4f1-11e7-96ab-00163e065098:322";
BEGIN; COMMIT;
SET GTID_NEXT="AUTOMATIC";
START SLAVE;

至此检查复制正常, set global read_only=1;  也能正常执行。

 

转载于:https://www.cnblogs.com/o-to-s/articles/8319928.html

### 如何检查数据库主从复制延迟不超过设定阈值 为了确保MySQL之间复制延迟在可接受范围内,可以采用多种方法来监控这一指标。一种常用的方式是在SQL线程暂停的情况下设置间的固定延迟,并通过特定命令查看当前状态。 具体操作如下: 执行`stop slave sql_thread;`停止SQL线程以防止新的事件被应用到上;接着利用`change master to master_delay=60;`指定希望保持的秒级延迟量[^3]。这里假设期望的最大允许延迟为60秒作为例子说明。之后再启动SQL线程继续处理队列中的更改记录:`start slave sql_thread;` 要查询实际存在的滞后情况,则可以通过运行`show slave status\G;`获取详细的复制进程报告,在返回的结果集中寻找`Seconds_Behind_Master`字段,该数值表示的是相对于主落后了多少秒。如果此值持续超过所定义的安全范围(比如上述提到的60秒),则表明存在潜在问题需要进一步排查解决。 另外值得注意的是,默认状态下,为了避免不必要的风险,从节点一般会被配置成只读模式(`slave-read-only=yes`),这有助于维护数据的一致性和完整性,减少人为错误带来的影响[^5]。 当发现有异常高的延迟时,可能的原因包括但不限于硬件资源不足、额外负载干扰以及大型事务的影响等,针对这些问题采取相应的优化措施是非常必要的[^1]。 ```sql mysql> STOP SLAVE SQL_THREAD; Query OK, 0 rows affected (0.00 sec) mysql> CHANGE MASTER TO MASTER_DELAY = 60; Query OK, 0 rows affected (0.00 sec) mysql> START SLAVE SQL_THREAD; Query OK, 0 rows affected (0.00 sec) mysql> SHOW SLAVE STATUS\G; *************************** 1. row *************************** ... Seconds_Behind_Master: 0 ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值