标签:mysql
收到Nagios通知,公司的MySQL从库slave出现同步问题。
由于之前试过停电时,也出现类似的问题,怀疑问题是源自主库master服务器;
登录主库后,下意识没有第一时间检查mysql,而是查看磁盘空间,
发现mount命令居然不显示我的数据盘了,奇怪的是还是可以访问数据目录
尝试mount -a提示磁盘busy,
由于该服务器提供的生产服务并不重要,于是尝试reboot
我猜测重启会有问题,于是登录到esxi上去观察console(该服务器是虚拟机),
果然出现问题,在磁盘检测时出现提示磁盘不连续,
输入密码,然后fsck -y 检查对应的提示的磁盘
总共有3个盘出现了不连续的情况
修复后,正常重启,盘也出来了
却发现mysqld不能启动了
查看错误日志文件,提示磁盘已满,无法写入pid文件
检查/目录,果然剩余空间0,删掉一些无用的文件,再尝试启动mysqld
又报错,但错误信息变化了
160405 9:24:40 [ERROR] /usr/libexec/mysqld: Table ‘./Syslog/SystemEvents‘ is marked as crashed and should be repaired
很可能由于磁盘不连续的问题导致的。
于是myisamchk -r /data/mysql/Syslog/SystemEvents.MYI
修复了一个index,尝试启动成功。
至此主库恢复正常。
查看从库的提示,发生了变化
mysql> show slave status\G
Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master‘s binary log is corrupted (you can check this by running ‘mysqlbinlog‘ on the binary log), the slave‘s relay log is corrupted (you can check this by running ‘mysqlbinlog‘ on the relay log), a network problem, or a bug in the master‘s or slave‘s MySQL code. If you want to check the master‘s binary log or slave‘s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS‘ on this slave.
大意是你的relay log文件无法解析了,通常是主库的binlog损坏导致的
我选择的方案是重做从库数据
于是把主库的整库备份并导入到从库中去
主库:
mysqldump -uroot -pPASSWORD -B Syslog --single-transaction --events --opt --master-data=1|gzip >/data/Syslog-full-`date +%F`.sql.gz
从库:
mysql> slave stop;
mysql -u root -pPASSWORD <Syslog-full-2016-04-05.sql
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
至此从库恢复正常。
标签:mysql
原文地址:http://coosh.blog.51cto.com/6334375/1760367