Mysql超百万数据的导入导出

菠萝饭 185 2021-12-13

前言

因业务需要,需将一些用户记录进行汇总并上传到指定平台。需要先将指定时间的所有用户记录进行汇总。涉及到了大数据量的数据导入导出。

使用 INTO OUTFILE 和 LOAD DATA LOCAL INFILE 实现了改功能,记录一下

步骤:

  1. 将源数据导出(select * from test_table ORDER BY createtime into outfile 'E:\temp\test.txt';)
  2. 将源数据筛选后导入(LOAD DATA LOCAL INFILE 'E:\temp\test.txt' INTO TABLE test_table_sort (@c1,c2,c3,...,c14,c15);)

注意:

  1. 需要先开启文本导出权限
    1. show global variables like '%secure%'; //查询设置
    2. 将 secure_file_priv 值赋值为 ""
  2. 导入数据报错 (The used command is not allowed with this MySQL version)
    原因除了是mysql版本过低外,最有可能是因为设置禁止远程导入文件,所以navicat执行导入报错。可以在本机上cmd连接mysql后再执行。解决!
  3. 导入时可用 @变量名 指定某列值不导入;

# 实际问题