我正在尝试修复主-主 MySQL 数据库复制模型之间的复制。
服务器 1(IP 为 192.168.2.6)配置为:
auto-increment-increment = 2
auto-increment-offset = 1
因此它只写入奇数主键自动递增 ID。
服务器 2(IP 为 192.168.2.7)配置如下:
auto-increment-increment = 2
auto-increment-offset = 2
因此它仅写入偶数主键自动递增 ID。
有人告诉我这个方法已经管用一段时间了,但自从我入职以来,它一直处于同步失败状态。我假设这是可能的。
我的工作就是让它以这种方式工作。我已完成以下步骤以尝试使它们同步:
Server 1:
mysql>
RESET MASTER;
# First time only:
#GRANT REPLICATE SLAVE ON *.* TO 'replicate'@192.168.2.7 IDENTIFIED BY '[password_redacted]';
#FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
bash#
mysqldump -u root -p -ceQRE --hex-blob --triggers --opt --single-transaction --comments --dump-date --no-autocommit --all-databases -r /root/master.sql
scp -P 5934 /root/master.sql [email protected]:.
mysql>
UNLOCK TABLES;
Server 2:
mysql>
STOP SLAVE;
bash#
mysql -u root -p < /root/master.sql
mysql>
# First time only:
#GRANT REPLICATE SLAVE ON *.* TO 'replicate'@192.168.2.6 IDENTIFIED BY '[password_redacted]';
#FLUSH PRIVILEGES;
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.2.6', MASTER_USER='replicate', MASTER_PASSWORD='[password_redacted]', MASTER_LOG_FILE='ibm.000001', MASTER_LOG_POS=28556380;
START SLAVE;
SHOW SLAVE STATUS\G
Server 1:
mysql>
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.2.7', MASTER_USER='replicate', MASTER_PASSWORD='[password_redacted]', MASTER_LOG_FILE='ibm.000004', MASTER_LOG_POS=121875;
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (reminderdental2), REPLICATE_IGNORE_DB = (mysql);
START SLAVE;
每次都说正在同步,但行数始终不一致。一段时间后,我会收到错误:
Slave SQL for channel '': Slave failed to initialize relay log info structure from the repository, Error_code: 1872
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
我还尝试使用 Percona XtraBackup 来获取二进制备份/恢复,以便第一次启动它。
我考虑过转向 GTID 复制,但听说性能不太好。我对这两种解决方案都很感兴趣,希望能够以这种方式工作,并希望了解使用 GTID 的 2-9 服务器集群的性能反馈。
服务器1的版本是:
5.7.21-0ubuntu0.16.04.1-log (Ubuntu)
percona-xtrabackup-24/unknown,now 2.4.9-1.xenial amd64 [installed]
Serer 2 的版本是:
5.7.21-log MySQL Community Server (GPL)
percona-xtrabackup-24, 2.4.9.1.el7
答案1
在 MySQL > 6 上你还应该使用
mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;
应该是一样的,但使用文档化的命令比调整系统表要好。另请参阅https://dev.mysql.com/doc/refman/8.0/en/reset-slave.html
答案2
如果您收到以下错误:
[错误] 通道“group_replication_applier”的从属 SQL:从属无法从存储库初始化中继日志信息结构,错误代码:1872
解决方案如下:
从 mysql 控制台:
USE mysql;
TRUNCATE TABLE slave_relay_log_info;
然后重新启动mysql:
service mysql restart
希望这也适合你们!
答案3
我知道这个问题已经很老了,今天我就遇到了这个问题,对我有用的是 Alessandro Carini 和 user260223 答案的组合:
在 mysql 控制台中使用 root 用户:
mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;
进而:
USE mysql;
TRUNCATE TABLE slave_relay_log_info;
然后重新启动mysql服务
sudo service mysql restart
设置主信息:
CHANGE MASTER TO MASTER_HOST='[your master host/IP]',
MASTER_USER='[your master replication user]',
MASTER_PASSWORD='[your master replication password]',
MASTER_LOG_FILE='[your master file]',
MASTER_LOG_POS=[your master pos];
然后
START SLAVE;
并使用以下命令检查一切正常:
SHOW SLAVE STATUS\G;
答案4
我遇到了同样的问题,在我的例子中,原因是从服务器上缺少中继文件。“索引”中继文件中有一些带文件名的条目,但其中一个条目丢失了。我删除了该条目,然后重新启动后复制就开始了。干杯。