mysql主从不同步 tar_Mysql主从不同步问题处理案例

在使用Mysql的主从复制架构中,有两个比较头疼的问题:

1、主从数据不同步后如何处理

2、主从同步延迟问题如何解决

本文将根据实际案例来分析下问题1,至于问题2多数文档介绍的办法是启用多线程复制来解决,言归正传,这里的问题1还可以细分成两种情况。

1、Slave_IO_Running和Slave_SQL_Running在YES情况下,主从数据不同步如何处理?

2、Slave_SQL_Running在NO情况下,主从数据不同步如何处理?

出现第一种情况通常原因是手工去修改了从库的数据导致主从数据不一致,这种情况如果不及时处理,当主库也更新了对应的数据的时候,就会演变为第二种情况。

举个例子:

在一主一从的条件下,当前主从的数据是同步的。

wKioL1defkyRX4N5AAAsgdsSjK0970.png-wh_50

人为去操作从库的某张表数据,本例中以asm_user表为演示,其中id字段为主键

mysql> insert into test.asm_user (id,name,salary) values (1,'a',10000);

wKioL1defnOQRVV1AAAbXUTtCaw457.png-wh_50

当主库的这条数据未变动的时候,当前主从同步进程中Slave_IO_Running和Slave_SQL_Running还是为YES,目前只是asm_user这张表的数据不同步而已,对应其他schema上的数据还是会保持主从同步;

但如果这个情况,主库执行相同的SQL语句:

mysql> insert into test.asm_user (id,name,salary) values (1,'a',10000);

wKiom1defYWD6mNsAAAulN7mfCk568.png-wh_50

对应的SQL apply到从库的时候就会发现duplicate key,这个时候主从的同步就会停止掉。

wKioL1deg_aB1GSFAADVt0D2mrI706.jpg-wh_50

# tail -f /home/mydata/localhost.localdomain.err

wKiom1degxHSg_fYAAHU5lGGFJE782.jpg-wh_50

这种情况下,一般我们采用maatkit工具来校验主从数据库的数据差异情况。

这个办法其实回答了前面的问题1,Slave_IO_Running和Slave_SQL_Running在YES情况下,主从数据不同步如何处理?

# yum -y install perl-TermReadKey

# wget ftp://ftp.netbsd.org/pub/pkgsrc/distfiles/maatkit-7540.tar.gz

# tar -zxvpf maatkit-7540.tar.gz

# cd maatkit-7540

# perl Makefile.PL

# make && make install

# mk-table-checksum h=192.168.115.6,u=root,p=123456,P=3306  \

h=192.168.115.7,u=root,p=123456,P=3306 -d test | mk-checksum-filter

# mk-table-checksum h=192.168.115.6,u=root,p=123456,P=3306 \

h=192.168.115.7,u=root,p=123456,P=3306 -d test

wKioL1defwTiewiDAAAf3dxeEvM458.png-wh_50

如果主从数据不一致则采用mk-table-sync进行数据同步

# mk-table-sync --execute --print --no-check-slave --transaction --databases test  \

h=192.168.115.6,u=root,p=123456 h=192.168.115.7,u=root,p=123456

很明显当前test库数据是一致的,目前主从同步这个错误是可以忽略的,因此我们采用跳过这个事务的办法来处理主从数据库不同步问题。通常在生产环境中,主库的数据是不断的更新的,这里我们在主从数据不同步的情况下在主库继续插入一条数据,方便后续验证。

wKiom1defiiSepqiAAAHhCqI68I693.png-wh_50

下面我们开始处理主从不同步问题:

在未启用GTID复制的情况下采用下面的方法跳过事务:

mysql>slave stop;

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  //跳过一个事务

mysql>slave start;

Mysql5.6之后支持GTID复制,开启GTID复制的好处很多,具体可以百度一下!但当开启gtid后就不能采用前面那种办法来跳过事务。

wKiom1defmHANpENAAAbbunNJGg135.png-wh_50

在show slave status \G;输出中的最后几条里面,

Retrieved_Gtid_Set项:记录了relay日志从Master获取了binlog日志的位置

Executed_Gtid_Set项:记录本机执行的binlog日志位置(如果是从机,包括Master的binlog日志位置和slave本身的binlog日志位置)

wKiom1defnejlgvOAABIDzTvZPo455.png-wh_50

我们要跳过事务的GTID在错误日志中有记录

# tail -f /home/mydata/localhost.localdomain.err

wKiom1defp6BFAf4AABxhFEkNRE916.png-wh_50

mysql> set session gtid_next='bd9e9912-2bc7-11e6-bade-000c29b8871c:1440';

mysql> begin;commit;

mysql> set session gtid_next=automatic;

wKiom1defruipUhkAAAWDyHizeU551.png-wh_50

mysql> start slave;

mysql> show slave status \G;

wKiom1deftez44ZfAAAxVx15lp4238.png-wh_50

验证从库数据是否和主库一致

mysql> select * from test.asm_user;

wKioL1degAejA92LAAAJkqFK890385.png-wh_50

前面模拟了Slave_SQL_Running在NO情况下,主从数据不同步情况的处理过程,在现实的环境中,往往情况要复杂的多,下面分享一则内存开发库因为断电导致主从数据不一致的故障处理:

1、因为电源故障,导致主从数据库全部宕机,电源恢复后,主库启动正常,从库无法启动,通过分析日志发现可能是电源故障导致从库的固态盘异常,许多的binlog文件权限出现???,这些文件甚至无法正常查看

wKioL1degB-A0o4tAAIJHQ0T6_o437.png-wh_50

1、通过fsck -y进行文件系统校验修复坏块,修复完成后从库数据库可以启动,但开启复制进程的时候报中继日志丢失

2、在没有办法的情况下,采用主库dump数据,从库重新source的办法在线重做主从数据同步。整个操作过程中,主库的数据不断的写入。

下面是大致的步骤:

3.1、主库导出全库数据,注意一定要使用--single-transaction参数

# /usr/local/mysql/bin/mysqldump --all-databases --single-transaction --triggers --routines > /tmp/1.sql

3.2、将备份文件拷贝到从库进行source

3.3、开启从库的复制进程

mysql> change master to master_host='192.168.1.15',

master_user='rep1',master_password='123456',MASTER_AUTO_POSITION=1;

mysql> start slave;

©著作权归作者所有:来自51CTO博客作者ylw6006的原创作品,谢绝转载,否则将追究法律责任

mysqlmasterslaveMysql

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

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

相关文章

编程语言优缺点_R编程语言的优缺点

编程语言优缺点In general, the R programming language is considered as the machine learning language. This is widely employed in the applications where the data analysis, visualization, and the sampling process are involved. The R programming language is ta…

mysql重做日志与binlog日志区别_MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...

MySQL中有六种日志文件,分别是重做日志(redo log)回滚日志(undo log)二进制日志(binlog)错误日志(errorlog)慢查询日志(slow query log)一般查询日志(general log)中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作…

python 绘制三角函数_Python | 绘制三角函数

python 绘制三角函数Trigonometry is one of the most important parts in engineering and many times, therefore matplotlib.pyplot in combination with NumPy can help us to plot our desired trigonometric functions. In this article, we are going to introduce a fe…

《深入理解Elasticsearch(原书第2版)》一2.3.3 把查询模板保存到文件

本节书摘来华章计算机《深入理解Elasticsearch(原书第2版)》一书中的第2章 ,第2.3.3节,[美]拉斐尔酷奇(Rafal Ku) 马雷克罗戈任斯基(Marek Rogoziski)著 张世武 余洪淼 商旦 译 …

python两个中文队列比较_具有两个优先级的优先级队列Python

使用NPE的策略-一个tuple作为队列优先级,tuple是(fpriority, spriority):import Queueclass Job(object):def __init__(self, fpriority, spriority, descriptionblah, iatafoo , hopsample, costfree pitchers):self.fpriority fpriorityself.spriorit…

之江学院第0届 A qwb与支教 容斥与二分

题目链接: http://115.231.222.240:8081/JudgeOnline/problem.php?cid1005&pid0 题目描述: 给你三个数x, y, z 和 N 输出从1开始数第N个不是x, y, z 任意一个数的倍数的数字 解题思路: 一看到倍数我先想到素数唯一分解定理, …

java toarray_Java Vector toArray()方法与示例

java toarray向量类toArray()方法 (Vector Class toArray() method) Syntax: 句法: public Object[] toArray();public Object[] toArray(Type[] ty);toArray() method is available in java.util package. toArray()方法在java.util包中可用。 toArray() method i…

Python基础--环境配置、编码风格、基础概念、基本数据类型(1)

#######python########python的基本[rootdesktop ~]# yum install python -y[rootdesktop ~]# python -V ##查看python版本Python 2.7.5[rootdesktop ~]# python --versionPython 2.7.5为什么用/usr/bin/python关于python脚本中的第一行内容 :#!/usr/bin/python 这种写法表示…

java treemap_Java TreeMap keySet()方法与示例

java treemapTreeMap类的keySet()方法 (TreeMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to return a set of keys that exists in this TreeMap to be viewed in a Set. keyS…

mysql简单部署_安装部署Mysql实例(最简单快速噢)

题外话作为Mysql DBA,我们平时必须要熟练的一个最最基础的技能,即安装部署Mysql实例,所以本文分享一个快速安装部署Mysql实例的方法。一、环境介质准备Mysql安装包准备服务器准备我这里使用的是centos 7.x,此方法适用于任何其他li…

zabbix增加手机端4个url地址的返回值

由同事提供4个需要监控的url地址GET类型:http://10.15.24.61:809/UserCenterService.svc/getAccountInfo/563/9638POST类型:http://10.15.24.61:809/ProductService/userInvestVarietyYjsList/4/0/563/1/9638/1.0http://10.15.24.61:809/ProductService/…

java timezone_Java TimeZone setID()方法与示例

java timezoneTimeZone类的setID()方法 (TimeZone Class setID() method) setID() method is available in java.util package. setID()方法在java.util包中可用。 setID() method is used to set the id of this TimeZone. setID()方法用于设置此TimeZone的ID。 setID() metho…

iis php mysql 集成_如何在IIS上集成php(iis+mysql+php+zend)

下面介绍下如何在IIS上集成php、这里我就不说cgi了,因为cgi需要系统权限过高,不建议虚拟主机使用,而且cgi程序也很少有人用到,楼主说的要iis6.0结合php安装需要:windows2003系统 安装有IIS6.0php-5.1.1-Win32.zipmysql…

微信红包促销系统开发

如今,互联网的普及,借助网络,营销更加方便。已经有商家开始与我们合作开发新推出的微信二维码红包促销活动了,不仅能达到活动气氛还能进行防伪,同时还可以给自己的公众号沉淀粉丝。微信红包促销系统开发—— 张小龙作为…

hashmap示例_Java HashMap remove()方法与示例

hashmap示例HashMap类的remove()方法 (HashMap Class remove() method) remove() method is available in java.util package. remove()方法在java.util包中可用。 remove() method is used to remove the key-value pairs that exist in this HashMap for the given key eleme…

mysql 中有行号吗_重置SQLite3 / MySQL中的行号计数

sqlite的使用:DELETE FROM your_table;DELETE FROM sqlite_sequence WHERE name your_table;sqlite keeps track of the largest ROWID that a table has ever held using the special sqlITE_SEQUENCE table. The sqlITE_SEQUENCE table is created and initializ…

『科学计算』科学绘图库matplotlib练习

思想:万物皆对象 作业 第一题: import numpy as np import matplotlib.pyplot as pltx [1, 2, 3, 1] y [1, 3, 0, 1]def plot_picture(x, y):plt.plot(x, y, colorr, linewidth2, linestyle--, markerD, labelone)plt.xticks(list(range(-5,5,1)))plt.…

Java BigDecimal min()方法与示例

BigDecimal Class max()方法 (BigDecimal Class max() method) max() method is available in java.math package. max()方法在java.math包中可用。 max() method is used to return the least value of (this BigDecimal) and the given (BigDecimal ob). max()方法用于返回(t…

mysql下载64位 csdn_Linunx-CentOS7安装mysql-5.7.23-linux-glibc2.12-x86_64.tar

2. Linux下安装Mysql2.2 将下载好的mysql安装包通过xftp上传到虚拟机上。2.3 将安装包移动到/usr/local路径下#mv mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz /usr/local2.4 解压安装包#tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz2.5 重命名解压文件或者是建立软…

tempdb 相关总结

/* -- 0. 高速压缩tempdb为初始值 USE tempdb DBCC SHRINKFILE(2,TRUNCATEONLY); */-- 1. tempdb以下未回收的暂时表 ,某些版本号可能查不到数据 use tempdb; select * from sys.objects o where o.type like %U%;-- Chapter 7 - Knowing Tempdb -- christiancoeo.com-- Show t…