公司有两台mysql服务器,主从同步。一天,Nagios发送了一条警报消息,mysqla宕机了...赶紧联系机房。机房的反馈是硬件错误背后的信息被遗漏了。让机房记下错误信息,让他们帮忙重启看看能不能正常工作。结果,它实际上是有效的。快速导出所有数据。
问题又出现了,nagios又报警了,mysql_AB错误,查了从库。
显示从属状态\ G;预期的
Slave_IO_Running:是
Slave_SQL_Running:否
并且有一个1062错误,也提示
Last_SQL_Error:查询中关键字“PRIMARY”的错误“重复条目”1001-164761-0”。默认数据库:“错误”。查询:“插入misdata (uid,mid,pid,state,mtime)值(164761,1001,0,-1,1262623560)”
很明显,由于主库重启,从库数据不同步,主键冲突。查看错误日志,发现错误日志文件变得非常大,比之前大了近数倍。
Tail -f mysql_error.log第一次看到这条消息。
找到了这条消息
[错误]从属SQL:查询时键“PRIMARY”出现错误“重复条目”1007-443786-0”。默认数据库:“ufo”。查询:“插入错误数据(uid,mid,pid,sta
te,mtime)值(443786,1007,0,-1,1262598003)',错误代码:1062
100104 17:39:05[警告]从:关键字“主”的重复条目“1007-443786-0”错误代码:1062
100104 17:39:05[错误]运行查询时出错,从属SQL线程中止。修复该问题,并使用& quot从开始& quot。我们停在log 'ufolog.000058
8 '位置55793296
错误报告类似于上面的意思,
首先想到的是先手动同步,先从库中停止slave停止同步
进入主库锁表,
用读锁刷新表;
mysql & gt显示主机状态;
+ - + - + - + - +
|文件|位置| Binlog _ Do _ DB | Binlog _ Ignore _ DB |
+ - + - + - + - +
| ufo.000063 | 159164526 | | |
+ - + - + - + - +
集合中的1行(0.00秒)
进入从属库
mysql & gt将master改为master_host='192.168.1.141 ',master_user='slave ',
master_password='xxx ',
主端口=3306,
master_log_file='ufo.000063 ',
master _ log _ pos = 159164526
经过以上种种。
启动从机;
回到主图书馆
解锁表格;开启
回到图书馆查看
显示从属状态\ G;
发现很正常也是一种解脱。但是还没一分钟,我发现我又开始报错了,这是第一次报错。这是怎么回事?...
于是我想了一个跳过错误的方法,(但是我不太喜欢这个方法)立刻进入了奴隶库。
停止奴隶;
设置全局SQL _ slave _ skip _ counter = 1;(1表示跳过错误)
从机启动;
然后显示从状态\ G;考试
还是报错,但是原来的164761变成了165881。连续执行几次后,
只不过上面的值在变,误差还是在。
郁闷,看来只能先强制跳过1062错误,于是修改了从库的/etc/my.cnf文件。
在里面的[mysqld]下面加了一行。
Slave-skip-errors = 1062(忽略所有1062错误)
重启mysql /etc/init.d/mysqld从库中重启。
然后显示从状态\ G;发现是正常的,但是我知道这个时候的数据可能已经不同步了。
再次查看日志,令我惊讶的是,tail -f mysql_error.log有大量的
.......
100106 16:54:21[警告]以语句格式登录语句可能不安全。语句:delete from ` system _ message _ 1 ` where ` to _ uid `= 181464 ORDER BY ` id ` ASC LIMIT 1
.........
日志中有很多这样的警告,应该说明语句格式不安全。我用vim打开,发现了很多这样的警告。我问为什么错误日志变得这么大!!
语句格式应该是binlog的一种格式,进入从库看看。
显示全局变量,如“binlog _ format”;
果然,当前的格式是语句
我需要把格式改成混合格式。
从库中修改my.cfg
在[mysqld]下添加下面一行
binlog_format=mixed
然后重启mysql服务,发现错误日志中的警告已经停止。这次安静多了~ ~
我突然想起一件事。记得有朋友说RBR模式可以解决很多因为主键冲突导致主从不能同步的情况。想到这,我想去掉slave-skip-errors = 1062,再试一次。
于是我输入my.cnf,注释掉slave-skip-errors = 1062。
再次重启mysql服务。
进入从属库
显示从属状态\ G;
.........
Slave_IO_Running:是
Slave_SQL_Running:是
........
恢复了!!!观察了一段时间没有任何问题,我就放心了。
看来mysql主从复制错误的原因有很多,修复方法也不止一种。binlog格式就是其中之一。
希望遇到和这个一样问题的朋友看完这篇文章能得到一些启发和解决方法~ ~
关键词:MYSQL同步失败
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227412.html