2

マスターで 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 `テスト` (
`name` varchar(25) NOT NULL,
  `age` int(11) DEFAULT NULL,
  主キー (`名前`)
) ENGINE=InnoDB DEFAULT CHARSET=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、5.2 を使用する FreeBSD9.0 (amd64) 用

接続 ID: 13481
現在のデータベース: testdb
現在のユーザー: testuser@ip-10-50-99-59.eu-west-1.compute.internal
SSL: 使用されていません
現在のポケットベル: もっと
出力ファイルの使用: ''
区切り文字の使用: ;
サーバーのバージョン: 5.6.13-log MySQL Community Server (GPL)
プロトコル バージョン: 10
接続: TCP/IP 経由の saturn.xxxxxxxxxxx.eu-west-1.rds.amazonaws.com
サーバー文字セット: latin1
データベース文字セット: latin1
クライアント文字セット: latin1
接続文字セット: latin1
TCP ポート: 3306
稼働時間: 8 時間 52 分 23 秒

スレッド: 3 質問: 775195 遅いクエリ: 0 開く: 51017 テーブルをフラッシュ: 1 テーブルを開く: 2000 1 秒あたりの平均クエリ数: 24.268

誰かが助けてくれれば幸いです

ありがとう

スティーブ

4

2 に答える 2

2

これが壊れる理由は、基本的に、読み取りレプリカがバイナリ ログを再生しており、LOAD DATA LOCAL INFILE ステートメントに到達したときに、そのファイルがないためです。

RDS bin ログを再生するのではなく、スナップショットを使用して、既存のデータベースから新しい読み取りレプリカを作成します。

したがって、解決策は次のとおりです。マスターに対して LOAD DATA LOCAL INFILE を実行した後、リードレプリカを削除して再作成する必要があります。

于 2013-10-25T18:34:12.823 に答える