如何备份MySQL数据库?

hks*_*esh 4 mysql database backup database-backups

备份数百万条目的数据库时,我需要考虑什么?我可以使用任何工具(可能与MySQL服务器捆绑在一起)吗?

Han*_*etz 7

根据您的要求,我自己使用了几个选项:

  • 如果您不需要热备份,请关闭数据库服务器并备份文件系统级别,即使用tar,rsync或类似方法.
  • 如果确实需要数据库服务器继续运行,可以从mysqlhotcopy工具(perl脚本)开始,该工具锁定正在备份的表,并允许您选择单个表和数据库.
  • 如果你希望备份是可移植的,你可能想要使用mysqldump,它创建SQL脚本来重新创建数据,但是比mysqlhotcopy慢
  • 如果你在某个时间点有一个db的副本,你也可以保持binlogs(从那个时间点开始)安全的地方.这可以非常容易,并且不会干扰服务器的操作,但可能不是最快的恢复,并且您必须确保不要错过部分日志.

方法我没试过,但这对我有意义:

  • 如果您有像ZFS这样的文件系统或者在LVM上运行,那么通过执行文件系统快照来创建数据库快照可能是个好主意,因为它们非常非常快.只需记住在整个操作过程中确保数据库的一致状态,例如通过执行FLUSH TABLES WITH READ LOCK(当然,UNLOCK TABLES之后不要忘记)

另外:

  • 您可以使用主从设置将生产服务器复制到同一台计算机上的其他计算机或第二个实例,并对复制的副本执行上述任何操作,从而使您的生产计算机保持独立.您也可以定期启动从站,让它读取binlog,然后再将其关闭,而不是连续运行.
  • 我认为,MySQL集群和企业许可版本有更多的工具,但我从未尝试过.


Mor*_*ker 5

Mysqlhotcopy描述得很糟糕 - 只有在使用MyISAM时它才有效,并且它不热.

mysqldump的问题是恢复备份所需的时间(但如果您拥有所有InnoDB表,则可以使其变热,请参阅--single-transaction).

我建议使用热备份工具,例如XtraBackup中提供的工具:http://www.percona.com/docs/wiki/percona-xtrabackup:start