MySQL 传统复制中常见故障处理和结构优化案例分析

虽然MySQL5.7 的主从复制已经很稳定了,但在备库可读写的情况下,总是会出现部分数据不一致的情况,例如常见的1062、1032和1050错误。下面就介绍下这类报错的常见处理方法和常见主从复制结构的调整。

环境描述

  • 1、mysql 5.7 以上,
  • 2、binlog format 是row格式(5.7默认)
  • 3、传统复制(生产强烈推荐使用gtid)
  • 4、log-bin , log_slave_updates 开启
  • 5、复制结构:101:3306> 103:3306 > 104:3306

常见主从复制报错

1、表重复错误: 1050

从库已经有T2表,再在主库上创建T2. 处理原则:以主库为准,在从库上drop t2。 然后重启slave。

注意: 在db里的操作都会记录到binlog中,如果不想被记录到binlog中,可以先set sql_log_bin=0.drop完成后,再 set sql_log_bin=1即可。

从5.7 开始,有super read only。

处理方法:

从库操作:

set sql_log_bin=0;
drop table t2;
set sql_log_bin=1;
start slave;
show slave status;

2、主键冲突: 1062

处理方法:

从库操作:

set sql_log_bin=0;
delete from t2 where id =2;
set sql_log_bin=1;
start slave;
show slave status;

3、主库上更新后,从库找不到记录 :1032

这时需要解析主库的binlog,把从库的数据补回来。

这里就能看到从库丢失的那条记录。然后在从库补充这条记录即可。

处理方法:

从库操作:

set sql_log_bin=0;
insert into t2 (id) values (2);
set sql_log_bin=1;
start slave;
show slave status;

4、主库上delete后,从库找不到记录: 1032

想看某段pos内执行过的sql: 主库执行:

mysqlbinlog --base64-output=decode-rows -v --start-position=2465
--stop-position=2748 mysql-bin.000050 > 50.sql

输出如下:

### DELETE FROM `wubx`.`wubx`
### WHERE
### @1=2### @2='wubx'
ROLLBACK /* added by mysqlbinlog */ /*!*/; 

注意这里的rollback。如果以后基于binlog和时间点的恢复。这条数据会被rollback掉,造成一条数据的丢失。所以如果想保留这条数据,需要找到commit的位置,或者下个pos的位置。

处理方法:

从库操作:

slave stop;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
slave start

常见复制结构调整

1、一主一从,添加从库

st=>operation: M 101:3306
e=>end
op=>operation: S1 103:3306

st->op->op1

调整为,级联或星型结构

st=>operation: M 101:3306
e=>end
op=>operation: S1 103:3306
op1=>operation: S11 104:3306

st->op->op1

2、级联复制调整

从103.3306 dump数据

mysqldump --single-transaction --master-data=2 -uroot -p123456 -A -S
/tmp/mysql3306.sock

104 导入数据

mysql -S /tmp/mysql3306.sock -uroot -p123456 < /tmp/1203.sql

change 104 到103

change master to master_host='192.168.56.103', master_user='repl',
master_password='repl4slave', master_port=3306,
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4138,
master_connect_retry=10;

101 插入测试数据

insert into t2 values (200);

101 持续insert

for ((i=1;i<=1000000;i++))
do
mysql -S /tmp/mysql3306.sock -uroot -p123456 -e
"insert into enmo.t2 values($i)"done

关闭103 主机,并检查104 slave 状态

主从的binlog 都会记录主库的server id 和timestamp信息。可以根据这2个信息去定位相应的pos信息。

101:3306

104:3306

这里可以看到101 结束 insert 1419后,并commit的 pos 是387204,所以104 change 的pos 可以选择到387204这里。但是如果104没有把1419 这条记录commit的话,就要选择101 开始 insert 1419 这个事务之间的pos:387020.

104 change 到101

change master to master_host='192.168.56.103',
master_user='repl', master_password='repl4slave',
master_port=3306, MASTER_LOG_FILE='mysql-bin.000093',
MASTER_LOG_POS=387204, master_connect_retry=10;

原文发布时间为:2017-12-14

本文作者:张灿

本文来自合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

时间: 2024-09-27 16:03:51

MySQL 传统复制中常见故障处理和结构优化案例分析的相关文章

MySQL级联复制中的数据同步(第二篇)

今天解决了两个蛮有意思的MySQL问题,简单分享出来. 首先是昨天说的级联复制的情况,因为架构做了调整,我们要删除其中的一个中继节点(新加坡节点),而直接使用北京节点去连接北美的节点. 更多的信息可以参考. MySQL级联复制中的数据同步(r11笔记第20天) 大体的架构方式如下: 如此一来,为了避免重建从库,而且没有GTID的情况下,我们可以统一规划一下偏移量,平滑迁移. 实现后的架构图如下: 看起来还是比较简单,但是偏移量真是一个比较琐碎细致的活儿.在此也感谢我的同事程振,我们一起讨论了实现

MySQL下的RAND()优化案例分析_Mysql

众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行.事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时. 首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表: [yejr@imysql]> show create table t_innodb_random\G *************************** 1. row *************************

MySQL级联复制中数据同步

    最近开发的同事反馈了一个问题,说有一台北京节点的MySQL数据库数据延迟太大,想让我们帮忙看看怎么解决.     这个问题一下子让我想起了之前"水深火热"的日子,因为这是一套MySQL级联复制的环境.这么做的目的也是为了能够方便数据查询和统计任务,看起来虽好,但是老是有一些不可控因素.    北美使用AWS在北美,都是实时的业务数据,考虑了灾备和读写分离使用了一主一从的架构,新加坡节点2是一个中继节点,也使用了AWS,可以看到新加坡节点是北美节点的从库,但是北京的主库. 北京节

网站分析中常见的流量变化原因列举分析

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在<网站流量异常变动的8种常见原因>那篇文章中,我对整站流量的变化原因进行了分析和汇总.本篇文章我们将继续这个话题,讨论网站流量变化背后的原因.与上次不同的是,这次我们将深入到各个细分流量中,如:直接流量,付费搜索品牌词等等.针对每一组细分流量背后可能的原因进行分析.下面我们就开始逐一列举分析. 一,直接流量 直接流量通常是指访问者直接输入网址或从收藏夹中访问网站的流量,但在现实中情况要复杂的多,所有无法获得引荐来源的流量都被归为直接流量,例如:

汇总优化过程中常见的SEO快速优化方式有哪些

摘要: SEO优化市场一直都是鱼龙混杂,各类优化手法层出不穷,但不论什么样的手法,都脱离不了最基础的以收录排名流量为导向的优化方式,那么在优化的过程中,最常见的的优化手法有哪 SEO优化市场一直都是鱼龙混杂,各类优化手法层出不穷,但不论什么样的手法,都脱离不了最基础的以收录排名流量为导向的优化方式,那么在优化的过程中,最常见的的优化手法有哪些呢?首先,我们要做的是对自己的网站的主体内容有个细致的分析过程. 排名型优化方式 这类优化的方式需要较高的职业素质,要求对百度的算法有一定的了解,包括包括I

puppet中file资源详细介绍及案例分析

一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org TCP/IP: 172.16.200.100/24 Packages: puppet-server-2.7.21-1.el6.noarch mcollective-client-2.2.4 activemq-5.5.0 2.puppet节点 Release: RHEL5.8 HOSTNAME: agent1.rsyslog.org TCP/IP: 172.1

puppet中Exec资源详细介绍及案例分析

一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org TCP/IP: 172.16.200.100/24 Packages: puppet-server-2.7.21-1.el6.noarch mcollective-client-2.2.4 activemq-5.5.0 2.puppet节点 Release: RHEL5.8 HOSTNAME: agent1.rsyslog.org TCP/IP: 172.1

puppet中Service资源详细介绍及案例分析

一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org TCP/IP: 172.16.200.100/24 Packages: puppet-server-2.7.21-1.el6.noarch mcollective-client-2.2.4 activemq-5.5.0 2.puppet节点 Release: RHEL5.8 HOSTNAME: agent1.rsyslog.org TCP/IP: 172.1

puppet中Package资源详细介绍及案例分析

一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org TCP/IP: 172.16.200.100/24 Packages: puppet-server-2.7.21-1.el6.noarch mcollective-client-2.2.4 activemq-5.5.0 2.puppet节点 Release: RHEL5.8 HOSTNAME: agent1.rsyslog.org TCP/IP: 172.1