无效GRANT语句导致主从同步断开
最近遇到一个主从同步断开的案例,是由于在执行GRANT语句时,授权对象给错了,也就可以理解为无效的GRANT语句,我们收到slave库同步断开的报警信息,然后去找问题,发现binlog有报错,报错提示谷歌一下,才知道原来这是一个bug,下面我们进行问题还原,看看发生了什么。
当时用的MySQL版本是:5.6.10
下面我们在MySQL 5.6.10版本做测试,查看slave库信息是处于同步的一个状态:
在master库上查看status信息:
在master库上执行无效grant语句:
mysql> grant file on sakila.* to admin@'192.168.10.129';
相信大家都看到图了吧,binlog由mysql-bin.000012变成了mysql-bin.000013,那就意味着当执行了无效的grant的时候,可能做了类似flush logs的操作,我们查看mysql-bin.000012发现报这样的错:
RELOAD DATABASE; # Shall generate syntax error
现在我们回到slave库查看一下信息:
看到了,同步已经断开,报The incident LOST_EVENTS occured on the master. Message: error writing to the binary log错误!!!!
以下几种grant写法,都触发刷新了binlog:
测试发现,无论是5.5还是5.6都不能针对库来授权,5.6针对库授权file权限,都会触发刷新了新的binlog,5.5版本则不会,后面会测试MySQL5.5版本。针对所有库授权file权限是没问题的,如下:
出现同步断开的解决方法:
1)使用sql_slave_skip_counter跳过事件,但此方法只适用于基于二进制日志原理的复制,不适用于基于GTID原理的复制。
2)使用slave_skip_errors跳过错误。
3)在从库上做change master操作,重新切换master_log_file和master_log_pos。(由于无效的grant语句执行后会创建新的二进制日志,所以可以指定主库show master status的master_log_file和master_log_pos)
下面我们在MySQL 5.5.40测试:
查看slave库的信息如下:
在mater查看status并执行无效grant语句:
可以看到,binlog还是原来的binlog,并没有出现像MySQL5.6的那种情况,我们查看下slave的情况可以看到依然处于同步状态:
总结:现在越来越多公司用MySQL5.6的版本了,的确MySQL5.6的版本,相对MySQL5.5版本已经改善了不少,所以很多公司已经升级或者直接用上了MySQL5.6,如果线上用的中5.6版本的MySQL,grant授权的时候就要注意了,无效grant可能会触发刷新了binlog,特别对于那种一主多库的架构,slave提供读的情况,就更要注意了,这可能是一个bug,在网上找资料的时候,看到5.6.11还有5.6.13都有出现这样的情况,有兴趣的朋友可以测试下MariaDB,如果有别的见解的朋友,希望能一起请请讨论分享下,谢谢。
参考资料:
http://www.psce.com/blog/2013/04/09/granting-privileges-may-break-replication-in-mysql-5-6-10/
https://bugs.mysql.com/bug.php?id=68892(自备梯子)
作者:xuanzhi
出处:Azhi的博客 http://www.cnblogs.com/xuanzhi201111
您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。
作者:陆炫志 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。 |
无效GRANT语句导致主从同步断开的更多相关文章
- 从库因为sql错误导致主从同步被中断的问题解决
从库因为sql错误导致主从同步被中断的问题解决:show slave status\G;看lasterror:看延迟多少秒,正常情况下是没有延迟的. 跳过错误的那条sql:SET GLOBAL SQL ...
- 高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句. Bin Log共有三种日志格式,可以binlog_format配置参数指定. ...
- redis 主从同步&哨兵模式&codis
主从同步 1.CPA原理 1. CPA原理是分布式存储理论的基石: C(一致性): A(可用性): P(分区容忍性); 2. 当主从网络无法连通时,修改操作无法同步到节点,所以“一致性”无法满足 ...
- group_concat函数导致的主从同步异常
group_concat函数导致的主从同步异常的问题总结 今天在处理一个group_concat函数导致的主从异常的问题,排查过程比较简单,不过第一次遇到这个问题记录一下排查的思路,后面如果再遇到其他 ...
- SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)
SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...
- mysql 之 主从同步(单向同步和双向同步)
一. 实验环境部署 主服务器(MySQL-01) IP: 192.168.8.241 端口3306 ,操作系统:Centos6.5 64位 从服务器(MySQL-02) IP: 192.168. ...
- MYSQL管理之主从同步管理
原文地址:MYSQL管理之主从同步管理 作者:飞鸿无痕 MYSQL管理之主从同步管理 MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重 ...
- 烂泥:mysql5.5主从同步复制配置
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mys ...
- MySQL数据库的主从同步实现及应用
>>主从同步机制及应用 读写分离(Read/Write Splitting)让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),从数据库处理SELECT查询操作 ...
随机推荐
- Jenkins之自动构建
修改job的配置: Build periodically:不管版本是否修改,都会执行: Poll SCM:只有当版本有修改才会执行.
- logstash获取日志,时间戳相差8小时
背景: logstash版本:2.4.9 由于logstash在获取时区的时候,默认获取的是UTC默认时间,同时elasticsearch在创建索引的时候,统一使用UTC时间,因此实际上在创建 ...
- 平面最近点对(分治nlogn)
平面最近点对,是指给出平面上的n个点,寻找点对间的最小距离 首先可以对按照x为第一关键字排序,然后每次按照x进行分治,左边求出一个最短距离d1,右边也求出一个最短距离d2,那么取d=min(d1, d ...
- 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理
浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...
- bzoj3884上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- 解析word公式的解决方案(office插入和wps插入不同的解决方案)
这几天在公司的项目有个需求就是数学公式的导入,而对于word来说,插入的公式xml格式,需要转换为mathML,借用插件MathJax来进行展示,而对于wps插入的公式来说,获取到的是一个wmf图片, ...
- map经典代码---java基础
package com.mon11.day6; import java.util.HashMap; import java.util.Map; /** * 类说明 :实现英文简称和中文全名之间的键值对 ...
- crontab定时任务2_net
2017年2月25日, 星期六 crontab定时任务2_net 1.先来一个小小的例子 查看当前路径: [root@root test]# pwd /home/admin/test [root@ro ...
- tweenMax学习笔记
tweenMax是一款缓动插件,能实现很多牛逼的效果,在网上看了些demo,确实很吊,虽说很多用CSS3也能做出来,但是技多不压身,学之. 网上的demo还是很多的,但是资料不多,唯一能够让我有思绪的 ...
- css中实现ul两端的li对齐外面边缘
其实就是设置ul的宽度大一些就好