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 失败
AWS DMS:复制任务已停止。停止原因 FULL_LOAD_ONLY_FINISHED