87

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

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

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

4

12 に答える 12

119

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

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

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

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

loose-local-infile = 1
于 2013-08-26T06:13:47.420 に答える
13

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

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

[client]
loose-local-infile=1
于 2013-12-21T19:08:00.667 に答える
11

これはすべて、私の新しい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)

これにより、Nelsonからstackoverflowに関する別の質問へのこの回答が得られ、問題が解決しました!

于 2015-06-24T19:33:19.267 に答える
1

上位の回答は正しいです。最初に MySQL CLI で直接確認してください。これで問題が解決する場合は、Python3 で動作させたい場合があります。それを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)
于 2019-07-08T11:34:55.500 に答える
1

docker[1] を使用してデータをロードしているときに、このエラーが発生しました。これらの次の手順に従った後、ソリューションは機能しました。最初に、データベースとテーブルを作成しましdatavaultfdata。データをインポートしようとしたとき[2]、エラーが発生しました[3]。それから私はしました:

  • SET GLOBAL local_infile = 1;
  • を使用して確認するSHOW VARIABLES LIKE 'local_infile';
  • 次に、mysql セッションを再開しmysql -P 3306 -u required --local-infile=1 -pました。ユーザーの作成については、[4] を参照してください。
  • これで問題が解決したため、テーブル を再作成しました。
    • use datavault;
    • drop table fdata;
    • CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
  • 最後に [2] を使用してデータをインポートしました。

完全を期すために、.xml を介してコンテナー内で mysql バージョンを実行していたことを追加しdocker exec -it testdb shます。mysql のバージョンはmysql Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL)でした。これは、 WAMP64 の mysql の別のバージョンであるWin64 (x86_64) 用の mysql.exe Ver 14.14 Distrib 5.7.14でもテストされました。使用される関連コマンドは [5] にリストされています。


[1]docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest

[2]load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;

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

[4] 必要なクライアントは以下を使用して作成されました:

  • CREATE USER 'required'@'%' IDENTIFIED BY 'password';
  • GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
  • FLUSH PRIVILEGES;
  • このエラーが発生した場合は、次の行が必要になるALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';場合があります。Authentication plugin ‘caching_sha2_password’ cannot be loaded

[5] WAMP64 の mysql を使用するコマンド:

  • mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1ここで、ポートは、で説明されているようにホストにマップされたポートでdocker ps -aあり、ホスト IP は使用して取得されましdocker-machine ipた (これは、OS およびおそらくDockerのバージョンによって異なります)。
  • 上記のように、データベースdatavault2とテーブルfdataを作成します
  • load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
  • 私の記録では、以前にdatavault3fdataを作成した後、ファイルをロードするこの他の代替手段が機能mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS"し、実行後に簡単にチェックされたデータを正常にロードしましたselect * from fdata limit 10;
于 2019-09-29T15:49:46.843 に答える