今天发现mysql的主从数据库不同步。
首先转到主资料库:
mysqlshow processlist检查下一个进程是否睡眠过多。发现很正常。
显示主机状态;也正常。
mysql显示主状态;
- - - -
|文件|位置| Binlog _ Do _ DB | Binlog _ Ignore _ DB |
- - - -
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |
- - - -
集合中的1行(0.00秒)
在从机上再检查一遍。
mysql显示从属状态\G
Slave_IO_Running:是
Slave_SQL_Running:否
可见,Slave是不同步的。
这里有两种解决方案:
方法1:忽略错误,继续同步。
这种方法适用于主数据库和从数据库数据相似,或者数据要求不完全统一,数据要求不严格的情况。
解决:
停止奴隶;
#表示跳过一步错误,后面的数字是可变的。
设置全局SQL _ slave _ skip _ counter=1;
启动从机;
然后使用mysql show slave status\G查看:
Slave_IO_Running:是
Slave_SQL_Running:是
好了,现在主从同步状态正常。
方法二:重新主从,完全同步。
这种方法适用于主、从数据库数据差异较大,或者要求数据完全统一的情况。
求解步骤如下:
1.首先在主库中,锁定手表以防止数据被写入。
使用命令:
带读锁的mysql刷新表;
注意:该位置以只读方式锁定,并且该语句不区分大小写。
2.做好数据备份。
#将数据备份到mysql.bak.sql文件
[root @ server 01 MySQL]# MySQL dump-u root-p-hlocalhost MySQL . bak . SQL
这里注意:数据库备份必须定期进行。您可以使用shell脚本或python脚本,这两种脚本都很方便,可以确保数据万无一失。
3.检查主机的状态
mysql显示主状态;
- - - -
|文件|位置| Binlog _ Do _ DB | Binlog _ Ignore _ DB |
- - - -
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |
- - - -
集合中的1行(0.00秒)
4.将mysql备份文件传输到从机进行数据恢复
#使用scp命令
[root @ server 01 MySQL]# scp MySQL . bak . SQL root @ 192 . 168 . 128 . 101:/tmp/
5.停止从属状态。
mysql stop slave
6.然后从从库执行mysql命令导入数据备份。
mysql source /tmp/mysql.bak.sql
7.设置从库同步,注意这里的同步点,是主库的显示主状态信息中的| File| Position。
将master改为master_host='192.168.128.100 'master_user='rsync 'master_port=3306,master_password=' 'master _ log _ file=' mysqld-bin . 000001 'master _ log _ pos=3260
8.再次打开从同步。
mysql启动从机;
9.检查同步状态
MySQL从属状态\ g视图:
Slave_IO_Running:是
Slave_SQL_Running:是
好了,同步完成了。