mysql主库delete一个没主键的表导致从库延迟很久问题处理

一 问题描述

发现线上环境一个从库出现延迟,延迟了2天了,还没追上主库。

查看当前运行的sql及事务,发现这个sql语句是在delete一个没主键的表。

二 问题模拟

这里在测试环境复现下这个问题。

2.1 在主库造数据

use baidd;

CREATE TABLE test2(id INT  primary key  AUTO_INCREMENT);

INSERT INTO test2(id) VALUES(1),(2),(3),(4);

INSERT INTO test2(id) SELECT id+(SELECT COUNT(*) FROM test2) FROM test2;

INSERT INTO test2(id) SELECT id+(SELECT COUNT(*) FROM test2) FROM test2;

……

多次运行如上sql。

2.2 在主库删除这个表的主键

alter table test2 modify id int;

alter table test2 drop primary key;

2.3 在主库清空这个表数据

#待这两百万条数据同步到从库后,在主库上删除这两百万条数据

delete from test2;

三 问题排查

3.1 在从库观察主从复制

#发现五分钟了从库还没同步删除掉,查看主从状态,发现复制位点很久都不变

root@localhost [(none)]>show slave status \G;*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 10.106.210.206Master_User: replMaster_Port: 14728Connect_Retry: 60Master_Log_File: mysql-bin.000025Read_Master_Log_Pos: 84258028Relay_Log_File: host01-relay-bin.000004Relay_Log_Pos: 63196660Relay_Master_Log_File: mysql-bin.000025Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 63196524Relay_Log_Space: 84258422Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 96Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 210206Master_UUID: 408abbb7-dc1b-11ee-a91f-fefcfee1f844Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set: 408abbb7-dc1b-11ee-a91f-fefcfee1f844:1-1120,b5896746-dc1a-11ee-b573-fefcfee443b5:1-1391Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_Namespace:1 row in set, 1 warning (0.00 sec)ERROR:No query specified

注意这里:

 Relay_Log_File: host01-relay-bin.000004

 Relay_Log_Pos: 63196660

3.2 查看当前运行的sql

#查看当前运行的事务

select * from information_schema.INNODB_TRX;

发现trx_query为空,以前线上从库出现延迟,能看到当前运行的sql的,不知为何这次看不到。

#查看该事务对应的进程

select * from information_schema.PROCESSLIST where id in(select trx_mysql_thread_id from information_schema.INNODB_TRX);

Info也是为空。

select * from `performance_schema`.threads where processlist_id =

(

select id from information_schema.PROCESSLIST where id in(select trx_mysql_thread_id from information_schema.INNODB_TRX)

);

3.3 查看binlog里对应的sql

用3.2命令查不到导致延迟的sql内容,只能去binlog里查看了。

查看从库中继日志里延迟时卡住的位置对应的sql。

上面3.1那里show slave status:

Relay_Log_File: host01-relay-bin.000004

Relay_Log_Pos: 63196660

mysqlbinlog -v host01-relay-bin.000004 > 000004.log

less 000004.log

搜索63196660

可以看到这个位置,在操作baidd.t2这个表:

#240427 17:47:17 server id 210206  end_log_pos 63196737 CRC32 0x71c38d61        Table_map: `baidd`.`test2` mapped to number 107

再一直往下翻,看到有很多对应的delete语句:

3.4 在从库查看捕获的慢sql有没有主键

show indexes from baidd.test2;

如果没有主键,就需要先在从库上为这个表建下主键,先解决这个延迟的问题。

四 着手处理

思路:

  • 先在从库杀掉这个慢的delete的sql
  • 在从库加主键,然后在从库delete就很快了
  • 在主库加主键,从库报主键冲突时,跳过这个错误,继续同步即可

4.1 在从库停掉主从复制

stop slave;

发现2分钟都stop不掉,因为当前有慢事务在运行。

4.2 在从库杀掉这个慢事务

#查看慢事务对应的进程id,注意别多杀了,只杀运行时间很久的,导致延迟的sql

select * from information_schema.PROCESSLIST where id in(select trx_mysql_thread_id from information_schema.INNODB_TRX);

这里是kill 55588

Kill完后,stop slave就能很快执行完了。

4.3 从库上给这个表加主键

set sql_log_bin=0;

SET  GLOBAL super_read_only=off;

show variables like '%super_read_only%';

alter table test2 add primary key(id);

SET  GLOBAL super_read_only=on;

4.4 开启同步

start slave;

set sql_log_bin=1;

发现很快就同步完了。

4.5 在主库上建下主键,避免以后再出现这个问题

alter table test2 add primary key(id);

4.6 在从库跳过这个建主键的事务

因为上面已经在从库建过主键了,所以从库复制会停止,提示主键冲突,可以通过跳过这个事务来处理。

4.6.1 查看从库复制状态

root@localhost [(none)]>show slave status \G;

*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 10.106.210.206Master_User: replMaster_Port: 14728Connect_Retry: 60Master_Log_File: mysql-bin.000025Read_Master_Log_Pos: 84259101Relay_Log_File: host01-relay-bin.000005Relay_Log_Pos: 1195Relay_Master_Log_File: mysql-bin.000025Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 1068Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000025, end_log_pos 84259101. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.Skip_Counter: 0Exec_Master_Log_Pos: 84258897Relay_Log_Space: 84259617Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: NULLMaster_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 1068Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000025, end_log_pos 84259101. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.Replicate_Ignore_Server_Ids:Master_Server_Id: 210206Master_UUID: 408abbb7-dc1b-11ee-a91f-fefcfee1f844Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State:Master_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp: 240427 18:04:40Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set: 408abbb7-dc1b-11ee-a91f-fefcfee1f844:1-1120,b5896746-dc1a-11ee-b573-fefcfee443b5:1-1391Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_Namespace:1 row in set, 1 warning (0.00 sec)

注意看这几个:

#查看具体报错

select * from performance_schema.replication_applier_status_by_worker

LAST_ERROR_MESSAGE显示报错:

Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000025, end_log_pos 84259101; Error 'Multiple primary key defined' on query. Default database: 'baidd'. Query: 'alter table test2 add primary key(id)'

4.6.2 在从库跳过这个事务

4.6.2.1 针对未开启GTID的从库

show variables like '%gtid_mode%'; #off表示未开启gtid

只需要在从库执行以下命令就能跳过一个事务。

set sql_log_bin=0;

set global sql_slave_skip_counter=1;

4.6.2.2 针对开启了GTID的从库

思路:

将gtid_next设置为自己环境Executed_Gtid_Set的下一个位置,然后开始一个空事务。

示例:

set sql_log_bin=0;

set gtid_next='408abbb7-dc1b-11ee-a91f-fefcfee1f844:1121';

begin;

commit;

set gtid_next='automatic';

4.6.3 开启同步

start slave;

set sql_log_bin=1;

4.6.4 验证主从同步状态

show slave status \G;

确保复制没问题。

五 教训

表没有主键的时候,delete很多数据,会导致从库出现很长时间延迟,因此需要严格把控,定期检查,确保主库上不存在没有主键的表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

软件测试_v模型_w模型

v模型: w模型: 一、V模型的8个阶段及其对应关系如下: 1. 需求分析:明确项目的需求,为后续设计提供依据。 2. 总体设计:根据需求分析,设计系统的总体架构。 3. 详细设计:在总体设计的…

在no branch上commit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录,这里的第二条提交(fbd3ea8)就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8,恢复到上次提交的状态,并且为其创建个分支backup,此时…

(七)Servlet教程——Idea编辑器集成Tomcat

1. 点击桌面上Idea快捷方式打开Idea编辑器,假如没有创建项目的话打开Idea编辑器后的界面展示如下图所示 2. 点击界面左侧菜单中的自定义 3. 然后点击界面中的“所有设置...”,然后点击“构建、执行、部署”,选择其中的“应用程序服务器” 4. 点击“”按钮…

C语言-动态内存分配

即使行动导致错误,却也带来了学习与成长;不行动则是停滞与萎缩。💓💓💓 •🌙知识回顾 亲爱的友友们大家好!💖💖💖,我们紧接着要进入一个新的内容,…

k8s RBAC 角色访问控制详解与生产中的实际应用案例

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s简介 2、RBAC简介 二、RBAC关键…

【JavaParser笔记04】如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容

这篇文章,主要介绍如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容。 目录 一、JavaParser代码生成 1.1、引入依赖 1.2、生成Java类 1.3、生成属性和setter、

centos学习-网络配置命令-实用技巧

CentOS网络配置命令详解:轻松掌握网络配置技巧 在CentOS服务器的搭建和管理过程中,网络配置是至关重要的一环。良好的网络配置不仅可以确保服务器的稳定运行,还能够保障网络安全和数据传输效率。本文将详细介绍CentOS网络配置命令&#xff0…

【Pytorch报错】RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR

报错信息: File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 297, in _conv_forwardreturn F.conv1d(input, weight, bias, self.stride, RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling cubl…

【AMBA Bus ACE 总线 6 -- ACE cache maintenance 详细介绍】

文章目录 ACE cache maintenance什么叫 cache maintenance operations呢?ACE cache line statesACE cache maintenance 什么叫 cache maintenance operations呢? 比如ARM CPU 对自己的Icache 和 Dcache会有大量的transaction操作,也即maintenance操作,如果cache 是dirty 话…

Python的历史演变与作用

目录 1.概述 2.起源 3.发展阶段 4.Python 3的诞生 5.现状与未来 6.Python的作用 6.1.Web开发 6.2.数据科学与人工智能 ​​​​​​​6.3.自动化与脚本编程 ​​​​​​​6.4.教育与学习 ​​​​​​​6.5.其他领域 7.结语 1.概述 Python,一门富有表…

26.统一网关Gateway

网关的功能 1.身份认证,权限的校验。 2.服务的路由,负载均衡。用户请求被分配到哪一个微服务。一个微服务可以有多个实例,所以使用负载均衡。 3.请求限流。 springcloud网关实现有两种:gateway, zuul zuul是基于servlet实现的…

如何在vue中写 键盘控制方法

仅使用一个方法块来监听键盘事件并在按下 L 键时输出 "L",您可以直接在组件的 mounted 钩子函数中定义匿名函数来处理键盘事件。这样做可以避免在组件中定义额外的方法,使代码更加简洁。以下是一个简化的示例代码: export default …

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互):字段中 含有 getHeader 字段 的方法: 2.解释前后端的交互过程3.使用 json 格…

面试经验|Arm机器学习和图形算法工程师——技术经理面

文章目录 题记英国面试框架HR简单沟通技术经理面技术面谈Offer 面试记录自我介绍环节项目机器学习/图像处理/图形学算法如何做超分辨率任务,通常使用什么loss函数输入10个连续的低质量视频帧,如何对画面进行去噪请简述计算光流的过程请简述alpha blendin…

Bun 入门到精通(二)——初始化

bun init 使用 bun init 可以搭建一个新项目,类似于 npm init,同样,bun init 也可以接收 -y/--yes 的参数,同样类似于 npm init -y。 bun init工作原理 先创建一些默认文件 包文件:带 name 属性的 package.json语言…

币圈是什么意思?币圈开发

币圈是一个涵盖了区块链、加密货币及其应用的独特领域,它的兴起与发展已经彻底改变了我们对金融、科技和未来的认知。 一、什么是币圈? 币圈可以被理解为围绕虚拟货币展开的一系列活动和产业的总称。它包括区块链技术的研发、数字货币的创造、交易、投资…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统:精准匹配旅行者需求 2、定制化旅行计划:满足个性化需求 3、实时互动与分享:增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

K8s初次入门

初步:搭建k8s集群 k8s 集群主机清单 主机名ip地址master1.50node-00011.51node-00021.52node-00031.53node-00041.54node-00051.55harbor1.30事先准备 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap) 安装工具 dnf install -y kubeadm kubelet ku…

【Python】在 Linux 上安装 Miniconda 的简易指南

如今一个人听歌总是会觉得失落 幻听你在我的耳边轻轻诉说 夜色多温柔 你有多爱我 如今一个人听歌总是会觉得难过 爱已不在这里我却还没走脱 列表里的歌 随过往流动 🎵 许嵩《幻听》 Miniconda 是一个轻量级的 Anaconda 分发版,它提…