web-dev-qa-db-ja.com

Amazon RDSで「データをファイルに読み込む」方法

これがserverfaultに適している質問かどうかはわかりませんが、最近Amazon RDSをいじって、Webホストのmysqlユーザーに「ファイル」権限を取得するのに問題がありました。

私は単純だと思います:

grant file on *.* to 'webuser@'%';

は機能しますが、機能しません。また、「root」ユーザーでも機能しないようです。何ができますか?ロードデータを使用する理由は、一度に数千回の挿入を実行するのに非常に高速であるためです。

誰もがこれを修正する方法を知っていますか、私は別の方法を見つける必要がありますか?

このページ http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html?Concepts.DBInstance.html は、これを回避する別の方法を見つける必要があることを示唆しているようです。

助けて?

[〜#〜] update [〜#〜]データベースをインポートしようとしていません-ファイルロードオプションを使用して一度に数十万行を挿入します。

これを掘り下げた後、私たちが持っているものです:

 mysql> grant file on *.* to 'devuser'@'%';
 ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)


 mysql> select User, File_priv, Grant_priv, Super_priv from mysql.user;
 +----------+-----------+------------+------------+
 | User     | File_priv | Grant_priv | Super_priv |
 +----------+-----------+------------+------------+
 | rdsadmin | Y         | Y          | Y          |
 | root     | N         | Y          | N          |
 | devuser  | N         | N          | N          |
 +----------+-----------+------------+------------+
33
eyberg

ファイルはMySQLサーバー上ではなく、コマンドを実行しているマシン上にあるため、LOAD DATA LOCAL INFILEを使用する必要があります。

以下のコメントに従って、フラグを含める必要がある場合もあります。

--local-infile=1
88
chris finne

それが価値のあるものなら何でも...この問題を回避するためにmysqlimportを使用する代わりに、LOAD DATA INFILEにLO​​CALオペランドを追加できます。

データの読み込み[〜#〜] local [〜#〜] INFILE ...

これは、FILE権限を付与しなくても機能します。

9
user1493124

RDSには最高レベルのMySQL権限がないため、まだそれを実行できないことを確認してください。ほんの少しのテストしか行っていませんが、データベースをインポートする最も簡単な方法は、ソースボックスからパイプすることです。

mysqldump MYDB | mysql -h rds-Amazon-blah.com --user=youruser --pass=thepass
5

Amazon MySQL RDSへのバルクデータのインポートは、2つの方法で可能です。あなたの都合に合わせて以下のいずれかを選択できます。

  1. インポートユーティリティの使用。

    mysqlimport --local --compress  -u <user-name> -p<password> -h <Host-address> <database-name> --fields-terminated-by=',' TEST_TABLE.csv
    --Make sure, here the utility will be inserting the data into TEST_TABLE only.
    
  2. Mysqlコマンドにパイプすることにより、一括挿入SQ​​Lを送信します。

    mysql -u <user-name> -p<password> -h <Host-address> <database-name> < TEST_TABLE_INSERT.SQL
    --Here file TEST_TABLE_INSERT.SQL will have bulk import sql statement like below
    --insert into TEST_TABLE values('1','test1','2017-09-08'),('2','test2','2017-09-08'),('3','test3','2017-09-08'),('3','test3','2017-09-08');
    
1
Red Boy

私は同様の問題に遭遇しました。私は実際にデータベースをインポートしようとしましたが、条件は同じであるはずです-一部のテーブルのサイズ、接続のむら、および控えめな再開機能への欲求のため、ロードデータを使用する必要がありました。

ローカルオプションを指定しないと、そのエラーが発生する可能性があるというchris finneに同意します。多くの適合と開始の後、- Maatkit のmk-parallel-restoreツールが、優れた追加機能で必要なものを提供していることがわかりました。ユースケースに最適です。

1
Brian Luft