Answers:
进行MySQL服务器备份的最佳做法:
在MySQL中设置复制。您将必须设置主服务器和从属服务器。对数据库的所有读写都可以发送到您的从服务器。复制的优点是您可以在不中断主服务器的情况下从从服务器进行备份,您的应用程序将继续在主服务器上工作,而不会造成任何停机。
如果您的数据集很小(我意识到“ small”是一个相对术语,请使用<10GB),那么mysqldump可能会很好用。这很容易,它在线并且非常灵活。mysqldump可以做的只有几件事:备份所有内容,或者仅备份某些数据库或表,仅备份DDL优化转储以加快恢复速度,从而使生成的sql文件与其他RDBMS更加兼容。
但是,最重要的选项与备份的一致性有关。我最喜欢的选项是:--single-transaction:如果(且仅当)表使用InnoDB存储引擎时,此选项提供一致的备份。如果您有任何非只读MyISAM表,则在备份它们时不要使用此选项。--master-data = 2:此选项将确保您的转储是一致的(通过执行所有表锁定,除非您添加了--single-transaction选项)。--master-data选项还会在生成的转储文件中记录二进制日志位置(= 2导致此行成为转储文件中的注释)
关于mysqldump的最后说明:请记住,还原时间可能比备份时间长得多。这将取决于几个因素,例如,您有多少个索引。
对于具有较大数据集的数据库,物理备份是必经之路。尽管您可以进行冷备份(例如,关闭MySQL服务,复制数据目录,重新启动服务),但许多人不希望停机。我最喜欢的解决方案是快照。这可能很热(对于InnoDB),或者需要短暂的锁定(对于MyISAM)。不要忘记包括所有数据(包括ib_logfiles)。Lenz提供了一个很好的实用程序来帮助解决此问题:http : //www.lenzg.net/mylvmbackup/
使用MySQL企业备份的优势:
参考:http : //www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html
我建议设置专用副本以用于备份。这将使您执行任何备份任务,而不会影响主数据库。由于这确实增加了体系结构的复杂性,因此您将需要监视复制延迟,以确保一切正常。
至于实际过程,您有几个选项没有任何第三方工具。快照可以通过采取mysqldump
命令(假设你使用的是InnoDB) mysqldump --all-databases --single-transaction > all_databases.sql
。根据数据大小,最好关闭MySQL并直接备份数据文件。重新启动副本后,它将重播主服务器在关闭期间收到的所有事件。如果您使用的是MySQL Enterprise,则mysqlbackup
实用程序会执行此操作。
可以通过在副本服务器上启用二进制日志来进行增量备份。显然,这仅记录使数据发生突变的事件,因此您需要将其与上面的快照结合起来。
--single-transaction
但不要忘记添加,即使在默认情况下启用--events --routines
,我也总是使用+1--triggers
,因为可以在my.cnf中将其禁用。我要说的是,无论您当前是否在数据库中拥有这些类型的对象,将它们用作标准实践总是非常好的。