MySQL RDS 复制因 LOAD DATA INFILE 而终止

标签 mysql sql amazon-web-services replication rds

我在使用简单的 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/

相关文章:

php - 更新表单中的数据库字段

php - 如何组合两个具有不同 ORDER BY 子句的 SQL 查询

sql - 关于自引用表的删除级联

php - 如何在拼字游戏应用程序中搜索 'blank tile'? (PHP)

sql - 对 mysql 查询使用反引号/反引号

sql - 如何将现有行与 SQLite 中的新数据合并?

amazon-web-services - 通过AWS ECS在一个EC2实例中的多个Docker容器

amazon-web-services - 如何保护私有(private)子网后面的 Erlang 集群

node.js - 在 AWS Lambda 中创建 RESTful 服务

php - 在 Mysql 存储过程中,我试图插入一个不在任何表中的额外参数