配置Mysql集群主从复制报错:
我在master创建了一个数据库(demo_ds_0),然后又快速删除了。然后又再次创建了 demo_ds_0, 发现 slave 数据库没有将 demo_ds_0 库同步过来。
后面在 slave 数据库中执行
show slave status
发现 SLave_IO_Running 字段是 Yes, Slave_SQL_Running 一直是 No.
查看 slave 容器:
docker logs -f mysql_slave_01
2024-04-04T10:25:15.627702Z 6 [Note] 'CHANGE MASTER TO FOR CHANNEL '' executed'. Previous state master_host='192.168.56.10', master_port= 3307, master_log_file='mysql-bin.000002', master_log_pos= 1396, master_bind=''. New state master_host='192.168.56.10', master_port= 3307, master_log_file='mysql-bin.000002', master_log_pos= 4, master_bind=''.
2024-04-04T10:25:18.576076Z 12 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2024-04-04T10:25:18.576871Z 13 [Warning] Slave SQL for channel '': If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
2024-04-04T10:25:18.576901Z 13 [Note] Slave SQL thread for channel '' initialized, starting replication in log 'mysql-bin.000002' at position 4, relay log './e9dfd7d63b98-relay-bin.000001' position: 4
2024-04-04T10:25:18.577192Z 12 [Note] Slave I/O thread for channel '': connected to master 'backup@192.168.56.10:3307',replication started in log 'mysql-bin.000002' at position 4
2024-04-04T10:25:18.588081Z 13 [ERROR] Slave SQL for channel '': Error 'Can't drop database 'demo_ds_0'; database doesn't exist' on query. Default database: 'demo_ds_0'. Query: 'DROP DATABASE `demo_ds_0`', Error_code: 1008
2024-04-04T10:25:18.588110Z 13 [Warning] Slave: Can't drop database 'demo_ds_0'; database doesn't exist Error_code: 1008
2024-04-04T10:25:18.588115Z 13 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000002' position 154.
执行 show slave status 在返回 Last_SQL_Error 列中也可以看到这个错误。
错误中显示 无法删除 demo_ds_0 这个数据库。
GPT解释:
这个错误信息表明从服务器上的SQL复制线程遇到了一个错误并因此中止了。在这种情况下,你需要解决主从服务器之间的数据不一致问题,并重新启动从服务器上的SQL复制线程。根据错误信息提供的信息,复制线程停止在了binlog文件 'mysql-bin.000002' 的位置 154。要解决这个问题,你可以按照以下步骤操作:检查主从服务器状态: 首先,确认主服务器和从服务器的状态是否正常。确保主服务器上的binlog文件 'mysql-bin.000002' 是存在的,并且从服务器上的复制进程没有其他的错误。解决从服务器的数据不一致问题: 如果发现主从服务器之间的数据不一致,需要解决这个问题。可能的原因包括主从服务器上的数据不同步或者主从服务器上执行的不一致的操作。重新启动从服务器上的SQL复制线程: 一旦确认了数据不一致的问题并解决了,你可以重新启动从服务器上的SQL复制线程。在从服务器上执行以下命令:
START SLAVE;
这将重新启动从服务器上的SQL复制线程,并开始从主服务器上同步数据。确保之前解决了数据不一致的问题,以免出现同样的错误。监控复制进程: 重新启动复制线程后,监控复制进程的状态,确保复制进程正常工作,并且主从服务器之间的数据保持一致。
如果在解决问题的过程中遇到了困难,可以查看MySQL的错误日志以获取更多的信息,或者在需要时考虑重启MySQL服务。确保在操作之前备份重要的数据,以防止数据丢失。
解决方法:
1、先停止 slave 复制进程:
stop slave
2、创建报错日志中的数据库(demo_ds_0)
3、再次开启 slave 复制进程:
start slave
4、查看 slave 状态
show slave status
可以看到 SLave_IO_Running 和 Slave_SQL_Running 都是 Yes了。
mysql_slave_01 日志正常了:
修改数据也能正常同步了。