解决mysql导入数据文件过慢的问题

Posted 丨讓之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决mysql导入数据文件过慢的问题相关的知识,希望对你有一定的参考价值。

目前遇到一个问题,mysql使用source命令导入 *.sql 数据文件时,运行的很慢,大概一秒钟插入个一两百条左右的样子,对于大的文件来说这个太慢了,从其他博主那边搜集了一些方案,简单说就是一句话:SET GLOBAL innodb_flush_log_at_trx_commit = 2;

   1.登入mysql

mysql -uroot -p***


2.查看mysql中对于参数 innodb_flush_log_at_trx_commit 的配置

show global variables where variable_name = ‘innodb_flush_log_at_trx_commit‘;

 3.修改

SET GLOBAL innodb_flush_log_at_trx_commit = 2;

修改完成后在次执行相同的文件,200M大约200w+条的数据在1分钟左右。

对于该参数的不同值的说明:

1.innodb_flush_log_at_trx_commit参数为 0
        binlog_group_flush && thd_flush_log_at_trx_commit(NULL) == 0 条件成立,因此直接return了,那么这种情况下log_buffer_flush_to_disk函数不会调用,因此不会做redo刷盘。依赖master线程。
    2.innodb_flush_log_at_trx_commit参数为 1
        !binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回为1即为True,因此调用log_buffer_flush_to_disk(True),因此需要做redo刷盘,也要做sync。
    3.innodb_flush_log_at_trx_commit参数为 2
        !binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回为0即为Flase,因此调用log_buffer_flush_to_disk(Flase),因此需要做redo刷盘,不做sync。依赖OS的刷盘机制。

以上是关于解决mysql导入数据文件过慢的问题的主要内容,如果未能解决你的问题,请参考以下文章

Mysql-Insert插入过慢的原因记录和解决

JCIFS读取远程服务器文件过慢的解决方法

Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法

解决GitHub图片加载不出来或加载过慢的问题

github上打开或下载过慢的问题解决

mysql导入导出sql文件,source导入速度慢的解决办法