mysql 5.7 主从同步问题
1、slave同步状态中出现Slave_SQL_Running: No ,即slave不同步!
解决办法:
第一种方法:忽略错误后,继续同步。
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况(下面均为在slave机器上的操作)mysql> stop slave;
mysql> set global sql_slave_skip_counter =1; //表示跳过一步错误,后面的数字可变;或者在my.cnf里添加slave-skip-errors = all(上面已在配置中添加)
mysql> start slave;
mysql> show slave status\G //查看:
第二种方法:重新做主从,完全同步
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
1--master主库上操作
mysql> flush tables with read lock; //进行锁表,防止数据写入。注意该处是锁定为只读状态,语句不区分大小写
mysqldump --lock-all-tables --all-databases --flush-logs --master-data=2 > /root/allsql.sql //主库完全备份(如果是指定库同步,就备份指定库),注意数据库备份一定要定期进行,确保数据万无一失
mysql> show master status; //查看master状态,注意log file和pos节点,slave同步会用到
# scp mysql.bak.sql root@192.168.1.102:/tmp/ //把备份文件传到slave从库机器,进行数据恢复
2--slave从库操作
mysql> stop slave; mysql> source /tmp/mysql.bak.sql mysql> change master to master_host = '192.168.1.101', master_user = 'slave', master_port=3306.......; mysql> start slave; mysql> show slave status\G ....... Slave_IO_Running: Yes Slave_SQL_Running: Yes
1--master主库上操作
解锁数据库
unlock tables
此种方法中最为关键主要有两步:
①主服务器上锁表做完全备份,并滚动日志;
②从服务器上进行半道恢复.
2、slave同步状态中出现Slave_IO_Running: NO
原因:如果数据库为复制虚拟机过去的,那么auto.cnf 中记录的数据库唯一UUID 会冲突导致,从数据库的sql_io 进程无法启动。
解决:重新安装数据库