AWS RDS インスタンスへの XML のインポート

AWS RDS インスタンスへの XML のインポート

AWS RDS (mySql) インスタンスに XML をロードしようとしています。

XML は次のようになります: (ISO-3661 コードの XML ダンプです)

<?xml version="1.0" encoding="UTF-8"?>
<countries>
  <countries name="Afghanistan" alpha-2="AF" alpha-3="AFG" country-code="004" iso_3166-2="ISO 3166-2:AF" region-code="142" sub-region-code="034"/>
  <countries name="Åland Islands" alpha-2="AX" alpha-3="ALA" country-code="248" iso_3166-2="ISO 3166-2:AX"  region-code="150" sub-region-code="154"/>
  <countries name="Albania" alpha-2="AL" alpha-3="ALB" country-code="008" iso_3166-2="ISO 3166-2:AL" region-code="150" sub-region-code="039"/>
  <countries name="Algeria" alpha-2="DZ" alpha-3="DZA" country-code="012" iso_3166-2="ISO 3166-2:DZ" region-code="002" sub-region-code="015"/>

実行しているコマンドは次のとおりです。

 LOAD XML LOCAL INFILE '/var/www/ISO-3166_SMS_Country_Codes.xml' INTO TABLE `ISO-3661-codes`(`name`,`alpha-2`,`alpha-3`,`country-code`,`region-code`,`sub-region-code`);

表示されるエラーメッセージは次のとおりです:

エラー 1148 (42000): 使用されたコマンドはこの MySQL バージョンでは許可されていません

参照されている infile は存在し、コマンドを実行する前にデータベースを選択し、データベースに対する適切な権限を持っています。データベース テーブル内の列名は、xml フィールド名と完全に一致します。

答え1

ここには 2 つのものがあります。1 つはサーバー側、もう 1 つはクライアント側です。

サーバー (AWS RDS) で、パラメータ グループlocal_infileが に設定されていることを確認します1。デフォルトでは、RDSland 5.1 および 5.5 では有効になっています。

次に、mysql コマンドラインを使用していると仮定して、local-infile オプションで起動します。

mysql --local-infile -hhostname -uusername -p databasename

my.cnf に local-infile を設定することもできますが、その場合はマシンに関連付けられます (YMMV、IANAL、FSCK など)。

注記この 5.1 ドキュメント「デフォルトでは、バイナリ ディストリビューション内のすべての MySQL クライアントとライブラリは、MySQL 3.23.48 以前と互換性を保つために、--enable-local-infile オプションでコンパイルされます。」と書かれていますが、少なくとも最近のディストリビューションではそうではないようです。

$ mysql --help | grep ^local-infile  # Ubuntu 12.04
local-infile                      FALSE
$ mysql --help | grep ^local-infile  # Ubuntu 12.04, fairly stock AWS AMI
local-infile                      FALSE
$ mysql --help | grep ^local-infile  # OSX 10.8
local-infile                      FALSE

関連情報