导入大型mysql数据库备份的最快方法是什么?
作者:互联网
使用innodb表导出/导入mysql数据库的最快方法是什么?
我有一个生产数据库,我经常需要下载到我的开发机器来调试客户问题.我们目前这样做的方法是下载我们的常规数据库备份,这些备份是使用“mysql -B dbname”生成的,然后是gzip.然后我们使用“gunzip -c backup.gz | mysql -u root”导入它们.
从我从“mysqldump –help”读取的内容可以看出,mysqldump默认情况下会运行-opt,看起来它会打开一些我能想到的可以使导入更快的东西,例如关闭索引并将表导入为一个大型导入语句.
有没有更好的方法来做到这一点,或者我们应该做进一步的优化?
注意:我主要想要优化将数据库加载到我的开发机器上的时间(一个相对较新的macbook pro,有很多内存).备份时间和网络传输时间目前不是大问题.
更新:
回答答案中提出的一些问题:
>生产数据库架构每周最多更改几次.我们正在运行rails,因此在陈旧的生产数据上运行迁移脚本相对容易.
>我们需要每天或每小时将生产数据放入开发环境中.这完全取决于开发人员的工作内容.我们经常遇到特定的客户问题,这些问题是分布在数据库中的许多表中的一些数据的结果,需要在开发环境中进行调试.
>老实说,我不知道mysqldump需要多长时间.不到2小时,因为我们目前每2小时运行一次.但是,这不是我们想要优化的,我们希望优化导入到开发人员工作站上.
>我们不需要完整的生产数据库,但分离我们做什么和不需要的东西并不是完全无关紧要的(有很多表与外键关系).这可能是我们最终必须走的地方,但如果可以的话,我们希望避免它延长一段时间.
解决方法:
这取决于你如何定义“最快”.
正如Joel所说,开发人员的时间很昂贵. Mysqldump可以处理和处理您自己必须处理的大量案例,或花时间评估其他产品以查看它们是否处理它们.
相关问题是:
您的生产数据库架构多久更改一次?
注意:我指的是添加,删除或重命名表,列,视图等,即会破坏实际代码的内容.
您多久需要将生产数据放入开发环境中?
根据我的经验,根本不是经常.我一般发现每月一次就足够了.
mysqldump需要多长时间?
如果它不到8小时就可以在一夜之间完成作为一项计划工作.问题解决了.
你需要所有的数据吗?
另一种优化方法是简单地获取相关的数据子集.当然,这需要编写自定义脚本以获取实体和所有相关相关实体的子集,但会产生最快的最终结果.该脚本还需要通过架构更改来维护,因此这是一个耗时的方法,应该用作绝对的最后手段.生产样本应足够大,以包含足够广泛的数据样本,并识别任何潜在的性能问题.
结论
基本上,只要你绝对不能使用mysqldump.花时间在另一个解决方案上的时间不是花在开发上.
标签:mysql,backup,database-backups 来源: https://codeday.me/bug/20190622/1260484.html