如何在MySQL中备份数千兆字节的数据库?奖励积分可加快还原速度


11

我在MySQL中有一个4GB的数据库。我该如何备份?此外,是否有一种方法可以在需要恢复时加快恢复过程?

目前,我每天晚上都使用cron作业,该作业会调用mysqldump所有内容,并且保留3天的备份。

Answers:


14

MySQL中大约有90 GB,因此有一些建议:

  • 您可以尝试以下呼叫:(mysqldump -u USER -pPASS --single-transaction -Q --databases foo bar使用文档检查这些开关是否对您有用。)
  • 如果仅使用MYISAM表,则也可以将数据库复制到另一个驱动器并对其进行压缩。但是,这将无法与INNODB一起使用,因为它会保留一个附加文件。另外,您必须仔细测试。
  • 启用二进制日志,然后备份它们。(这可能是我的最爱!)
  • 设置复制并在其中一个从属服务器上进行备份,然后使其跟上其余的。它在运行时非常不错,但是问题是要使其运行。使用MySQL复制并不有趣。:(
  • 您的文件系统是否支持快照?如果确实如此,那么这就是使用它们的绝佳机会。
  • 使用商业解决方案,例如Amanda

10

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

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

我认为Stop + Copy文件机制是最快的。


3

如果您的某些数据库是只读的或已修改,则很少将其作为频率较低的cron列出。


2

要回答您的问题,extended_insert选项对我很有用。如果您有足够的资源进行还原,则extended_insert将在单个查询中插入大量数据,从而使还原速度更快。


1

您应该真正考虑Percona的Xtrabackup

包装脚本“ innobackupex”可以处理MyISAM,但对于非锁定/在线备份,您的表应全部为InnoDB。

干杯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.