MySQL 主从复制是实现 MySQL 集群高可用性的常用方式之一,其中主库将更新同步到从库,保持数据的一致性.但是,在实际应用中,由于网络、服务器故障或配置错误等原因,可能会导致主从数据不一致的问题,Slave_SQL_Running: No 是其中比较常见的错误提示.
下面是解决该问题的具体攻略:
在主从数据库服务器上查看错误日志,快速定位问题.主从数据库可以分别采用以下命令来查看错误日志:
主服务器查看错误日志:
$ tail -f /var/log/mysql/error.log
从服务器查看错误日志:
$ tail -f /var/log/mysql/error.log
一般来说,错误日志包含了非常多的有用信息,可以根据日志中提示的具体错误,找到解决方法.
主从数据库服务器之间的配置需要完全一致,包括 MySQL 版本、字符集、数据库名等.如果配置不一致,就有可能导致主从数据不一致的问题.
可以使用以下命令来核对主从配置:
SHOW VARIABLES LIKE '%version%';
SHOW VARIABLES LIKE 'character_set_%';
如果务必消除配置差异.如果配置差异很小,可以使用 CHANGE MASTER TO 命令重新设置从服务器的主服务器信息,确保两者的配置一致.
下面是一个"主从配置不一致"的实例:
如果主从数据库服务器的配置都是一致的,而 Slave_SQL_Running 仍然提示 No,那么可以尝试重启 MySQL 服务来解决这个问题.
首先可以使用以下命令来查看进程是否运行:
$ ps -ef |grep mysql
如果进程没有运行,就可以执行以下命令来启动 MySQL:
$ systemctl start mysql
如果以上方法都无法解决问题,可以尝试手动调整 Slave_IO_Thread 和 Slave_SQL_Thread 的状态.
Slave_IO_Thread 用于从主服务器读取 binlog,Slave_SQL_Thread 用于重放 binlog.
如果 Slave_IO_Thread 没有启动,可以使用以下命令来启动:
start slave io_thread;
如果 Slave_SQL_Thread 没有启动,可以使用以下命令来启动:
start slave sql_thread;
如果这两个线程都启动失败,可以使用以下命令来重新启动从服务器:
stop slave;
start slave;
假设在从服务器上执行 SHOW SLAVE STATUS\G 命令时,发现 Slave_IO_Running: No,Slave_SQL_Running: No 的错误提示.可以尝试执行以下命令来启动两个线程:
start slave io_thread;
start slave sql_thread;
如果依旧提示 No,可以尝试使用以下命令重新启动从服务器:
stop slave;
start slave;