を使用してmysqlデータベースにデータをロードしようとしています
LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
この質問のトピックは、私が得る応答です。ローカル データのオフロードがデフォルトでオフになっていることは理解しています。コマンドを使用して有効にする必要がありますlocal-infile=1
が、このコマンドを配置する場所がわかりません。
クライアント接続をセットアップするときに、追加オプションとして指定できます。
mysql -u myuser -p --local-infile somedatabase
これは、その機能がセキュリティ ホールを開くためです。したがって、本当に使用したい場合は、明示的に有効にする必要があります。
クライアントとサーバーの両方で local-file オプションを有効にする必要があります。それ以外の場合は機能しません。サーバー側サーバーのファイルに対して有効にするには、my.cnf
構成ファイルに次を追加します。
loose-local-infile = 1
http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html
これを my.cnf に入れます -[client]
セクションは既にそこにあるはずです (セキュリティをあまり気にしない場合)。
[client]
loose-local-infile=1
これはすべて、私の新しい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に関する別の質問へのこの回答が得られ、問題が解決しました!
上位の回答は正しいです。最初に MySQL CLI で直接確認してください。これで問題が解決する場合は、Python3 で動作させたい場合があります。それをMySQLdb.connect
as パラメータに渡すだけです。
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)
docker[1] を使用してデータをロードしているときに、このエラーが発生しました。これらの次の手順に従った後、ソリューションは機能しました。最初に、データベースとテーブルを作成しましdatavault
たfdata
。データをインポートしようとしたとき[2]、エラーが発生しました[3]。それから私はしました:
SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
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));
完全を期すために、.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のバージョンによって異なります)。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';
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;
。