专栏首页八点半技术站mysql 导入数据太慢,来教你实用干货

mysql 导入数据太慢,来教你实用干货

概述:

本篇讲解:如何快速导入由逻辑备份产生的SQL脚本,其他文件形式暂不讲解。

日常开发中,大家肯定遇到过这些需求:“ 数据迁移、数据恢复、新建从库 ” 等等一系列任务,因为做这些需求我们肯定知道,会涉及到 大量的数据 的处理。

大量的数据,会导致我们处理数据进度有时会很慢很慢,那么我们总得找一些方案来解决,对吧。

其实,这也是有一些小技巧的,可以大大增加我们数据的处理速度,那么就开始吧~~~

小技巧 - 方案一

开场先注意:导出 或 导入数据,尽可能的使用 MySQL 自带命令工具 ,不要使用一些图形化的工具 (Navicat...)。因为 MySQL 命令行工具至少要比图形化工具快 2 倍 。

命令工具行方式:

# 导出整个实例
mysqldump -u用户名 -p密码 --all-databases > all_database.sql

# 导出指定库
mysqldump -u用户名 -p密码 --databases testdb > testdb.sql

# 导出指定表
mysqldump -u用户名 -p密码 testdb test_tb > test_tb.sql

# 导入指定SQL文件 (指定导入testdb库中)
mysql -u用户名 -p密码 testdb < testdb.sql

小技巧 - 方案二

修改参数方式:

在 MySQL 中,有这么一对参数很有意思,分别是:

“ innodb_flush_log_at_trx_commit ” 
      与
“ sync_binlog ”

安全性考虑,这个参数默认是 1 ,为了快速导入sql 数据,可临时修改默认参数值。

参数一: innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2

innodb_flush_log_at_trx_commit 设置为 0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。

innodb_flush_log_at_trx_commit设置为 1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。

innodb_flush_log_at_trx_commit设置为 2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

参数二: sync_binlog默认值为1,可设置为[0,N)

当 sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。

当 sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。

注意:这两个参数可以在线修改,若想快速导入,可按照以下命令行

# 1.进入MySQL命令行 临时修改这两个参数
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;

# 2.执行SQL脚本导入
mysql -uroot -pxxxxxx testdb < testdb.sql

# 3.导入完成 再把参数改回来
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

小技巧 - 方案三

这种场景也很熟悉,就是新建从库,并且不需要生成 binlog 日志。

解决方式很简单,在 sql 脚本开头增加:

set sql_log_bin=0;

然后继续执行导入,这样速度也会加快。(如MySQL没开启binlog,则无需执行该语句)

到这里也就结束了,首先恭喜你又阅读完一篇文章。

本文分享自微信公众号 - 八点半技术站(gtcarry),作者:八点半技术站

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 订阅技术类型的公众号 究竟是为了什么?

    第一种:某些大厂的CTO、CEO(根据自己影响力,去编写一些曾经自己nb经历,以及自己对年轻人相关建议,大局观)

    八点半的Bruce、D
  • 如何高效进行 API 的接口性能压测?

    今天是周二(2020-04-14),分享一句谚语 “积累知识、胜过积蓄金银” 。分享给大家的是 「工具 模块」- siege API 性能测试。

    八点半的Bruce、D
  • mysql 慢查询,你操作的对吗?

    MySQL 慢查询,全称 慢查询日志 ,它是 MySQL 提供的一种日志记录,用了记录在 MySQL 中响应时间超过阈值的语句。

    八点半的Bruce、D
  • 如何设置PDF全屏动画?PDF怎么全屏放映

    如何给PDF文件设置全屏动画?顾名思义全屏动画及时文件在全屏的状态下进行页面的切换或者展示一些其他的特效,这样的文件其实能够有效的吸引读者的眼球。

    用户5843321
  • ThreeJS实现船行效果

    解决方法: 官方提供了射线捕获的接口 raycaster.intersectObjects, 但是只能识别自建的Mesh模型, 对于导入的模型则无法捕获, 主...

    治电小白菜
  • webpack多页面开发与懒加载hash解决方案

    本文内容只适用于webpack v1版本,webpack v2已经修复了hash计算规则。 之前讨论了webpack的hash与chunkhash的区别以及各...

    寒月十八
  • javascript实现background 定时循环随机背景图

    这里用的固定地址,用的新浪图床,喜欢的话可以自己扩充图片,我这里简短的展示了10个图片!

    周俊辉
  • javascript实现background 定时循环随机背景图

    这里用的固定地址,用的新浪图床,喜欢的话可以自己扩充图片,我这里简短的展示了10个图片!

    V站CEO-西顾
  • 手把手搭建生产可用的Nacos集群

    本节详细探讨如何搭建一个生产可用的Nacos集群。讨论的内容主要包括:使用MySQL作为存储持久化数据,以及如何搭建Nacos集群。

    用户1516716
  • Springboot2.0教程(13)

    上面的所有Spring配置都是通过一个名为auto-configuration的过程添加Boot web starter来自动包含的。

    java进阶架构师

扫码关注云+社区

领取腾讯云代金券