企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
首先,检查slave节点主从同步状态 slave节点上执行命令: ~~~ mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: No ~~~ Slave_SQL_Running: No说明slave节点的SQL与master不同步。 > 解决mysql主从不同步有以下两种方法: > 方法一:忽略错误后,继续同步 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。在同步错误发生后主节点数据发生较大变化,不适合用此方法。 > 1. slave节点上,停止slave服务 `stop slave` > 2. slave节点上,跳过同步失败的SQL ~~~ # 跳过执行同步失败的SQL,后边的数字表示跳过SQL的数量,根据实际情况可变。 mysql> set global sql_slave_skip_counter =1; # 启动slave服务 mysql> start slave ~~~ > 3. slave节点上,查看此时的slave状态 ~~~ mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes ~~~ 如果此时同步仍然不成功,重新执行以上步骤,并且调整sql_slave_skip_counter的值。 > 方式二:重新做主从,完全同步 该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 > 1. master节点上,进行锁表,防止数据写入 `mysql> flush tables with read lock` > 2. master节点上,进行整个数据库备份 mysqldump -uroot -p -hlocalhost --all-databases > ./mysql.bak.sql > 3. master节点上,查看master 状态,记录此时master节点的binlog文件名和数据库状态在日志文件的位置 ~~~ mysql> show master status; +-------------------+----------+--------------+-------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+-------------------------------+ | mysqld-bin.000001 | 3260 | | mysql,test,information_schema | +-------------------+----------+--------------+-------------------------------+ 1 row in set (0.00 sec ~~~ > 4. master节点上,把上一步得到的备份文件mysql.bak.sql拷贝到slave节点上 `scp mysql.bak.sql root@192.168.128.101:/root/` > 5. slave节点上登录mysql执行 `mysql> stop slave` > 6. slave节点上登录mysql执行,导入主服务器上的备份文件 `mysql> source /root/mysql.bak.sql` > 7. slave节点上,设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项(binlog及位置) `change master to master_host = '10.30.48.154', master_user = 'XXXX', master_port=3306, master_password='XXX', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;` > 8. slave节点上,重新开启slave服务 `mysql> start slave` > 9. slave节点上,查看同步状态 ~~~ mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes ~~~ > 10. 同步成功后,数据库可以正常使用,所以将数据库的表解锁 `unlock tables`