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秒。