web-dev-qa-db-ja.com

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

を使用してmysqlデータベースにデータをロードしようとしています

LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

この質問のトピックは、私が受け取る応答です。ローカルデータオフロードはデフォルトでオフになっていることを理解しており、コマンドlocal-infile=1を使用して有効にする必要がありますが、このコマンドを配置する場所がわかりません。

52
sosytee

クライアント接続をセットアップするときに、追加のオプションとしてそれを指定できます。

mysql -u myuser -p --local-infile somedatabase

これは、その機能がセキュリティホールを開くためです。したがって、本当に使用したい場合には、明示的に有効にする必要があります。

クライアントとサーバーの両方でローカルファイルオプションを有効にする必要があります。それ以外の場合は機能しません。サーバー側サーバー上のファイルに対して有効にするには、my.cnf構成ファイルに以下を追加します。

loose-local-infile = 1
85
arkascha

私は答えを見つけます こちら

サーバー変数local_infileFALSE | 0に設定されているためです。 document から参照してください。

以下を実行して確認できます。

SHOW VARIABLES LIKE 'local_infile';

SUPER特権を持っている場合は、次のコマンドを実行することで(新しい構成でサーバーを再起動せずに)有効にできます。

SET GLOBAL local_infile = 1;
33
Java Xu

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

これをmy.cnfに入れます-[client]セクションは既に存在しているはずです(セキュリティについてあまり心配していない場合)。

[client]
loose-local-infile=1
12
Vérace

これらすべては、私の新しいUbuntu 15.04では解決しませんでした。

LOCALを削除して、次のコマンドを取得しました。

LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

しかし、私は得た:

MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)

それが私を stackoverflowの別の質問に対するNels​​onからのこの回答 に導き、問題を解決しました!

7
Dominic

デフォルトのMySQLコネクタを備えたSpringBoot 2.1

これを解決するには、指示に従ってください

1. SET GLOBAL local_infile = 1;

このグローバル変数を設定するには、MySQLのドキュメントに記載されている指示に従ってください https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html

2. MySQLコネクタ文字列を変更する

allowLoadLocalInfile = true例:jdbc:mysql:// localhost:3306/xxxx?useSSL = false&useUnicode = yes&characterEncoding = UTF-8&allowLoadLocalInfile = true

3
Vineet Sharma

AWS MySQL 8.0 RDSでCSVファイルをインポートするときに同じ問題が発生しました。

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS Terminateted by '、' ENCLOSED BY '"' Lines Terminateted by '\ n' IGNORE 1 LINES;

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

1)local_infileパラメーターを確認します

mysql> SHOW VARIABLES LIKE 'local_infile';

2)クライアントからログアウトし、以下のパラメーターを使用して再ログインします。

mysql -u root -p -h rdsendpoint --local-infile=1

3)同じコマンドを実行する

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;


Query OK, 300 rows affected (0.01 sec)

Records: 300  Deleted: 0  Skipped: 0  Warnings: 0
1
Nilesh Mishra

ほんの少し追加。

Mysql.connector ver 8.0.16で別の生まれ変わりを見つけました。今ではallow_local_infile = Trueが必要です。そうでない場合、上記のエラーが表示されます。以前のバージョンで働いていた。

conn = mysql.connector.connect(Host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)
1
VladimirS

MySQL 8.0リファレンスマニュアルを参照してください- 6.1.6 LOAD DATA LOCALのセキュリティ問題

サーバー側で、実行します

mysql.server start --local-infile

クライアント側で、実行します

mysql --local-infile database_name -u username -p
0
mathsyouth

一番上の答えは正しいです。最初にMySQL CLIで直接確認してください。これで問題が解決した場合、Python [3]で動作させたい場合は、MySQLdb.connectasパラメーターに渡すだけです。

self.connection = MySQLdb.connect(
                    Host=host, user=settings_DB.db_config['USER'],
                    port=port, passwd=settings_DB.db_config['PASSWORD'], 
                    db=settings_DB.db_config['NAME'],
                    local_infile=True)
0
gies0r