伙计,
我正在尝试设置一个包含InnoDB和MyISAM表的相当大的生产数据库(半场演出)的常规备份。到目前为止我一直在使用mysqldump,但我发现它需要越来越长的时间,并且当mysqldump运行时,服务器完全无响应。
我想问你的建议:我该如何
使mysqldump备份无阻塞 - 为进程或类似事项分配低优先级,或者
找到更好/更快/非阻塞的其他备份机制。
我知道MySQL企业备份产品(http://www.mysql.com/products/enterprise/backup.html)的存在 - 它很昂贵,而且这不是这个项目的选项。
我已经读过将第二台服务器设置为“复制从站”,但这对我来说也不是一个选项(这需要硬件,这需要花费$$)。
谢谢!
更新:有关我的环境的更多信息:Ubuntu,最新的LAMPP,Amazon EC2。
答案 0 :(得分:8)
如果无法复制到从属服务器,则可以利用文件系统,具体取决于您使用的操作系统,
我在一个相当大的MySQL数据库(30GB +)上使用ZFS快照作为备份方法,它很快就完成了(从不超过几分钟)并且不会阻塞。然后,您可以将快照安装在其他位置,然后将其备份到磁带等。
答案 1 :(得分:5)
编辑:(之前的回答是建议一个奴隶数据库备份,然后我注意到亚历克斯在他的问题中排除了这一点。)
假设硬件可以跟上,那么你的复制从设备无法在同一硬件上运行。获取源tarball ./configure --prefix=/dbslave; make; make install;
,你将有第二个完全位于/ dbslave下的mysql服务器。
EDIT2:复制还有许多其他好处。例如,在复制运行的情况下,您可能能够恢复binlog并在最后一次备份时重播它,以便在发生某些灾难后恢复额外的数据。
EDIT3 :你提到你在EC2上运行。保持成本降低的另一个有点人为的想法是尝试使用EBS卷设置另一个实例。然后使用AWS api将此实例旋转足够长的时间,以便赶上二进制日志中的写入,转储/压缩/发送快照,然后将其旋转下来。设置不是免费的,劳动密集型的,但比24x7实例运行要便宜得多。
答案 2 :(得分:2)
从maatkit(http://www.maatkit.org/)
尝试mk-parallel-dump实用程序的问候,
答案 3 :(得分:1)
您可能会考虑通过名为“日志传送”的方法在此处使用二进制日志。在每次备份之前,发出一个命令来刷新二进制日志,然后您可以通过常规文件系统操作复制除当前二进制日志之外的所有内容。
此方法的优点是您根本不会锁定数据库,因为当它按顺序打开下一个二进制日志时,它会释放先前日志中的所有文件锁,因此不应影响处理。 Tar'em,zip'em就位,随意做,然后将其作为一个文件复制到您的备份系统。
使用二进制日志的另一个好处是,如果日志可用,您可以恢复最多X个时间点。即您有去年的完整备份,以及从那时到现在的每个日志。但是你想看看2011年1月1日这个数据库是什么。你可以发布一个“恢复到2011-01-01”,当它停止时,就2011年1月1日而言,就数据库而言。
我不得不用这一次来扭转黑客造成的伤害。
绝对值得一试。
请注意......二进制日志通常用于复制。什么都没说你必须。
答案 4 :(得分:0)
添加 Rich Adams 和 timdev 已经建议,编写一个cron作业,在低使用率时触发执行从属任务,以避免高CPU利用率。
同时检查mysql-parallel-dump。