mysql 导入数据太慢,来教你实用干货
Hello 各位 ,我是公号「八点半技术站」的创作者 - Bruce.D (姓氏:豆)。
感谢微信给予的个人认证,专注于PHP、数据库技术领域知识经验分享。
技术的交流、不仅仅限制于阅读,在此
简介: Hello 各位 ,我是公号「八点半技术站」的创作者 - Bruce.D (姓氏:豆)。 感谢微信给予的个人认证,专注于PHP、数据库技术领域知识经验分享。 技术的交流、不仅仅限制于阅读,在此欢迎各路大神、小白,来「wx技术群」分享自己的编程经验心得 与 技术实战干货。 概述: 本篇讲解:如何快速导入由逻辑备份产生的SQL脚本,其他文件形式暂不讲解。 日常开发中,大家肯定遇到过这些需求:“ 数据迁移、数据恢复、新建从库 ” 等等一系列任务,因为做这些需求我们肯定知道,会涉及到 大量的数据 的处理。 大量的数据,会导致我们处理数据进度有时会很慢很慢,那么我们总得找一些方案来解决,对吧。 其实,这也是有一些小技巧的,可以大大增加我们数据的处理速度,那么就开始吧~~~ 小技巧- 方案一 开场先注意:导出 或 导入数据,尽可能的使用 MySQL 自带命令工具 ,不要使用一些图形化的工具 (Navicat...)。因为 MySQL 命令行工具至少要比图形化工具快 2 倍 。 命令工具行方式:
小技巧 - 方案二 修改参数方式: 在 MySQL 中,有这么一对参数很有意思,分别是:
安全性考虑,这个参数默认是 1 ,为了快速导入sql 数据,可临时修改默认参数值。
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设置为 2MySQL 导入数据,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
当sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。 当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。 注意:这两个参数可以在线修改,若想快速导入,可按照以下命令行
小技巧 - 方案三 这种场景也很熟悉,就是新建从库,并且不需要生成 binlog 日志。 解决方式很简单,在 sql 脚本开头增加:
然后继续执行导入,这样速度也会加快。(如MySQL没开启binlog,则无需执行该语句) 到这里也就结束了,首先恭喜你又阅读完一篇文章,如果你认为有收获那么收藏转发起来,帮助需要的伙伴。 方案方式很多,就看你是否越意去研究、去发现,欢迎评论区留言~~~ 往下拉,有干货 和我再战 n+1天 同时,为了方便大家学习,我会把一些源码、技术干货存储到 github 中,随时可以在微信群 进行交流,扫下面二维码 ,备注“技术进群” 就可以通过审核。 进群的小伙伴请加右侧私人微信(备注:技术进群) ----投稿分隔线---- (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |