在mysql外部导入10个G的csv文件,有什么好的办法,图表法很慢,但用后台导入时,报错一个接一个。
请参考这个两个文章,使用命令导入
https://blog.csdn.net/fwdwqdwq/article/details/126081152
https://blog.csdn.net/weixin_45761659/article/details/119102399
先确定一个问题,这10G的CSV文件都是同一个表吗?如果是的,首先建议拆分一下文件,变成若干个小文件;第二,建议自己写一下代码进行导入,这样可以自己处理有问题的值
导入大型CSV文件时,可以尝试以下几种方法:
使用MySQL命令行工具进行导入:使用MySQL命令行工具可以更好地控制数据导入过程,可以使用LOAD DATA INFILE命令来导入CSV文件。这种方法可以提高导入速度并减少错误。
使用专业的ETL工具:ETL(Extract,Transform,Load)工具可以自动化处理数据导入过程,可以轻松地将大量的CSV文件导入到MySQL数据库中。一些流行的ETL工具是Talend,Pentaho,Apache Nifi等。
分割CSV文件并并行导入:将大型CSV文件分割成多个小文件,并使用并行导入来提高导入速度。可以使用工具像GNU Parallel和Mydumper来实现并行导入。
调整MySQL配置参数:如果导入速度缓慢,可能是MySQL的一些配置参数需要进行调整。可以尝试调整参数像innodb_buffer_pool_size,innodb_flush_log_at_trx_commit等,以提高导入速度。
优化CSV文件:如果CSV文件包含大量的不必要的数据,可以尝试删除这些数据以减少文件大小,并提高导入速度。可以使用工具像sed和awk来处理CSV文件。
对于后台导入时报错的问题,可以查看报错信息并逐一解决。一些常见的报错可能是数据类型不匹配,主键冲突等。可以根据报错信息进行调整,或者在导入过程中进行数据预处理以避免错误。
这是测试的数据库表结构
直接使用into outfile导出csv文件是不带表头的
select * from student
into outfile 'C:/Users/Administrator/Desktop/1.csv'
使用 UNION ALL把需要导出的数据处理一遍
select * from
(SELECT 'id','name','chinese','english','math' UNION ALL SELECT * from student)
t into outfile 'C:/Users/Administrator/Desktop/text.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'
导出的结构就是这样的
如果有报错The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
是配置问题,修改配置可修改mysql配置文件,查看是否有
secure_file_priv =
这样一行内容,如果没有,则手动添加,
secure_file_priv = /home
表示限制为/home文件夹
secure_file_priv =
表示不限制目录,等号一定要有,否则mysql无法启动
修改完配置文件后,重启mysql生效