我在使用简单的 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`)'
为了复制这种情况,我有一个简单的主控并创建一个名为 test 的表:
CREATE TABLE `test` ( `name` varchar(25) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
It was replicated to the read replica successfully. Then i setup my input file :
# cat test.csv steve,24 bob,34 courtney,12 ben,28 aidan,15
Then imported it with (Ignore the warnings, i didnt get my separator right but data went in) :
mysqlimport --local testdb test.csv
testdb.test: Records: 5 Deleted: 0 Skipped: 0 Warnings: 5
这就是杀死只读副本所需的全部操作。我以您创建 RDS 实例时创建的用户身份连接到 mysql,因此它应该拥有所有权限。但无论如何,只读副本都会有自己的复制用户。我尝试过将读取复制设置为非只读,但这似乎不起作用。
mysql> status; -------------- mysql Ver 14.14 Distrib 5.5.27, for FreeBSD9.0 (amd64) using 5.2 Connection id: 13481 Current database: testdb Current user: [email protected] SSL: Not in use Current pager: more Using outfile: '' Using delimiter: ; Server version: 5.6.13-log MySQL Community Server (GPL) Protocol version: 10 Connection: saturn.xxxxxxxxxxx.eu-west-1.rds.amazonaws.com via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 TCP port: 3306 Uptime: 8 hours 52 min 23 sec Threads: 3 Questions: 775195 Slow queries: 0 Opens: 51017 Flush tables: 1 Open tables: 2000 Queries per second avg: 24.268
希望有人能帮忙
谢谢
史蒂夫
最佳答案
此中断的原因本质上是因为只读副本正在重播二进制日志,并且当它到达 LOAD DATA LOCAL INFILE 语句时,它没有该文件。
RDS 使用快照从现有数据库创建全新的只读副本,而不是通过重播 bin 日志。
因此解决方案是:在对主服务器执行任何 LOAD DATA LOCAL INFILE 后,您必须删除只读副本并重新创建它。
关于MySQL RDS 复制因 LOAD DATA INFILE 而终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730245/