mysql双主使用reset master清除日志要小心

假设a、b两台服务器做了mysql双主。

有一表是tab是这样的

create table tab(id int primary key auto_increment,name varchar(20));

然后

如果是mysql主从的话,a是主,那么a机

reset master;

然后b机

stop slave;

reset slave;

start slave;

如果在a机reset master之后,b机stop slave之前,有新数据插入、删除等操作,当b机start slave后,b机不会掉数据,那些新数据还是会被同步过来的。

b机为什么要stop slave;reset slave;start slave;  ?

因为reset master之后,到b机show slave status\G虽然还是显示同步,但你可以到a机show master status;就会发现与b机show slave status\G显示的Master_Log_File、Relay_Master_Log_File不是指向a机show master status显示的日志文件,因为reset master之后,a机的binlog日志从XXX.000001开始,之前的日志都被删除了。指向的日志不是a机的日志,b机当然是不可能同步了。即使在a机插入一条新记录,b机的Master_Log_File、Relay_Master_Log_File还是没有指向新的日志,重启mysql也无效。

错误提示:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘could not find next log‘

只有stop slave;reset slave;start slave;才能重新指向新的日志。在b机执行这几个命令之前,插入到a机的数据,在运行这几条命令之后,会同步回来的,所以不用担心数据丢失。

但是mysql双主却会因为一些特殊情况造成数据出问题还会影响同步。

假设前面的表tab,有数据

+----+------+

| id | name |

+----+------+

|  1 | a    |

|  2 | b    |

|  3 | c    |

因为双主同步,所以a机和b机数据是一致的

a机

reset master;

然后b机

stop slave;

reset slave;

start slave;

在a机reset master之后,b机stop slave之前,有新数据分别插入到a机和b机,这时问题就来了

在a机

insert into tab(name) values(‘d‘);

select * from tab;

得到

+----+------+

| id | name |

+----+------+

|  1 | a    |

|  2 | b    |

|  3 | c    |

|  4 | d    |

b机

select * from tab;

+----+------+

| id | name |

+----+------+

|  1 | a    |

|  2 | b    |

|  3 | c    |

前面说了原因,我就不再说了。

然后在b机

insert into tab(name) values(‘e‘);

select * from tab;

得到

+----+------+

| id | name |

+----+------+

|  1 | a    |

|  2 | b    |

|  3 | c    |

|  4 | e    |

这时a机的表tab,id 是4 ,name是d,b机的表tab,id是4,name是e,表的id是主键,这种情况下,执行 stop slave;reset slave;start slave;也是会报错的。

Last_Error: Error ‘Duplicate entry ‘4‘ for key ‘PRIMARY‘‘ on query. Default database: ‘‘. Query: ‘insert into test.tab(name) values(‘d‘)‘

原因就是表的id是主键,b机的id已经有4了,这样a机的

id  name

|  4 | d    |

同步不过来,就有这种错误了,只能人工把数据同步后,再重新change master......

总结:要reset master ,就要禁止用户增删改。如果是为网站提供数据库服务的,就要关了网站,防止增删改操作,再reset吧。想把reset master做成脚本,在计划任务中运行?要三思才好

时间: 2024-12-12 10:37:29

mysql双主使用reset master清除日志要小心的相关文章

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

MySQL双主+keeplived安装部署说明

MySQL双主+keeplived安装部署说明 一.环境介绍 1.1.规划 序号 类别 版本 主机名 IP 端口 备注 1 OS CentOS release 6.9 (Final) (minimal) my1 172.16.210.180 8306 172.16.210.183 2 mysql mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz my2 172.16.210.181 8306 3 keeplived keepalived-1.2.7.tar.g

MySQL双主环境复制延时故障处理

故障现象生产中的一组MySQL双主(主库A和主库B)+Keepalived高可用单写(主库A),出现B库高延时问题.检查B库复制状态如下图1:(B库的复制状态-图1)问题分析1.和开发人员确认,这组MySQL双主每天有批量的数据导入操作,业务是网站展示前一天股票大盘指数,数据是由脚本批量导入,从而产生了复制延时.2.通过对导数据脚本分析,导数据是对一个表先进行delete后进行insert操作:股指大盘展示数据只保留一天数据,因此确认不需要保留前一天数据,修改脚本先truncate表后inser

MySQL双主(主主)架构方案

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入口,增加高可用.不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题. 主从同步复制原理 在开始之前,我们先来了解主从同步复制原理. 复制分成三步: 1. master将改变记录到二进制日志(binary

keepalived+mysql双主

       mysql高可用keepalived+mysql双主 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC. 本节主要介绍了利用 keepalived 实现 MySQL 数据库的高可用. Keepalived+mysql双主来实现MySQL-HA,我们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系,通过Keepalived配

MySQL双主互备模式架构

MySql双主互备架构模式 操作系统 CentOS 6.3 MySql版本 mysql-5.0.56 keepalived keepalived-1.1.19.tar.gz Master DB1配置文件 修改MySql 配置文件  /etc/my.cnf 增加以下段落 [mysqld] server-id=1    节点标示 log-bin=mysql-bin   开启mysql的binlog日志功能 relay-log = mysql-relay-bin  用来定义日志文件命名格式 repli

通过KeepAlived搭建MySQL双主模式的高可用集群系统

企业级MySQL集群具备高可用.可扩展.易管理.低成本的特点.下面将介绍企业环境中经常应用的一个解决方案,即MySQL的双主互备架构,主要设计思路是通过MySQL Replication技术将两台MySQL Server互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制.这样就实现了高可用构架中的数据同步功能,同时,将采用KeepAlived来实现Mysql的自动failover.在这个构架中,虽然两台MySQL Server互为主从,但同一时刻只有一个MySQL Ser

MySQL 高可用性之keepalived+mysql双主

生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有一台MySQL服务器挂掉后,另外一台能立马接替其进行工作. MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC. 这里将主要介绍了利用 keepalived 实现 MySQL数据库的高可用. Keepalived+mysql双主来实现MySQL-HA,我们必须保

MySQL双主(master-master)补充

环境: 主机名 主机IP 操作系统 MySQL版本 mysqlA 172.16.4.235 CentOS 6.52.6.32-431.el6.x86_64 mysql-community-server-5.7.5-0.6.m15.el6.x86_64 mysqlB 172.16.4.236 CentOS 6.52.6.32-431.el6.x86_64 mysql-community-server-5.7.5-0.6.m15.el6.x86_64 MySQL双主+半同步架构搭建参考上一篇博文:h