26

これと同様の質問が I'm going to execute the following MySQL program.

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

4

4 に答える 4

48

これを回避するには、コマンド ラインを変更して、次のように引数mysql -eを渡します。--local-infile=1

mysql --local-infile=1 -u username -p `

その後、LOAD DATA LOCAL INFILEコマンドを再度実行します。

于 2013-04-29T18:55:22.010 に答える
31

セキュリティの問題にLOAD DATA LOCAL記載されているとおり:

これらの問題に対処するためにLOAD DATA LOCAL、MySQL 3.23.49 および MySQL 4.0.2 (Windows では 4.0.13) の処理方法を変更しました。

  • デフォルトでは、バイナリ配布のすべての MySQL クライアントとライブラリは、--enable-local-infileオプションを使用してコンパイルされ、MySQL 3.23.48 以前と互換性があります。

  • ソースから MySQL をビルドするが、--enable-local-infileオプションを指定して configure を呼び出さLOAD DATA LOCALない場合は、明示的に invoke と書かれていない限り、どのクライアントでも使用できませんmysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)セクション20.6.6.49「<code>mysql_options()」</a>を参照してください。

  • オプションを指定してmysqldを起動すると、サーバー側からすべてのLOAD DATA LOCALステートメントを無効にできます。--local-infile=0

  • mysqlコマンドライン クライアントの場合は、オプションを指定して有効にLOAD DATA LOCALする--local-infile[=1]か、オプションで無効にし--local-infile=0ます。mysqlimportの場合、ローカル データ ファイルのロードはデフォルトでオフになっています。--localor-Lオプションで有効にします。いずれにせよ、ローカル ロード操作を正常に使用するには、サーバーがそれを許可する必要があります。

  • オプション ファイルからグループLOAD DATA LOCALを読み取る Perl スクリプトまたはその他のプログラムでを使用する場合、そのグループにオプションを追加できます。ただし、これが を理解しないプログラムに問題を引き起こさないようにするには、接頭辞を使用して指定します。[client]local-infile=1local-infileloose-

    [クライアント]
    Loose-local-infile=1
    
  • LOAD DATA LOCALサーバーまたはクライアントで が無効になっている場合、そのようなステートメントを発行しようとするクライアントは、次のエラー メッセージを受け取ります。

    ERROR 1148: The used command is not allowed with this MySQL version

于 2013-04-29T18:44:59.080 に答える
10

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 ...

アマゾン ウェブ サービス RDS を使用している場合は、パラメーター グループを編集または作成してサーバー設定を構成できます。パラメータを探しlocal_infileます。変更を適用した後、サーバーを再起動する必要がある場合があります。

于 2013-12-21T02:17:02.587 に答える
0

LOAD DATA LOCAL私の推測では、MySQL サーバーが有効になっていません。MySQL ドキュメントの次のセクションを参照してください。

サーバーまたはクライアントで LOAD DATA LOCAL が無効になっている場合、そのようなステートメントを発行しようとするクライアントは、次のエラー メッセージを受け取ります。

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

これを入手したページへのリンクは次のとおりです。

http://dev.mysql.com/doc/refman/5.5/en/load-data-local.html

于 2013-04-29T18:50:26.367 に答える