今天一哥们发来求助,说主从不同步了,他发给主从的报错信息,发现从error日志报错(没有截取到show slave status\G的相关信息),但是通过查看日志信息报错如下:

wKioJlLCd2ayVzOnAABZB0BrYwM314.jpg

【MySQL运维】解决由于中继日志报错导致主从故障一例_第1张图片


上面的报错信息显示无法读取relay日志,有可能是中继日志损坏~~~根据经验,查看到他的中继文件名中带有localhost,就断定肯定是由于在mysql下在运行的情况下修改了主机名,导致relay日志文件损坏。


他们当前使用的数据库是:Percona-Server-5.5.24-rel26.0-256.Linux.x86_64

这时让我比较惊讶的~~~~呵呵~~~~(目前他公司没有DBA...)


解决办法:

首先,确认下从服务器是否可以停止(呵呵。。这种情况下也不得不停止服务了),让他停止mysqld服务:
注:在停止服务前先查看:show slave status\G,查看下从的同步状态

# /etc/init.d/mysqld stop


然后,找到中继日志的目录,把相关中继日志相关的文件全部删除


其次,启动mysqld服务,reset slave的主从连接信息,再重新连接到主:
# /etc/init.d/mysqld start

# mysql -uroot -p

mysql> reset slave all;    #这里要用reset salve all 完全清除之前的同步状态信息
mysql> change master to master_host='10.11.10.25',master_user='repl_user',master_password='XXXX',master_log_file='mysql-bin.000072',master_log_pos=455578221;
mysql> start slave;

mysql> show slave status\G


最后他按照我的给步骤来,最终于看到了两个大大的 Yes.....


根据这哥们公司运维对于出现这个故障的一点总结,对于新手来说很重要,老手都懂的~~~哈哈:
1. binlog 和 relaylog日志文件名要自己定义名字,并写入配置文件!
2. 操作之前得检查...(废话,但是很多人一来直接操作)
3. 运维不规范化(主机名都localhost),应用基础操作没定义好~~
4. ....