最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Mysql双机异常及解决方案_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:37:40
文档

Mysql双机异常及解决方案_MySQL

Mysql双机异常及解决方案_MySQL:bitsCN.com Mysql双机异常及解决方案 今天Mysql双机遇到两个问题,从网上整理下解决方案,记录下来: 通过以下命令行可查看异常信息 Sql代码 mysql> show slave status/G; 具体细节可查看Mysql日志。 问题一: 命令行报错如下 Slave_IO_Run
推荐度:
导读Mysql双机异常及解决方案_MySQL:bitsCN.com Mysql双机异常及解决方案 今天Mysql双机遇到两个问题,从网上整理下解决方案,记录下来: 通过以下命令行可查看异常信息 Sql代码 mysql> show slave status/G; 具体细节可查看Mysql日志。 问题一: 命令行报错如下 Slave_IO_Run


bitsCN.com

Mysql双机异常及解决方案

今天Mysql双机遇到两个问题,从网上整理下解决方案,记录下来:

通过以下命令行可查看异常信息

Sql代码

mysql> show slave status/G;

具体细节可查看Mysql日志。

问题一:

命令行报错如下

Slave_IO_Running: No

Slave_SQL_Running: Yes

Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.000073' at 662720845, the last event read from './mysql-bin.000073' at 4, the last byte read from './mysql-bin.000073' at 4.'

从字面理解就是,从服务器请求了主服务器的一个错误的复制位置。比如主服务器上的BLIN_LOG里没有这个POSITION.

解决办法:

首先查看主服务器的日志文件中是否有此行,使用命令

Java代码

mysqlbinlog /LogPath/mysql-bin.000073 >> log

在log文件里查找662720845对应的行或者和这个数字接近的行(先从小的试试,无法恢复再从大的试),

log文件内容类似:

Java代码

# at 662720839

#130614 8:36:01 server id 1 end_log_pos 662720860 Query thread_id=207498 exec_time=0 error_code=0

SET TIMESTAMP=1371170161/*!*/;

COMMIT

/*!*/;

DELIMITER ;

然后重新设置复制位置,如下

Java代码

mysql>stop slave;

mysql> change master to

-> master_log_file='mysql-bin.000073',

-> master_log_pos=662720860;

mysql> start slave;

如果找不到,可用如下命令查看mysql-bin.000073的最大位置

Java代码

ls -la mysql-bin.000073

如果大小远小于662720845,则可以跳过这个日志,从下个日志开始复制。

Java代码

mysql>stop slave;

mysql> change master to

-> master_log_file='mysql-bin.000074',

-> master_log_pos=4;

mysql> start slave;

问题二:

错误代码如下

mysql slave Error_code: 1062 1054

如果日志中出现了这样代码,可能是错误的select,或update操作,master是跳过这些操作,但是被记录到了二进制日志中,slave会依据二进制中的语句做相同的动作,就会报错,知道原理了要做的操作就很简单了。

解决方法

Java代码

stop slave;

set gloable sql_slave_skip_counter=n; //n为你想跳过错误语句的个数

start slave;

如果你不想再遇到这种错误,可以写到slave配置文件中格式如下:

slave_skip_errors = 1062

slave_skip_errors = all //跳过所有类型的错误码

问题三:

错误代码如下

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_SQL_Errno: 1594

Last_SQL_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.

以上异常可能由内存溢出或者硬盘空间不足导致。

解决办法

从最近一次复制结束的位置复制即可

Java代码

show slave status /G;

Master_Log_File: mysql_master-bin.0001

Read_Master_Log_Pos: 980240603

Relay_Log_File: slave2-relay-bin.000001

Relay_Log_Pos: 251111

Relay_Master_Log_File: mysql_master-bin.0001

Exec_Master_Log_Pos: 980240603

Java代码

stop slave;

CHANGE MASTER TO MASTER_LOG_FILE = 'mysql_master-bin.0001',MASTER_LOG_POS =980240603;

start slave ;

备注:

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责自己的slave mysql进程,一个负责与主机的io通信。

如果是slave_io_running no了,可能有三种情况,一个是网络有问题,第二个是有可能my.cnf有问题,最后一个是授权的问题,replication slave和file权限是必须的。

一旦io为no了先看err日志,看看报什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

如果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。 这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;(参考问题二解决方法),再开一下slave就可以了

bitsCN.com

文档

Mysql双机异常及解决方案_MySQL

Mysql双机异常及解决方案_MySQL:bitsCN.com Mysql双机异常及解决方案 今天Mysql双机遇到两个问题,从网上整理下解决方案,记录下来: 通过以下命令行可查看异常信息 Sql代码 mysql> show slave status/G; 具体细节可查看Mysql日志。 问题一: 命令行报错如下 Slave_IO_Run
推荐度:
标签: 信息 记录 网上
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top