关键词:mysql复制故障处理

【1】手工处理的gtid_next(SQL线程报错)

   例如:主键冲突,表、数据库不存在,row模式下的数据不存在等。

  【1.1】模拟故障:GTID模式下的重复创建用户

【1.1.】先在从库上创建一个用户,再去主库上创建一个用户
-- 从202:       
create user 'test'@'%' identified by '123456';
grant all privileges on *.* to 'test'@'%';
flush privileges;
-- 主202:       
create user 'test'@'%' identified by '123456';
grant all privileges on *.* to 'test'@'%';
flush privileges; use test;
create table test3(id int);
insert into test3 values(1);
commit; 【1.1.2】核验同步 发现不同步

在从库202执行:

 show slave status\G  -- 查看状态

 发现错误:

这里显示的GTID,指的是,需要执行这个GTID事务失败了,也就是说,真正出问题的是该GTID上面那个事务。

【1.1.3】核验错误信息

根据图上的文件名和位置在主库上查看执行的信息是什么;

 果然是创建用户报错了。

 

  从这个图,根据位置信息和GTID,应该就可以应征上面标红说的。

查看更详细的信息;在从库上运行

  select * from performance_schema.replication_applier_status_by_worker\G

  

  Read_Master_Log_Pos: 2174

  Exec_Master_Log_Pos: 1112

记得,这个错误号,就是我们报错的那个,要对应否则可能是其他时间出现的错误信息;

【1.1.4】解决,跳过、屏蔽这个冲突事务

在从库上:直接指定,下一个执行的事务,为错误信息上显示的事务(因为这里显示的GTID,是说执行到这个点出错,这个GTID所在的事务没有执行)

(1)由于在这个GTID必须是连续的,正常情况同一个服务器产生的GTID是不会存在空缺的。

   所以不能简单的skip掉一个事务,只能通过注入空事物的方法替换掉一个实际操作事务。

(2)注入空事物的方法:

stop slave;

set @@session.gtid_next='de853101-b165-11e9-900a-000c291f4171:8';

begin;commit;

set @@session.gtid_next='automatic'; -- 不改回来,很多报错

start slave;

  如果 set @@session.gtid_next='automatic';这时候,报错如下。

  那么意思是还没重做完,等一下再操作即可。

mysql> set @@session.gtid_next='de853101-b165-11e9-900a-000c291f4171:18';
ERROR 1766 (HY000): The system variable gtid_next cannot be set when there is an ongoing transaction.

【1.1.5】核验

  show slave status\G -- 查看进程状态与错误信息 是否OK

  use test;show tables; -- 查看数据是否同步过来,OK了啊

  

【1.1.6】如果是主库的最后一条事务报错,怎么办?

【2】非GTID模式下跳过错误事务

.跳过指定数量的事务:(建议如果已经出现了错误,使用这种办法)
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = ; #跳过一个事务
mysql>slave start;

【3】5.7增强半同步从库宕机如何重新连入主库?

增强半同步从库宕机如何重新连入主库?(或者直接重新备份还原)
. 此2个参数rpl_semi_sync_master_enabled  和rpl_semi_sync_slave_enabled  不要直接写入到my.cnf配置文件开启。
.在slave库上先 stop slave io_thread ;set global rpl_semi_sync_slave_enabled= 关闭此参数。
然后start slave io_thread 或者start slave 开启异步复制,让slave库追赶上master库。
.然后在slave库 set global rpl_semi_sync_slave_enabled= ;stop slave io_thread;start slave io_thread;

【4】Slave failed to initialize relay log

mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository 解决:
reset slave;

【5】Got fatal error 1236 from master when reading data from binary log: 'Misconfigured master - master server_id is 0'

mysql -uroot -predhat -e "show slave status\G;"
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Misconfigured master - master server_id is 0' 解决:
修改server_id,id冲突

【6】UUID错误,删除data下的auto.cnf

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

 或者修改这个文件内的UUID也可以

  

【7】主从节点GTID开启不一致

mysql -uroot -predhat -e "show slave status\G;"
The replication receiver thread cannot start because the master has GTID_MODE = ON and this server has GTID_MODE = OFF 解决:
主从节点GTID开启不一致

【8】跳过主库已经忽略的GTID事务

错误1236
Got fatal error 1236 from master when reading data from binary log:
'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
错误1236
Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' 解决: 1,不需要重新搭建主从的方式,对于主从复制报错,出现问题,虽然重新搭建主从是万能法,但尽量尝试其它方式,因为对于大数据量数据库,重新搭建主从需要耗费很长时间。 在主库上执行 mysql>show global variables like '%gtid_purged%'; 或 show global variables like '%gtid%'\G 查看主库的gtid_purged的value值。 在从库上也执行该命令,查看gtid_purged值是否和主库相同,如果小于主库的值如下。 2,在从库上执行 mysql>stop slave; mysql>set @@global.gtid_purged='主库查询到的value值'; #'set @@global.gtid_purged='a95d8cb2-3ff7-11e9-8bfa-000c299b47f8:16-23'; mysql>begin;commit; mysql>set gtid_next='automatic'; mysql>start slave; 查看一下主从状态。 mysql>show slave status\G; 这时的主从状态,SQL线程和IO线程都是yes了。
一般两种情况会出现以上现象
1.在主库上手动执行清除二进制日志文件
2.主库重启,重新同步时
二、解决方法:
1.在主库上执行以下命令,查询gtid_purged,记录下改值
mysql> show global variables like '%gtid%'\G
wKiom1hTZpKCU8WoAABPgzDyrTQ054.png
2.在从库上执行以下命令,查询已经执行过的gtid即gtid_executed,记录下主库的值,本机的不需要
wKioL1hTZp-DQZMvAAAspE0SKJ8150.png
3.在从库上执行以下命令停止同步线程及重置同步相关信息
mysql> stop slave;
mysql> reset slave;
mysql> reset master;
4.在从库上设置gtid_purged
该值有两个来源,一是在主库上查询的gtid_purged,二是在从库上查询的已经执行过的gtid_executed值(本机的就不需要,主库上gtid)
注意:一定记得加上从库上已经执行过的gtid,若只设置了主库上的gtid_purged,此时从库会重新拉取主库上所有的二进制日志文件,同步过程会出现其他错误,导致同步无法进行
mysql> set @@global.gtid_purged='4fa9ab33-3077-11e6-8ee6-fcaa14d0751b:1-18240458,6e41a42e-8529-11e6-b72e-fcaa14d07546:1-56604052:56604054-56605629:56605631-56871196,9850e381-b601-11e6-8e46-fcaa14d07546:1-3126210,c5cdcae2-9cb0-11e6-909c-fcaa14d0751b:1-1189,10a59961-c02d-11e6-a2de-fcaa14d07546:1-13381418';
注意:设置gtid_purged值时,gtid_executed值必须为空否则报错,该值清空的方法就是reset master命令
执行完,再次查看相关信息

相关文章:

  

  mysql复制的日常管理维护,mysql复制常见问题处理

(5.11)mysql高可用系列——复制中常见的SQL与IO线程故障的更多相关文章

  1. (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点

    目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...

  2. (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)

    一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...

  3. (5.15)mysql高可用系列——MHA实践

    关键词:MHA,mysql mha [1]需求 采用mysql技术,实现MHA高可用主从环境,预计未来数据量几百G MHA概念参考:MYSQL高可用技术概述 [2]环境技术架构 [2.1]MHA简介 ...

  4. MySQL高可用系列之MHA(二)

    一.參数说明 MHA提供了一系列配置參数.深入理解每一个參数的详细含义,对优化配置.合理使用MHA非常重要.非常多高可用性也都是通过合理配置一些參数而实现的. MHA包含例如以下配置參数,分别说明例如 ...

  5. (5.1)mysql高可用系列——高可用架构方案概述

    关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...

  6. (5.3)mysql高可用系列——mysql复制(理论篇)【续写中】

    关键词:mysql主从复制,mysql复制,MGR,mysql并行复制 目录 [1]mysql支持的复制类型 [2]mysql的主从4种同步方式介绍 (1)异步 (2)同步 (3)5.6 半同步 (4 ...

  7. (5.3)mysql高可用系列——mysql复制之复制的参数

    参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539 详情 [1]参数 #[1.1]基本参数 bind-address=192.168.1.201 ...

  8. (5.14)mysql高可用系列——级联复制与多主一从

    目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup ...

  9. (5.4)mysql高可用系列——MySQL异步复制(实践)

    关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数 ...

随机推荐

  1. 51 Nod 1163 最高的奖励

    1163 最高的奖励  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成 ...

  2. Codeforces 1167 F Scalar Queries 计算贡献+树状数组

    题意 给一个数列\(a\),定义\(f(l,r)\)为\(b_1, b_2, \dots, b_{r - l + 1}\),\(b_i = a_{l - 1 + i}\),将\(b\)排序,\(f(l ...

  3. Python基础之Python解释器

    当我们在编写Python代码时,我们得到的是一个包含Python代码的,以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开 ...

  4. Java集合框架系列大纲

    ###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...

  5. python-matplotlib-2

    figure的使用 x = np.linspace(-1, 1, 50) y1 = 2 * x + 1 #figure 1 plt.figure() plt.plot(x, y1) # figure ...

  6. cmake 工具使用

    cmake_minimum_required(VERSION 3.5)#cmake版本 project( DisplayImage )#项目名称 find_package( OpenCV REQUIR ...

  7. hive序列化和反序列化serde

    一.简介 SerDe是Serializer/Deserializer的缩写.SerDe允许Hive读取表中的数据,并将其以任何自定义格式写回HDFS. 任何人都可以为自己的数据格式编写自己的SerDe ...

  8. SpringSecurity remember-me功能

    1./login .and().formLogin().loginPage("/user/login.html") //在successHandler中,使用response返回登 ...

  9. 爬取百度网盘资源报user is not authorized, hitcode:119

    爬取百度网盘资源报user is not authorized, hitcode:119 一.总结 一句话总结: 可能是百度网盘禁止非客户端环境下载大文件,所以将请求头改为客户端:'User-Agen ...

  10. Note 2 for <Pratical Programming : An Introduction to Computer Science Using Python 3>

    Book Imformation : <Pratical Programming : An Introduction to Computer Science Using Python 3> ...