又成长了,异常掉电踩到了MySQL主从同步的坑!

2024-04-20 20:36

本文主要是介绍又成长了,异常掉电踩到了MySQL主从同步的坑!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.主从复制简介
    • 📣 2.主从复制原理
    • 📣 3.机房掉电主从故障
      • ✨ 3.1 故障现象
      • ✨ 3.2 故障处理
    • 📣 4.知识点
    • 📣 5.故障总结


本文总结了主从复制的原理及日常运维的坑

前言

本文总结了主从复制的原理及日常运维的坑

📣 1.主从复制简介

MySQL 复制是指从一个 MySQL 主服务器(master)将数据拷贝到另一台或多台 MySQL 从服务器(slaves)的过程,将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。

📣 2.主从复制原理

MySQL复制的基本过程如下:

  1. Slave上面的 IO 线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
  1. Master接收到来自 Slave 的 IO 线程的请求后,通过复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave端的 IO 线程。
  1. Slave的 IO 线程接收到信息后,
    将接收到的日志内容依次写入到 Slave端的 Relay Log 文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的 Master 端的 binlog 的文件名和位置记录到 master-info 文件中.
  1. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的SQL 语句,并在自身执行这些 SQL。

📣 3.机房掉电主从故障

✨ 3.1 故障现象

机房掉电,数据库非正常关机。
MySQL拉起后,从库报如下错误。
Slave_IO_Running: No
Slave_SQL_Running: Yes

发现从库的GTID比主库的GTID要大--主库的GTID
mysql> show master status\G
*************************** 1. row ***************************File: MMK-JEM-Master1-ip31-bin.000002Position: 195Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: c5833cbf-fa39-11ee-ae67-0242c0a8441f:1-5
1 row in set (0.00 sec)--从库执行的GTIDLast_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: 46081bff-fa3a-11ee-9d8b-0242c0a84420:1-7,
c5833cbf-fa39-11ee-ae67-0242c0a8441f:1-2:6Auto_Position: 1

✨ 3.2 故障处理

1)在从上执行 reset master;
在从库上执行这个命令的作用是清空从库的 gtid
2)然后从库重置即可
mysql> stop slave;
mysql> reset slave;
mysql> start slave;
mysql> show slave status\G
3)查询从库被执行过的gtid
mysql> select @@GLOBAL.gtid_executed;
±-----------------------------------------+
| @@GLOBAL.gtid_executed |
±-----------------------------------------+
| c5833cbf-fa39-11ee-ae67-0242c0a8441f:1-2 |
±-----------------------------------------+

此时我们发现有报错信息

–解决方案,跳过从库gtid
mysql> stop slave;
mysql> set gtid_next=‘c5833cbf-fa39-11ee-ae67-0242c0a8441f:3’;
mysql> begin;commit;
mysql> set gtid_next=‘automatic’;

mysql> start slave;
mysql> SHOW SLAVE STATUS\G

–此时发现同步一切OK
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

📣 4.知识点

在MySQL中,sync_binlog参数用于控制二进制日志(binlog)的同步方式。
它决定了事务提交到binlog的时机以及是否需要等待数据同步完成才返回客户端

根据实际需求,设置sync_binlog参数的值。
0: 表示不进行同步,即异步写入binlog。
1: 表示在事务提交后立即将binlog同步到磁盘。
n: 表示在事务提交后等待n次fsync操作后将binlog同步到磁盘。

📣 5.故障总结

从二进制日志读取数据时,从主机收到致命错误1236:“使用主机的SERVER_UUID,从机的GTID比主机多。这可能表示二进制日志的末尾被截断,或者最后一个二进制日志文件丢失,例如,在sync_binlog!=1.主服务器可能已回滚或可能未回滚已复制到从属服务器的事务。建议将master已从slave回滚到master的任何事务复制到master

这篇关于又成长了,异常掉电踩到了MySQL主从同步的坑!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921252

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二: