環境
MySQL 8.0.21
インポート失敗
MySQL8.0にcsvファイルをインポートしようとすると失敗する。
mysql> load data local infile "[ファイル名]" into table [テーブル名] fields terminated by ',';
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
理由は、
- セキュリティ強化のため、8.0から
LOAD DATA INFILE LOCAL
はデフォルトで無効にされた。 - MySQL 8.0 で
LOAD DATA INFILE LOCAL
を利用するには、サーバとクライアント両方でlocal-infile
パラメータを ON にする必要がある。
インポートする
まず、サーバー側のlocal-infile
をONにする。
mysql> select @@local_infile; // 設定を確認する
+----------------+
| @@local_infile |
+----------------+
| 0 |
+----------------+
1 row in set (0.01 sec)
mysql> set global local_infile=on; // パラメータを ON にする
Query OK, 0 rows affected (0.01 sec)
mysql> select @@local_infile; // 変更されたことを確認する
+----------------+
| @@local_infile |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
次は、クライアント側のlocal-infile
をONにする。
# mysql -h [ホスト名] --local-infile=1 -p
これらの設定をし、LOAD DATA INFILE LOCAL
で無事にcsvをインポートできました。
※接続先のホスト名は以下のコマンドで確認できます。
mysql> show variables like 'hostname';
+---------------+--------------+
| Variable_name | Value |
+---------------+--------------+
| hostname | [ホスト名] |
+---------------+--------------+
1 row in set (0.02 sec)
参考
https://mita2db.hateblo.jp/entry/2020/01/13/163218
https://qiita.com/nii_yan/items/0265f69370bbdb883655