12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-25 09:55:25
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
将处理主从故障的过程记录在此:故障1,Error_code: 1197 (max_binlog_cache_size)数据库版本:5.7.9
报错信息:[ERROR]SlaveSQLforchannel'':Worker1failedexecutingtransaction'be
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
将处理主从故障的过程记录在此:
故障1,Error_code: 1197 (max_binlog_cache_size)
数据库版本:5.7.9
报错信息:
[ERROR]SlaveSQLforchannel'':Worker1failedexecutingtransaction'bea4612c-4828-11e7-90b3-a0423f31cad6:716212'atmasterlogmysql.135371,end_log_pos103016490;CouldnotexecuteWrite_rowseventontable******;Multi-statementtransactionrequiredmorethan'max_binlog_cache_size'bytesofstorage;increasethismysqldvariableandtryagain,Error_code:1197;Writingonerowtotherow-basedbinarylogfailed,Error_code:1534;handlererrorHA_ERR_RBR_LOGGING_FAILED;theevent'smasterlogFIRST,end_log_pos103016490,Error_code:1197
处理过程:
根据报错信息,知道是max_binlog_cache_size小了,
解决办法:临时增加该值后restart slave即可以继续复制线程。
stopslave;setglobalmax_binlog_cache_size=201326592;startslave;
关于max_binlog_cache_size请看这里:
如果一个事务需要多于设置值的内存,就会报上面的错。最小4096字节,最大支持4GB,因为binlog位置点最大4GB,支持动态修改。
解决了问题,继续查找发生问题的原因,生产环境中的该参数设置为64M,当一个事务影响的数据量超过该值时,即会报错。
查看主库中日志的具体内容:
数据库日志格式为mixed,文件中记录的是row格式,使用下面命令查看
/bin/mysqlbinlog-vv--base64-output=decode-rowsmysql.135371|more
精简后的内容:#13:43:59serverid*******end_log_pos10538CRC32Write_rows:tableid2776#at10538#13:43:59serverid*******end_log_pos18175CRC32Write_rows:tableid2776#at18175#13:43:59serverid*******end_log_pos25789CRC32Write_rows:tableid2776#at25789#13:43:59serverid*******end_log_pos33424CRC32Write_rows:tableid2776#at33424#13:43:59serverid*******end_log_pos40961CRC32Write_rows:tableid2776#at40961#13:43:59serverid*******end_log_pos48553CRC32Write_rows:tableid2776#at48553#13:43:59serverid*******end_log_pos56126CRC32Write_rows:tableid2776#at56126#13:43:59serverid*******end_log_pos63671CRC32Write_rows:tableid2776#at63671#13:43:59serverid*******end_log_pos71205CRC32Write_rows:tableid2776#at71205#13:43:59serverid*******end_log_pos78753CRC32Write_rows:tableid2776#at78753#13:43:59serverid*******end_log_pos86322CRC32Write_rows:tableid2776#at86322#13:43:59serverid*******end_log_pos93925CRC32Write_rows:tableid2776
不出意外,执行的sql为
insertintotable1select*fromtable2wheretime>'2016-10-01'
形式的多语句事务,查看binlog文件的大小,最大的超过了200M(max_binlog_size设置为50M)。
因此是大事务造成的,大事务还容易造成主从延时的问题,推荐将大事务拆分为小事务执行
107M14:07mysql.135380101M14:08mysql.135381112M14:08mysql.135382110M14:09mysql.135383124M14:09mysql.13538431M14:10mysql.135385226M14:10mysql.135386120M14:12mysql.135387111M14:13mysql.135388102M14:14mysql.135389...126M14:16mysql.135394...118M14:23mysql.135404...110M14:28mysql.13540963M14:29mysql.135410104M14:29mysql.13541128114:30mysql.135412115M14:30mysql.135413112M14:30mysql.135414127M14:30mysql.135415119M14:31mysql.13541685M14:32mysql.13541760M14:32mysql.135418151M14:33mysql.135419
故障2,Errno: 1872,Error: Slave failed to initialize relay log info structure from the repository
数据库在 'in place' 升级之后报出该错误,重启主从后问题解决
查看问题有人说原因是从库信息变化导致的,解决方法可以reset slave,重新change master。
欢迎批评指正
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19