MySQL:使用 load data 快速导入数据


#MySQL 笔记


load data 的作用是将文件中的数据导入到 MySQL 数据库中。

[load data] 官方文档: https://dev.mysql.com/doc/refman/5.7/en/load-data.html

示例

建表

USE test;
CREATE TABLE `test_table` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '名字',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

生成数据

生成 2000w 条记录。

Python 代码:

// 文件名: gen_test_table_data.py

for i in range(1, 2000_0000):
    print('{},name{}'.format(i, i))

生成文件:

$ python3 gen_test_table_data.py > /tmp/data.csv 

/tmp/data.csv中的内容长这个样子:

1,name1
2,name2

配置 MySQL

默认情况下,MySQL 禁止导入/导出数据,可以通过配置secure_file_priv 解决。

找到 my.cnf(linux 下的位置是/etc/my.cnf),添加secure_file_priv=''。然后重启MySQL。

如果只允许处理 /tmp目录下的文件,可以配置成secure_file_priv='/tmp'

在mysql客户端中,可以通过select @@secure_file_priv; 或者show variables like '%secure%';查询配置的值。

导入数据

LOAD DATA INFILE '/tmp/data.csv' INTO TABLE test_table FIELDS TERMINATED BY ','

2000w条数据导入,在我的电脑上耗时约40秒。



( 本文完 )