我如何在MySQL中备份多千兆字节的数据库? 奖励积分加快恢复

我在MySQL中有一个4GB的数据库。 我该如何备份? 此外,如果我需要恢复的话,有没有办法可以加快恢复进程?

我目前每天晚上使用一个cron作业调用mysqldump来转储所有内容,并保留3天的备份。

我们在MySQL中有大约90 GB,所以这里有一些build议:

  • 您可以尝试以下调用: mysqldump -u USER -pPASS --single-transaction -Q --databases foo bar (使用文档检查这些开关是否适用于您。)
  • 如果仅使用MYISAM表,那么将数据库复制到另一个驱动器并打上它,也可能是另一种select。 这不会与INNODB工作,因为它保留了一个额外的文件。 另外,你必须仔细testing。
  • 启用二进制日志,并将其备份。 (这可能是我最喜欢的!)
  • 设置复制,并在你的一个奴隶做备份,然后让它赶上其余的。 它运行的时候相当不错,但是问题在于它正在运行。 复制对MySQL来说并不好玩。 🙁
  • 你的文件系统是否支持快照? 如果是这样,那么这是一个很好的机会来使用它们。
  • 使用商业解决scheme,如阿曼达 。

最好的方法是不中断正常的操作。 对于高可靠性的容错系统,您有2个数据库保持同步,并备份辅助数据库。 (如这篇howtoforge文章 )

否则,请阅读手册 :像现在这样使用myseldump,或者使用mysqlhotcopy脚本(就像使用mysqldump一样),或者停止数据库并简单地复制frm,MID,MYI文件(使用rsync)。

我认为stop + copy文件机制是最快的。

如果你的一些数据库是只读或者修改的,那么很less把它作为一个不太常用的cron。

要回答你的问题 – extended_insert选项适合我。 如果您有足够的资源进行恢复,那么extended_insert将在单个查询中插入大量数据,使恢复速度更快。

你应该考虑Percona的Xtrabackup

包装脚本“innobackupex”可以处理MyISAM,但对于非locking/在线备份,您的表应该都是InnoDB。

干杯