在mysql外部导入10个G的csv文件

在mysql外部导入10个G的csv文件,有什么好的办法,图表法很慢,但用后台导入时,报错一个接一个。

请参考这个两个文章,使用命令导入
https://blog.csdn.net/fwdwqdwq/article/details/126081152
https://blog.csdn.net/weixin_45761659/article/details/119102399

先确定一个问题,这10G的CSV文件都是同一个表吗?如果是的,首先建议拆分一下文件,变成若干个小文件;第二,建议自己写一下代码进行导入,这样可以自己处理有问题的值

导入大型CSV文件时,可以尝试以下几种方法:

  1. 使用MySQL命令行工具进行导入:使用MySQL命令行工具可以更好地控制数据导入过程,可以使用LOAD DATA INFILE命令来导入CSV文件。这种方法可以提高导入速度并减少错误。

  2. 使用专业的ETL工具:ETL(Extract,Transform,Load)工具可以自动化处理数据导入过程,可以轻松地将大量的CSV文件导入到MySQL数据库中。一些流行的ETL工具是Talend,Pentaho,Apache Nifi等。

  3. 分割CSV文件并并行导入:将大型CSV文件分割成多个小文件,并使用并行导入来提高导入速度。可以使用工具像GNU Parallel和Mydumper来实现并行导入。

  4. 调整MySQL配置参数:如果导入速度缓慢,可能是MySQL的一些配置参数需要进行调整。可以尝试调整参数像innodb_buffer_pool_size,innodb_flush_log_at_trx_commit等,以提高导入速度。

  5. 优化CSV文件:如果CSV文件包含大量的不必要的数据,可以尝试删除这些数据以减少文件大小,并提高导入速度。可以使用工具像sed和awk来处理CSV文件。

对于后台导入时报错的问题,可以查看报错信息并逐一解决。一些常见的报错可能是数据类型不匹配,主键冲突等。可以根据报错信息进行调整,或者在导入过程中进行数据预处理以避免错误。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:mysql导入csv的4种报错
  • 除此之外, 这篇博客: mysql导出csv文件,并带表头处理中的 mysql导出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生效