web-dev-qa-db-ja.com

MySQLロードエラーを修正するにはどうすればよいですか

次の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

25
octopusgrabbus

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

31
eggyal

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

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

次に、LOAD DATA LOCAL INFILEコマンド。

48
octopusgrabbus

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パラメーターを探します。変更を適用した後、サーバーを再起動する必要がある場合があります。

8
Zenexer

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

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

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

これは私がこれから得たページへのリンクです:

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

0
Mike Brant