MySQLでエラー
Loading local data is disabled; this must be enabled on both the client and server sides
や
LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
が出た話。
####1. csvファイルのデータをMySQLにインポートしたい。
mysql> LOAD DATA LOCAL INFILE 'C:\\第11回_データ\\customers.csv' into table J19063_customers1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"';
上のようにLOAD DATA LOCAL INFILE~でcsvファイルのデータをインポートしようとすると、エラーコードが出ました。
色々調べた結果、クライアント側とサーバー側のアクセス権限が通ってないのが原因のようですのでその設定をする必要があります。
####2. クライアント側の local_infileを設定する。
まず、コマンドプロンプト(Macはターミナル)で以下を入力し、実行します。
mysql -u root -p --local_infile=1
パスワード入力を求められるので、MySQLのログインパスワードを入れます。
ここで重要なのは、MySQL 8.0 Command Line Clientで実行するのではなく、
コマンドプロンプトから実行するということです。
じゃないとうまくいかないと思います。
C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u root -p --local_infile=1
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.25 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
実行する場所は何でもいいと思うんですが、わたしはなんとなく
\Program Files\MySQL\MySQL Server 8.0\bin
ここの場所にしました。
####3. サーバー側のlocal_infileを設定する。
ログインできたら以下を実行します。
set persist local_infile=1
そのあとは、データベースを選択し、改めてcsvファイルをインポートしてみます。
mysql> set persist local_infile=1;
Query OK, 0 rows affected (0.00 sec)
mysql> USE ec_site;
Database changed
mysql> LOAD DATA LOCAL INFILE 'C:\\第11回_データ\\customers.csv' into table J19063_customers1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"';
Query OK, 4 rows affected (0.02 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
成功しました!
参考
local_file って何?って気になった人用
local_fileは、ローカルオプションをつけてload dataするときに、サーバー側の機能を制御してくれるMySQLのシステム変数。local_infileの設定に応じて、サーバはクライアント側で有効にしたクライアントがローカルデータのロードを行うことを拒否または許可する。
つまり、アクセス制限みたいなことをやってくれてる変数みたい。デフォルト状態では無効になっているから、明示的に無効か有効かを書かないといけない。
無効:local_infile = 0
有効:local_infile = 1
いろいろなサイトを渡り歩き結局参考になったのはこのサイト。
https://foxglovetree.wiki.fc2.com/wiki/Study.Mayumi.MySQL_import