公司遇到一个奖金2个G的数据导出导入,用最原始的导出和source 或者mysql <导入,执行时间很长,跑十几个小时,也只有不到一个G的数据,然后根据以下方式调整,300W条记录,800多M的单表进库,只用了2分钟,下面简单分析一波。
大致思路
- 筛选数据库中数据量大的表
- 检查是否又索引,索引在插入数据时,会越来越耗性能
- 设置数据库max_allowed_packet值
- 导出数据时,不要使用单条数据
具体实时
1、筛选数据库中大表
这个就不详细说了,我是筛选出来大表后,其余小表导出sql进行单独导入,大表单独导入
2、索引问题
大表为了检索一般都会创建索引,所以在数据导出时,或者再插入数据时,一定要先删除索引,因为本文是新导入库,因此是在导出或者建表语句中将索引删除了
3、设置数据库max_allowed_packet值
编辑/etc/my.cnf 在[mysqld]下面加上此设置,然后重启mysql服务,全部完成后,建议去掉此设置,并重启mysql服务
4、具体导出
我用的navicate,所以按照上面截图了,选择工具=>数据传输=>弹出下图
点击常规边上选项,去选择导出是否使用事务,以及是否扩展插入,扩展插入会一此insert多条语句
5、导入
建议将sql文件上传,然后用source导入