时间:2021-07-01 10:21:17 帮助过:103人阅读
load data infile 结构图【来自网络】 在执行load data infile前,一定要根据实际情况设置好以下几个参数,否则很有可能因为参数设置不对,导致load失败。 slave_load_tmpdir含义:load data infile 存放临时文件的目录建议:这个目录所在磁盘空间应该足够大,防止因为目录空间不足,导致失败的情况。 max_allowed_packet含义:客户端/服务器之间通信的缓存区的最大大小。最大值:1G建议:因此对于含有大字段(BLOB,TEXT)的表操作,或主备之间含有大事务传递时,需要调大该值,否则会出现max_allowed_packet不够大的错误。 max_binlog_cache_size含义:用来限制用来缓存多语句事务的缓冲区总大小。如果某个事务大于该值,将会失败并回滚。最大值:4G(32位),16PB(64位)建议:对于load data infile,或mysqlimport导入大文件时,由于是作为一个事务,很可能导致max_binlog_cache_size不够,而出现错误导致回滚的情况。 max_binlog_size含义:事务以一个块写入二进制日志,当超过max_binlog_size时,文件进行切换。于max_binlog_size。最大值:1G建议:这个值设置不会导致执行报错的情况。但是,有一点要注意,单个事务的binlog不会跨binlog文件,因此大事务可能导致binlog文件超出max_binlog_size值。 本人在使用mysql进行load时,遇到过好几个问题,都是与以上几个参数有关。1.max_binlog_cache_size不够大,主库导入出错,或从库复制出错;解决方法:调大该值 2.max_allowed_packet不够大,导致从库io_thread拉binlog失败,主备复制中断。解决方法:1.调大该值2.重新建立复制关系(1).记录目前复制的位置(Relay_Master_Log_File, Exec_Master_Log_Pos);(2).reset slave [清理掉无效的relay-log,和master-info信息](3).执行change master to 命令(4).start slave
大部分情况下,执行第一步后,start slave应该就可以了;但我碰到过,重启复制后依然报错的情况,主要原因是max_allowed_packet不够大,relay-log只记录了事务的一部分,复制报错。那么,通过重建复制关系,则会重新开始拉事务的binlog,relay-log完整后,就不存在问题了。 bitsCN.com