2013-09-10 112 views
2

我有一個簡單的RDS一個莫名其妙的問題讀副本,在這裏,當我們做一個LOAD DATA LOCAL INFILE在主死了,就可靠地殺死讀取副本具有:MySQL的RDS的複製與LOAD DATA 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 

它複製到讀取副本成功。然後我安裝我的輸入文件:

 
# cat test.csv 
steve,24 
bob,34 
courtney,12 
ben,28 
aidan,15 

然後導入它(忽略警告,我沒有得到我的分隔符正確的,但數據進去):

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 

會很喜歡,如果有人可以幫助

感謝

史蒂夫

+0

您是否找到解決此問題的解決方案?我遇到了同樣的問題(儘管我們使用的是MySQL 5.5.33) – cjg

回答

2

這打破基本上是因爲讀副本是重播的二進制日誌的原因,當它到達您的LOAD DATA LOCAL INFILE語句,它沒有該文件。

RDS通過使用快照而不是通過重播bin日誌,從現有數據庫創建全新的只讀副本。

因此,解決方案是:在任何LOAD DATA LOCAL INFILE對主設備執行後,您將不得不刪除您的只讀副本並重新創建它。

0

根據AWS技術支持,這是通過LOAD DATA INFILE導入CSV時的已知問題。

對於我來說,發出以下命令導致讀取副本跳過錯誤並同步成功:

CALL mysql.rds_skip_repl_error; 

沒有必要刪除並重新創建讀取副本。

更新:當我將只讀副本升級到MySQL 5.6時,此問題自行解決。