Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2224371
  • 博文数量: 287
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2130
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-31 14:30
个人简介

自己慢慢积累。

文章分类

全部博文(287)

分类: Mysql/postgreSQL

2014-06-12 13:29:29

情况一:
在备机的mysql上执行:show slave status \G
发现Slave_SQL_Running: No
      Last_Errno: 1146
      Last_Error: Error 'Table 'opaq_151.vehicle_new' doesn't exist' on query. Default database: 'opaq_151'. Query: 'delete from vehicle_new where ID_>1700001960';
分析SQL语句发现,slave机上没有vehicle_new 表,所以报错。
这个时候想恢复的话,只要
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
就可以了

set GLOBAL SQL_SLAVE_SKIP_COUNTER=1的意思是:
 跳过某个无法执行的命令

   1set global sql_slave_skip_counter=N中的N是指跳过Nevent

   2、最好记的是N被设置为1时,效果跳过下一个事务

   3、跳过第Nevent后,位置若刚好落在一个事务内部,则会跳过这整个事务

   4、一个insert/update/delete不一定只对应一个event,由引擎和日志格式决定


情况二: 

早晨机房意外断电,导致了发现mysql从服务器同步异常。使用以前碰到的Slave_SQL_Running为No的解决办法无效,仍然无法同步。 

查看一下状态show slave status 
Master_Log_File: mysqlmaster.000079 
Read_Master_Log_Pos: 183913228 
Relay_Log_File: hx-relay-bin.002934 
Relay_Log_Pos: 183913371 
Relay_Master_Log_File: mysqlmaster.000079 
Slave_IO_Running: No 
Slave_SQL_Running: Yes 


主服务器show master status\G 
File: mysqlmaster.000080 
Position: 13818288 
Binlog_Do_DB: 
Binlog_Ignore_DB: mysql,test 


mysql错误日志: 
100512 9:13:17 [Note] Slave SQL thread initialized, starting replication in log 'mysqlmaster.000079' at position 183913228, relay log './hx-relay-bin.002934' position: 183913371 
100512 9:13:17 [Note] Slave I/O thread: connected to master 'replicuser@192.168.1.21:3306', replication started in log 'mysqlmaster.000079' at position 183913228 
100512 9:13:17 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236) 
100512 9:13:17 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log 
100512 9:13:17 [Note] Slave I/O thread exiting, read up to log 'mysqlmaster.000079', position 183913228 


这次是Slave_IO_Running为No,从日志上来看,服务器读mysqlmaster.000079这个Log的183913228这个位置时发生错误,这个位置不存在,于是无法同步。 


查看一下这个Log的最后几行: 
/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
# at 4 
#100511 9:35:15 server id 1 end_log_pos 98 Start: binlog v 4, server v 5.0.27-standard-log created 100511 9:35:15 
# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it. 


尝试从损坏之前的位置开始 
SLAVE STOP; 
CHANGE MASTER TO MASTER_LOG_FILE='mysqlcncnmaster.000079', MASTER_LOG_POS=183913220; 
SLAVE START; 
无效! 
只好从新的日志开始 
SLAVE STOP; 
CHANGE MASTER TO MASTER_LOG_FILE='mysqlcncnmaster.000080', MASTER_LOG_POS=0; 
SLAVE START; 
此时Slave_IO_Running恢复为Yes,同步进行了!观察了会儿,没有任何出错迹象,问题解决。 


另外,出现Slave_IO_Running:NO还有一个原因是slave上没有权限读master上的数据。 


详细出处参考:
阅读(767) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~