mysql主从 load data_Mysql中load data infile主从复制注意点

本文探讨了在MySQL主从复制环境中使用LOAD DATA INFILE命令时的性能和一致性问题。测试结果显示,从库上的SQL线程会在临时目录中提取并加载数据文件,可能导致主从延迟。当处理大量数据时,主从延迟和一致性风险增加。解决方案包括拆分大文件或手动执行LOAD DATA命令并禁用日志和外键检查,以提高效率和保持主从一致性。
摘要由CSDN通过智能技术生成

在mysql官方文档的描述里,load data infile加载数据要比普通的insert快20倍,可以说是插入数据最快的方式了,所以在很多场合都会用它来提升入库速度。

那它在主从架构中的从库上会怎么执行呢?(主从复制官网)刚开始我假定是在master上load成功后会以batch insert方式dump进binlog,从库IO线程请求binlog,最后SQL线程以batch insert执行一遍,同样能做到主从同步。但即使是batch insert方式,按照官方文档的解释,也是会比load data infile慢的。在master端load压力足够大的情况下,主从延迟可能会无法忍受。带着这样的疑问,我准备做个测试

准备一个数据的文件(2M)为了防止load过快而无法在从库上观察到,设置循环load 30次,然后在从库端show processlist观察执行情况,结果如下截图:

0818b9ca8b590ca3270a3433284dd417.png

通过测试可以发现

load data infile在master端执行成功后会把数据文件写入到binlog里(可用mysqlbinlog分析),在从库IO线程获取binlog写到本地relay-log,SQL线程会将数据文件extract到临时目录(默认/tmp,见tmp.io.dir变量值),再执行load命令将数据文件加载进从库(在从库show processlist可以观察到此现象),最终把数据临时目录的文件删除掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值