mysql 主主同步失败_MySQL 主主复制失败问题

今天遇到 MySQL 主主同步复制失败的问题,记录下解决办法

注意下文中 MySQL 版本比较老,现在新版版本支持了很多新的特性。笔者用的 MySQL 版本是 5.7。

问题描述:

DB1 和 DB2 设置了主主复制,在 DB1 上新建数据库后,在 DB2 上没有同步。查看 DB2 的 slave 状态 show slave status\G;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.82.40

Master_User: root

Master_Port: 3300

Connect_Retry: 60

Master_Log_File: mysql-bin.000002 //同步文件

Read_Master_Log_Pos: 48527 //同步位置

Relay_Log_File: WRD02-relay-bin.000003

Relay_Log_Pos: 58655

Relay_Master_Log_File: mysql-bin.000003

Slave_IO_Running: NO //io状态

Slave_SQL_Running: NO //sql状态

Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

与 DB1 的 master 状态对比,show master status;

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000003 | 162880 | smp,sdp,crm,webrtcgw,rtc | | |

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

1 row in set (0.01 sec)

可以看到 DB1 上的 bin-log 已经记录到了 mysql-bin.000003 的 162880 位置,但是 DB2 上只是同步到了 mysql-bin.000002 的 48527 位置,并且 Slave_IO_Running 和 Slave_SQL_Running 都为 NO,说明 DB2 的同步功能不正常。

同样的方法查看 DB1,发现 DB1 的同步状态为:

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.82.41

Master_User: root

Master_Port: 3300

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 85486

Relay_Log_File: WRD01-relay-bin.000010

Relay_Log_Pos: 27380

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

同步状态正常且与 DB2 的 master 状台一致:

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000004 | 85486 | smp,sdp,crm,webrtcgw,rtc | | |

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

1 row in set (0.01 sec)

所以问题只出现在 DB2 上,先关闭 slave 再重启试试:

stop slave;

start slave;

查看 show slave status\G;发现正在连接

Slave_IO_Running: CONNECTING

Slave_SQL_Running: Yes

过会再查看还是两个 NO,这时候需要关闭 slave 手动同步,执行:

stop slave;

CHANGE MASTER TO

MASTER_HOST='172.16.82.40',

MASTER_USER='root',

MASTER_PASSWORD='cinCC1234',

MASTER_LOG_FILE='mysql-bin.000003',

MASTER_LOG_POS=162880;

start slave

查看 show slave status\G;发现状态正常。

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.82.40

Master_User: root

Master_Port: 3300

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 162880

Relay_Log_File: WRD02-relay-bin.000003

Relay_Log_Pos: 58655

Relay_Master_Log_File: mysql-bin.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: smp,sdp,crm,webrtcgw,rtc

在 DB1 上修改数据库,DB2 同步正常。

PS:

记一下修改 my.cnf 时候启动报错 The server quit without updating PID file,解决办法:

查看 my.cnf 中 log_error=/home/mysql/data/log_error,查看 log_error.err 中的具体报错信息,发现是 my.cnf 配置的一个变量名写错了,改了就行。

参考前还是建议先看错误日志,不建议直接照着帖子做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值