Alien的博客

MySQL的AB复制出错及恢复过程

前几天收到报警,mysql 用来做AB复制的主服务器因为磁盘空间满了导致mysql不能正常工作了。
清理了磁盘空间后,重启了mysql服务,这时候发现AB复制也不能正常工作了。
在从服务器上使用show slave status \G命令查看后发现报下面的错误


Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event 'master_bin.000005' at 992142046, the last event read from './master_bin.000005' at 1016893172, the last byte read from './master_bin.000005' at 1016893463.'

试了各种办法无效,最终使用了下面的办法恢复了AB复制


Stop slave;
CHANGE MASTER TO master_log_file = 'mysql-bin. 000005', master_log_pos = 0;
Start slave;

然后用show slave status \G查看Slave_IO_Running和Slave_SQL_Running都变成YES了
可是这次的宕机会不会导致两台服务器的数据库数据不一致呢,然后决定使用mysql官方的工具mysqldbcompare来对比一下数据库是否一致
首先在一台服务器上下载安装mysql-utilities


wget http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.5.3.zip
unzip mysql-utilities-1.5.3.zip
cd mysql-utilities-1.5.3
python ./setup.py build
sudo python ./setup.py install

然后对比数据库的数据


mysqldbcompare --server1=root:password@1.1.1.1 --server2=root:password@2.2.2.2 mysqldb:mysqldb --run-all-tests --show-reverse --difftype=sql

发现这次宕机只是影响了一小部分数据,就直接在数据库上手动修改了