Python日記

【MySQL】CSVをインポート時の注意点。Loading local data is disabledの解消法

2021年8月23日

MySQL CSVのインポートをしてみようの巻

MySQLを使い始めると、すぐにCSVからデータをインポートしたいという要望がでてくるはずです。

実際のエラーの解消法とあわせて、インポートの方法をお伝えしていきます。

そもそも、MySQLにCSVのデータをインポートできる?

もちろん簡単にできるから、安心して!

CSVのインポート方法(エラーが出た!)

まずは、MySQLをスタートさせてから、使うデータベースを選びます。

use (データベース名)

今回はデスクトップにある、1.csvというデータをインポートさせようと思います。

LOAD DATA LOCAL INFILE '/Users/xxxxxxxxxxx/Desktop/1.csv' INTO TABLE (テーブル名) FIELDS TERMINATED BY ',';

FIELDS TERMINATED BY で、テキストの区切りを指定しています。

CSVの場合は、','(カンマ)で問題ありません。

いざ、実行。ところが以下のエラーが表示されました。

Loading local data is disabled; this must be enabled on both the client and server sides

ローカルデータなので使えません、というエラーがでてきました。

CSVのインポート方法(エラー解消!)

解決方法は以下です。

mysqlに入る前に、--local_infile=1をつけておきます。

mysql -u root -p --local_infile=1

通常通り、パスワードを入力します。

Enter password:

@@local_infile:0はローカルデータにアクセスできない

MySQLにログインできたら、確認のため、以下を入力してみます。

SELECT @@local_infile;

以下の結果がでました。

+----------------+
| @@local_infile |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)

答えが0です。

0が表示されている場合は、ローカルデータにアクセスができません。

@@local_infile:1に変更

対処法は以下のコマンドです。

set persist local_infile = 1;

これで変更完了。

先ほど同様にチェックをしてみます。

select @@local_infile;
+----------------+
| @@local_infile |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

今回は1が表示されました。

これでローカルデータにアクセスが可能になっています。

改めて、以下のコマンドでインポートを実行。

LOAD DATA LOCAL INFILE '/Users/xxxxxxxxxxx/Desktop/1.csv' INTO TABLE (テーブル名) FIELDS TERMINATED BY ',';

Macの場合、CSVファイル名のコピーは、ファイルを選択して、Command+Option+C で簡単にできるよ

以下の通り無事に、クエリOKが返ってきました。

Query OK, 9 rows affected (0.01 sec)
Records: 9  Deleted: 0  Skipped: 0  Warnings: 0

CSVインポート時の注意点

多くの場合、1行目にヘッダーを設定していると思いますが、

普通にインポートした場合は、それを無視してくれません。

その場合は、2行目からインポートするように指示を出しましょう。

コマンドは以下です。

LOAD DATA LOCAL INFILE '/Users/xxxxxxxxx/Desktop/1.csv' INTO TABLE (テーブル名) FIELDS TERMINATED BY ',' ignore 1 lines;

最後に ignore 1 lines を追加しました。これで2行目からインポートしてくれます。

まとめ

今回は、以下のエラーの対処法を解説しました。

Loading local data is disabled; this must be enabled on both the client and server sides

対処法は、以下のコマンドで、loca_infileを1に設定することです。

set persist local_infile = 1;

MySQLでCSVを使うことは非常に多いので、ぜひ有効活用してください。

-Python日記