MySQL案例-replication"卡死"

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 同步卡死的假象

场景:
MySQL-5.7.17, 主从架构, 业务读写分离, 只读从库的SQL线程卡在某一个事务两个多小时没有动过, IO线程正常;

结论:
给某个表加上了索引, 同步开始追赶 _(:з」∠)_
叮嘱程序要养成加主键的好习惯.....ㄟ( ▔, ▔ )ㄏ

分析:
第一反应是bug?? hang住了? 在delete几千万的表?? _(:з」∠)_

事务提交策略是2,0, 没有开启log_slave_update, 按道理来说, 纯粹的执行事务, 不应该会卡住, 后台的一些线程也是suspending, 不是running, 好像也不是线程之间的问题, 看看relaylog里面是什么语句...

卡住的地方, 可以看到是929064394事务
1

把relaylog转义一下, 找一下这个事务, 发现确实是很多的delete语句(内容已处理)
3

大概统计了一下, 删除了有15W左右的数据, 然后看了一下两个多小时的时间, 同步进度如何...
2

只从速度上看, 还得卡两个多小时, 而且之后还有类似的语句, 真要完全追上, 估计.....

于是看了眼这个tmp_log表的结构

CREATE TABLE `tmp_log` (
  `s_id` int DEFAULT NULL,
  `d_id` int DEFAULT NULL
) ENGINE=InnoDB

木有主键..... _(:з」∠)_

同步和主键有什么关系?
MySQL同步的时候, 会去利用主键来搜索需要修改的行(或者是一些二级索引);

PS: 具体的资料可以参考slave_rows_search_algorithms的官方解释, 默认的设置下, 如果没主键也没有二级索引(where条件可用), 那么就会用全表扫描来搜索数据;
摘抄部分

  • The default value is TABLE_SCAN,INDEX_SCAN, which means that all searches that can use indexes do use them, and searches without any indexes use table scans.
  • To use hashing for any searches that do not use a primary or unique key, set this option to INDEX_SCAN,HASH_SCAN. Specifying INDEX_SCAN,TABLE_SCAN,HASH_SCAN has the same effect as specifying INDEX_SCAN,HASH_SCAN.
  • To force hashing for all searches, set this option to TABLE_SCAN,HASH_SCAN.

PPS: 开启HASH_SCAN可能对这个场景有效;
PPPS: HASH_SCAN默认没有开, 并且开启HASH_SCAN在某些情况下会遇到bug, 升级到>=5.7.20的版本之后再考虑开HASH_SCAN;

不打算去定位"为什么从库TABLE_SCAN这么慢?"了, 把表加上索引吧...

"想办法"停掉了同步, 加上索引之后, 同步恢复正常了;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
4天前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
5月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
11月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
120 3
|
11月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
744 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
11月前
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
141 0
|
11月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
663 0
|
7月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
184 25
|
7月前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
9月前
|
存储 关系型数据库 MySQL
10个案例告诉你mysql不使用子查询的原因
大家好,我是V哥。上周与朋友讨论数据库子查询问题,深受启发。为此,我整理了10个案例,详细说明如何通过优化子查询提升MySQL性能。主要问题包括性能瓶颈、索引失效、查询优化器复杂度及数据传输开销等。解决方案涵盖使用EXISTS、JOIN、IN操作符、窗口函数、临时表及索引优化等。希望通过这些案例,帮助大家在实际开发中选择更高效的查询方式,提升系统性能。关注V哥,一起探讨技术,欢迎点赞支持!
498 5
|
9月前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。

推荐镜像

更多