主从库同步失效的原因各种各样,一般都是在从库上不小心执行了写操作,也有可能从库服务器意外重启等等。
进入从库执行show slave status\G看到下面两行:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
任意一个不为yes就说明同步出了问题。
基本上解决的办法无外乎这么几种:
1. 如果是事务回滚造成的那么可以尝试:
mysql > slave stop; mysql > set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql > slave start;
2. 如果上面的方法没有作用,那么基本上下面的方法一定奏效:
①主库操作:
flush tables with read lock; //主库上锁表 show master status; //记录 master log file及file position
比如:
+--------------------------+----------------+-------------------+------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------------+----------------+--------------------+-----------------------+ | xxxx-log.000001 | 156 | xxxx | | +--------------------------+----------------+--------------------+-----------------------+
tar -cvf database.tar ./data //备份数据文件 unlock tables; //解锁主库表
②从库操作
将主库数据库文件copy到从库中 启动从库 stop slave; reset slave; change master to master_host='主库IP',master_user='用户名',master_password='密码',master_port=端口,master_log_file='xxxx-log.000001',master_log_pos=156; start slave;
然后登陆从库
show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes
上面2项都为’Yes’,表示slave正常