MySQL RDS 复制因 LOAD DATA INFILE 而死

Posted

技术标签:

【中文标题】MySQL RDS 复制因 LOAD DATA INFILE 而死【英文标题】:MySQL RDS replication dies with a LOAD DATA INFILE 【发布时间】:2013-09-14 19:57:37 【问题描述】:

我在使用简单的 RDS 只读副本时遇到了一个令人费解的问题,当我们在主服务器上执行 LOAD DATA LOCAL INFILE 时,它会可靠地杀死只读副本:

Error 'Access denied for user ''@'' (using password: NO)' on query. Default database: 'testdb'. Query: 'LOAD DATA INFILE '/rdsdbdata/tmp/SQL_LOAD-5ce65f0d-1a6a-11e3-af1b-12313c014074-352397698-1549.data' IGNORE INTO  TABLE `test` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`name`, `age`)'

为了复制这种情况,我有一个简单的 master 并创建了一个名为 test 的表:

创建表`测试`( `name` varchar(25) NOT NULL, `age` int(11) 默认为空, 主键(`名称`) ) 引擎=InnoDB 默认字符集=latin1

已成功复制到只读副本。然后我设置我的输入文件:

# 猫测试.csv 史蒂夫,24 鲍勃,34 考特尼,12 本,28 艾丹,15

然后用(忽略警告,我的分隔符没有正确但数据进入)导入它:

mysqlimport --local testdb test.csv
testdb.test: Records: 5  Deleted: 0  Skipped: 0  Warnings: 5

这就是杀死只读副本所需的全部内容。我以创建 RDS 实例时创建的用户身份连接到 mysql,因此它应该具有所有权限。但无论如何,只读副本都有自己的复制用户。我尝试将只读复制设置为非只读,但这似乎不起作用。

mysql>状态; -------------- mysql Ver 14.14 Distrib 5.5.27,适用于 FreeBSD9.0 (amd64) 使用 5.2 连接编号:13481 当前数据库:testdb 当前用户:testuser@ip-10-50-99-59.eu-west-1.compute.internal SSL:未使用 当前寻呼机:更多 使用输出文件:'' 使用分隔符:; 服务器版本:5.6.13-log MySQL Community Server (GPL) 协议版本:10 连接:saturn.xxxxxxxxxxx.eu-west-1.rds.amazonaws.com 通过 TCP/IP 服务器字符集:latin1 Db 字符集:latin1 客户端字符集:latin1 康涅狄格字符集:latin1 TCP端口:3306 正常运行时间:8 小时 52 分 23 秒 线程:3 问题:775195 慢查询:0 打开:51017 刷新表:1 打开表:2000 每秒查询平均:24.268

如果有人可以帮忙,我会很高兴

谢谢

史蒂夫

【问题讨论】:

您找到解决此问题的方法了吗?我刚刚遇到了同样的问题(尽管我们使用的是 MySQL 5.5.33) 【参考方案1】:

这种中断的原因本质上是因为只读副本正在重放二进制日志,并且当它到达您的 LOAD DATA LOCAL INFILE 语句时,它没有该文件。

RDS 通过使用快照从现有数据库创建全新的只读副本,而不是通过重放 bin 日志。

因此解决方案是:在对 master 执行任何 LOAD DATA LOCAL INFILE 之后,您必须删除您的只读副本并重新创建它。

【讨论】:

【参考方案2】:

根据 AWS 技术支持,这是通过 LOAD DATA INFILE 导入 CSV 时的一个已知问题。

对我来说,发出以下命令会导致只读副本跳过错误并成功同步:

CALL mysql.rds_skip_repl_error;

无需删除并重新创建只读副本。

更新:当我将只读副本升级到 MySQL 5.6 后,此问题自行解决。

【讨论】:

以上是关于MySQL RDS 复制因 LOAD DATA INFILE 而死的主要内容,如果未能解决你的问题,请参考以下文章

与 RDS MySQL/Aurora 无服务器集群的 SSL 连接因 Node.js 失败

RDS for MySQL 物理备份文件恢复到自建数据库

AWS DMS:复制任务已停止。停止原因 FULL_LOAD_ONLY_FINISHED

将Mysql数据从一个账户的RDS自动复制到另一个账户的RDS

Amazon RDS 只读副本——跳过复制错误

阿里云的RDS mysql使用Data Export的sql文件进行Data import出现的问题