今天发现新插入的一条数据,读取的时候无此数据,因为我这里做了读写分离,所以怀疑是从库的问题。

不知什么原因导致Mysql的主从数据库没有同步。

先上Master库:

mysql>showprocesslist;查看下进程是否Sleep太多。发现很正常。


showmasterstatus;也正常。


在从数据库执行

showslavestatus\G可以看到Slave_IO_Running:No



问题分析:以上现象一方面原因是因为网络通信的问题也有可能是日志读取错误的问题。

1.日志出错问题提示:Last_IO_Error:Gotfatalerror1236frommasterwhenreadingdatafrombinarylog:'Couldnotfindfirstlogfilenameinbinarylogindexfile'2.重复插入数据错误提示:Last_Error:Error'Duplicateentry'11149'forkey'PRIMARY''onquery.Defaultdatabase:'test'.Query:'INSERTINTO


解决办法:忽略错误后,继续同步。该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况。

从机器停止slavemysql>stopslave;

到master机器登陆mysql:


记录master的bin的位置,例如:mysql>showmsterstatus;

mysql>showmasterstatus;+------------------+----------+--------------+------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+------------------+----------+--------------+------------------+|mysql-bin.004661|3175267|||+------------------+----------+--------------+------------------+1rowinset(0.00sec)


日志为mysql-bin.004661

刷新日志:mysql>flushlogs;

因为刷新日志file的位置会+1,即File变成为:mysql-bin.004662

马上到slave执行

mysql>CHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.004662',MASTER_LOG_POS=3175267;mysql>startslave;

启动之后查看状态恢复

mysql>showslavestatus\G;


解决办法2

stop slave;

#表示跳过一步错误,后面的数字可变

setglobalsql_slave_skip_counter=1;startslave;

之后再用mysql> show slave status\G 查看:

Slave_IO_Running:YesSlave_SQL_Running:Yes

ok,现在主从同步状态正常了。。。


解决办法3

重新做主从,完全同步,该方法适用于主从库数据相差较大,或者要求数据完全统一的情况.

1.先进入主库,进行锁表,防止数据写入

使用命令:

mysql>flushtableswithreadlock;

注意:该处是锁定为只读状态,语句不区分大小写

2.进行数据备份

#把数据备份到mysql.bak.sql文件

#mysqldump-uroot-p--all-databases--lock-tables=false-->/tmp/all.sql


这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者脚本,都比较方便,确保数据万无一失

3.查看master 状态

mysql>showmasterstatus;


4.把mysql备份文件传到从库机器,进行数据恢复

#使用scp命令

[root@server01tmp]#scpall.sqlroot@192.168.0.101:/tmp/

5.停止从库的状态

mysql>stopslave;

6.然后到从库执行mysql命令,导入数据备份

mysql>source/tmp/all.sql

7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项

changemastertomaster_host='192.168.0.100',master_user='rsync',master_port=3306,master_password='123456',master_log_file='mysql-bin.004661',master_log_pos=3175267;

8.重新开启从同步

mysql>startslave;

9.查看同步状态

mysql>showslavestatus\G查看:Slave_IO_Running:YesSlave_SQL_Running:Yes

好了,同步完成啦。


本文出自 “蜗牛的嘲讽” 博客,请务必保留此出处http://imork.blog.51cto.com/11642843/1884972

更多相关文章

  1. my sql 只展示 前10条数据的写法
  2. 我的MSSQL2000数据库自从我的系统从XPHOME升级到XPP版以后表都打
  3. SQL2000数据库脱机/只读/紧急模式 修复
  4. Oracle 00932. 00000 - “不一致的数据类型:预期%s获得%s”
  5. 十万火急!如何远程复制sql2000数据库
  6. 谁能给我讲讲用C#在windows mobile上开发sql server 2005 mobile
  7. 怎么判断连接SqlServer数据库成功
  8. mysql更新触发器先插入另一张表然后删除该条数据
  9. 像Farmville这样的在线游戏使用什么数据库?

随机推荐

  1. C#中Socket框架的使用教程
  2. C#中关于async与await的使用详解
  3. C#中关于表达式树的简单介绍
  4. Rest在asp.net MVC下使用的方法介绍
  5. C#异步之APM模式异步程序开发的示例分享
  6. C#中关于Minutes与TotalMinutes的区别
  7. ASP.NET MVC如何使用Bootstrap的实例分析
  8. C#中关于Cookies的读取实例详解
  9. ASP.NET MVC如何正确运用异步编程技术
  10. C#中关于静态与非静态方法的区别介绍