DataBase MySQL

MySQL load dataでcsvをインサートする

投稿日:2013年2月6日 更新日:

かなり高速でinsertしてくれます。

使い方

MySQLにログインして、データベースを指定して実行します。

mysql> use [データベース]
mysql> load data local 
infile '/xxx/test.csv' 
into table [テーブル名] 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n';

ERROR 1045

ERROR 1045 (28000): Access denied for user ‘test’@’localhost’ (using password: YES)
の場合はmysqlのユーザーにファイル権限がありません。

のようなエラーがでる場合があります。

①MySQLのファイル権限を確認します。(linuxではありません)

mysql> select user,file_priv from mysql.user;
+--------+-----------+
| user   | file_priv |
+--------+-----------+
| root   | Y         |
| test   | N         |
+--------+-----------+
2 rows in set (0.00 sec)
もしなければ追加します。
mysql> grant file on *.* to test@localhost;
Query OK, 0 rows affected (0.00 sec)

②linuxのディレクトリとファイルのアクセス権限を確認します

#chmod 755 test.csv
だめらならファイルの入っているディレクトリにも
#chmod 755 dir

③ローカルキーワードの確認
データベースサーバー上にcsvファイルがある場合でもlocalキーワードが必用です。
mysql> load data local infile ‘/xxx/test.csv’ into table [テーブル名] fields terminated by ‘,’ enclosed by ‘”‘ lines terminated by ‘\n’;

成功したら下記のように表示されるはずです。

mysql> use [データベース]
mysql> load data local infile '/xxx/test.csv' into table soumu fields terminated by ',' enclosed by '"' lines terminated by '\n';
Query OK, 1800 rows affected (0.04 sec)
Records: 1800  Deleted: 0  Skipped: 0  Warnings: 0

データは追加されていくので、同じファイルを何度もインポートしていると、キーが重複してSkippedが発生するかもしれません。

[補足]insertを高速にする

複数のinsert分をまとめることで早くなります。

mysql>INSERT INTO table (id,name) VALUES(1,'本'),(2,'たまご'),(3,'猫');

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

MySQLのmysqldumpのエクスポートとインポート

ダンプはバックアップやテストに大活躍してくれます。 しかし、データベース単位でエクスポートしても、インポートには随分時間がかかったりします。 その辺は別の機会にしますが、今回は基本コマンドのまとめです …

mysql

utilitiesのmysqlfailoverを使う(2)

前回の utilitiesのmysqlfailoverを使う(1)で設定・起動は完了しています。 私の目的は2台のMySQLサーバーを定期的に入れ替えてメンテナンスすることです。 今回はマスターがダウ …

mysql

mysqldumpでテーブル毎のダンプを圧縮して取得するスクリプト

mysqldumpではデータベースを指定して一括してダンプを取得できます。テーブル毎のダンプも取得できます。 しかし、一括して取得したダンプの1つのテーブルだけをインポートすることはできません。これは …

mysql

MySQLにファイルからSQLを読み込む

MySQLにファイルからSQLを読み込む方法は 意外と知られていない方法ですのでメモっておきます。 INDEX1 MySQLにログイン中の場合2 スクリプトから実行する場合3 おまけのコマンドで指定す …

mysql

MySQLのバイナリログを見てスレーブ停止の原因を調査する

以前スレーブ側の更新がとまっていることに気付きました :x001: その時のトラブルシューティングの手順です。 INDEX1 1.スレーブ側で、SlaveS tatusを確認する2 2.スレーブ側のロ …