次のMySQLプログラムを実行しようとすることで、これと同様の質問が解決されたかどうかはわかりません。
_mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"
_
bashコマンドラインでこのエラーを取得する
ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version
この問題を回避するにはどうすればよいですか?
私は実際にPythonプログラムからこのコマンドを実行していますが、bashコマンドラインで操作するためにコマンドを引き出しました。
My.cnf(local-infile)を変更する方法を見てきましたが、それを避けることができれば、そのグローバルな変更は望ましくありません。
これがMySQLバージョンです。
mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2
LOAD DATA LOCAL
のセキュリティ問題 :で文書化されています。
これらの問題に対処するため、MySQL 3.23.49およびMySQL 4.0.2(Windows上の4.0.13)で
LOAD DATA LOCAL
の処理方法を変更しました。
デフォルトでは、バイナリディストリビューションのすべてのMySQLクライアントとライブラリは
--enable-local-infile
オプションでコンパイルされ、MySQL 3.23.48以前と互換性があります。MySQLをソースからビルドするが、
--enable-local-infile
オプションでconfigureを呼び出さない場合、mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)
を呼び出すように明示的に書かれていない限り、LOAD DATA LOCAL
はどのクライアントでも使用できません。 セクション20.6.6.49、「mysql_options()
」を参照してください 。
LOAD DATA LOCAL
オプションを指定して mysqld を起動すると、サーバー側からすべての--local-infile=0
ステートメントを無効にできます。mysql コマンドラインクライアントの場合、
LOAD DATA LOCAL
オプションを指定して--local-infile[=1]
を有効にするか、--local-infile=0
オプションで無効にします。 mysqlimport の場合、ローカルデータファイルのロードはデフォルトでオフになっています。--local
または-L
オプションで有効にします。いずれにせよ、ローカルロード操作を正常に使用するには、サーバーがそれを許可する必要があります。オプションスクリプトから
LOAD DATA LOCAL
グループを読み取るPerlスクリプトまたはその他のプログラムで[client]
を使用する場合、そのグループにlocal-infile=1
オプションを追加できます。ただし、これがlocal-infile
を理解しないプログラムで問題を引き起こさないようにするには、loose-
プレフィックスを使用して指定します。[クライアント] loose-local-infile = 1サーバーまたはクライアントで
LOAD DATA LOCAL
が無効になっている場合、そのようなステートメントを発行しようとするクライアントは次のエラーメッセージを受け取ります。
ERROR 1148: The used command is not allowed with this MySQL version
これを回避するには、コマンドラインを変更しますmysql -e
で渡す--local-infile=1
引数は次のようになります。
mysql --local-infile=1 -u username -p `
次に、LOAD DATA LOCAL INFILE
コマンド。
local-infile
は、サーバーとクライアントの両方で有効にする必要があります。これを実現するには、local-infile = 1
を各エンドのmy.cnf
(Unix)またはmy.ini
(Windows)ファイルの適切なセクションに追加します。たとえば、クライアント上で:
[client]
local-infile = 1
システム変数local_infile
を設定することにより、サーバーで実行時にこれを有効にすることもできます。
SET GLOBAL local_infile=1;
ただし、クライアントでそれを有効にする必要があります。 mysql
コマンドにコマンドラインパラメーターを追加することにより、実行時にこれを行うことができます。
mysql --local-infile=1 ...
Amazon Web Services RDSを使用している場合は、パラメーターグループを編集または作成することでサーバー設定を構成できます。 local_infile
パラメーターを探します。変更を適用した後、サーバーを再起動する必要がある場合があります。
私の推測では、MySQLサーバーにはLOAD DATA LOCAL
有効。 MySQLドキュメントのこのセクションを参照してください。
サーバーまたはクライアントでLOAD DATA LOCALが無効になっている場合、そのようなステートメントを発行しようとするクライアントは次のエラーメッセージを受け取ります。
エラー1148:使用されたコマンドは、このMySQLバージョンでは許可されていません
これは私がこれから得たページへのリンクです: