在使用Mysql数据库的过程中,经常需要用到备份和恢复数据库。最简单方便的方式就是通过导出SQL数据文件和导入SQL数据文件来完成备份和恢复,但是随着项目的增长,数据量越来越大,每次恢复都变得很头疼。最近在项目中拉下5GB的数据库,在本地恢复的时候,用了40-50分钟。想想以后的数据扩容,数据量越来越大,恢复成本越来越高,于是查了一些资料,你可以通过以下设置来提高你的恢复效率。1、更改备份参数首先,我们需要在备份数据库时通过更改参数来提高我们的恢复效率。mysqldump--extended-insertmysqldump--extended-insert参数表示批量插入,将多条insert语句合并为一条语句,与不启用-extended-insert的备份导入效率相差3-4倍。使用--extended-insert=false导出的sql文件数据是这样的,一行一条insert语句,执行效率很低。使用--extended-insert=true导出的表如下图所示。很长的insert语句会分批插入。2.调整MYSQL快速插入参数如果你的数据库存储引擎是MYISAM参数,你可以将这个参数设置为512M或者256M,MyISAM会使用一个特殊的树缓存来进行更快的批量插入。相关文档https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_bulk_insert_buffer_size默认值为8M=8388608byte查看insertbuffer的大小SHOWVARIABLESLIKE'%bulk%';设置插入缓冲区的大小(全局)SETGLOBALbulk_insert_buffer_size=1024*1024*512;设置插入缓冲区(会话)的大小SETbulk_insert_buffer_size=1024*1024*256;如果需要设置Mysql重启时保留的值,需要设置这个配置添加my.cnf[mysqld]bulk_insert_buffer_size=256M3。关闭检查项对于Innodb引擎,我们可以关闭一些系统检查项来实现更快的插入。//关闭自动提交SETautocommit=0;//关闭唯一性检查setunique_checks=0;//关闭外键检查SETforeign_key_checks=0;//备份时开启--extended-insert参数相关关于Innodb批量数据加载的文档:https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-bulk-data-loading.html4。实践中做了以上优化后,你的Mysql恢复效率会瞬间提升一个档次。以上参数不优化时,每次恢复数据库需要40分钟,设置好后只需要16分钟左右。我的数据库文件容量约为5GB。以上就是全部。如果Tiguan有更好的解决方案和建议,希望大家一起讨论,HappyCoding。
