Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1130077
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: Mysql/postgreSQL

2016-11-10 11:19:16

空间不足先腾出空间,如果是binlog太大先去数据库执行命令关闭binglog再删除binglog文件

查看slave的状态

点击(此处)折叠或打开

  1. Master_Log_File: binlog.000339
  2. Read_Master_Log_Pos: 782368851
  3. Relay_Log_File: mysqld_game-relay-bin.001048
  4. Relay_Log_Pos: 846524285
  5. Relay_Master_Log_File: binlog.000338
  6. Slave_IO_Running: No
  7. Slave_SQL_Running: No
  8. Exec_Master_Log_Pos: 846524125
  9. Relay_Log_Space: 1856112071
几个pos值直接懵了Read_Master_Log_Pos居然比Exec_Master_Log_Pos还要小,写的比读的多?


我们重新回顾下mysql从库同步过程
通常网上列出的从库同步的过程为
io thread 写入Relay_Log
sql thread 从Relay_Log读取出来并写入数据库
但这里都遗漏了个步骤
因为磁盘性能远低于内存,所以同步的时候不可能等你写完Relay_Log_File再读取下一条同步信息
所以io thread在写入前会将同步过来的内容缓存到内存
----------------------------------------------------------
Master_Log_File: binlog.000339
Read_Master_Log_Pos: 782368851        这部分是就是io thread在内存中更新的
----------------------------------------------------------
Relay_Log_File: mysqld_game-relay-bin.001048
Relay_Log_Pos: 846524285
Relay_Master_Log_File: binlog.000338        这部分是io thread写完Relay_Log_File后更新的 
----------------------------------------------------------
Slave_IO_Running: No
Slave_SQL_Running: No
Exec_Master_Log_Pos: 846524125
Relay_Log_Space: 1856112071
----------------------------------------------------------
为什么Read_Master_Log_Pos会小于Relay_Log_Pos和Exec_Master_Log_Pos就明确了
内存中已经读到binlog.000339的782368851
硬盘中只写入到binlog.000338的846524125
内存中已经超出硬盘中一个binlog文件了
所以,恢复语句是
change master to Master_Log_File='binlog.000338', Master_Log_Pos=846524125;

来个极端的例子,不知道mysql是否会主动避免以下情况
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 1234 
Relay_Log_Pos: 1
Relay_Master_Log_File: binlog.000002
Exec_Master_Log_Pos: 99999999

这时候,Relay_Log_File的binlog文件更新了但sql线程没更新
恢复语句主动减少binglog的位置
change master to Master_Log_File='binlog.000001', Master_Log_Pos=99999999;

顺便,恢复不需要关心Relay_Log_File,这玩意会自己重置,我们通过旧Relay_Log_File的知道执行到哪里就可以了
阅读(1236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~