首先了解下面两个状态的含义:
Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。
如何检查主从配置是否成功
执行start slave;
命令启动从服务器后,使用show slave status;
命令检查状态,需要保证结果显示中的Slave_IO_Running
与 Slave_SQL_Running
状态都要为Yes
, 否则主从的配置就是有问题的。
Slave_IO_Running:NO
出现这个错误的原因一般是从库没有启动, 解决办法就是启动从库即可
1 |
mysql> start slave; |
还有可能是从库连接主库所需主机名、端口、用户、密码等配置问题出错造成的,比较容易解决。如:
1 2 3 4 5 6 7 8 9 |
mysql> stop slave; mysql> change master to master_host='master_ip', master_user='user', master_password='pwd', master_port=3306; mysql> start slave; |
Slave_SQL_Running: No
出现这个错误的原因一般是主从服务器的数据不一致造成的,比如:
- 在主从服务器没有一起启动的情况下执行了操作
- Slave机器重起后事务回滚
- 使用从库做了查询之外的更新操作
解决办法
查看主库状态show master status;
记录下File
,Position
字段,假设为mysql-bin.000004
和98
;
在从库执行:
1 2 3 4 5 6 7 8 9 10 11 |
mysql>stop slave; mysql> change master to master_host='master_ip', master_user='user', master_password='pwd', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos=98; mysql> start slave; |
如果执行某个更新语句后从库没有同步数据,并且从库执行
show slave status;
发现Slave_IO_Running:NO
并且存在Error
比如主键冲突导致无法从主库同步数据,这通常是从库和主库数据不一致导致的问题,如果想要从库跳过本次更新并可以继续保持此后能和主库同步数据,可以简单执行下面的语句跳过这1步更新操作。(当然后果就是从库没有执行和主库一样的更新操作)
123 mysql>slave stop;mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;mysql>slave start;
Views: 84