相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 42.0 mb
PDF (A4)- 42.0 mb
手册页(TGZ)- 266.3 kb
手册页(Zip)- 376.1 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

7.3.1建立备份策略

为了有用,备份必须定期安排。完全备份(在某个时间点的数据快照)可以在MySQL中使用几个工具来完成。例如,MySQL企业备份可以执行物理备份对整个实例进行了优化,以最小化开销并避免备份时的中断InnoDB数据文件;, mysqldump提供在线逻辑备份.本讨论使用, mysqldump

假设我们把所有的InnoDB在周日下午1点,当负载较低时,使用以下命令在所有数据库中删除表:

$> mysqldump -all-databases -master-data -single-transaction > backup_sunday_1_PM.sql

由此产生的. sql文件由, mysqldump包含一组SQL插入稍后可用于重新加载转储表的语句。

此备份操作在转储开始时(使用用读锁刷新表).一旦获得了这个锁,就会读取二进制日志坐标并释放锁。时,如果长更新语句正在运行冲洗语句发出后,备份操作可能会暂停,直到这些语句完成。在此之后,转储变成无锁的,并且不影响对表的读写。

之前假设要备份的表是InnoDB表,因此——单独的事务使用一致的读取,并保证数据被, mysqldump不会改变。(其他客户端对InnoDB控件不会看到表, mysqldump过程。)如果备份操作包括非事务性表,一致性要求它们在备份期间不更改。例如,对于MyISAM中的表mysql数据库,在备份期间MySQL帐户不能有任何管理更改。

完全备份是必要的,但创建它们并不总是方便的。它们会生成大型备份文件,并且需要时间来生成。它们不是最优的,因为每次连续的完全备份都包括所有数据,甚至包括自上次完全备份以来没有更改的那部分数据。首先进行初始完全备份,然后再进行增量备份,这样效率更高。增量备份更小,生成时间更短。折衷之处在于,在恢复时,您不能仅通过重新加载完全备份来恢复数据。您还必须处理增量备份以恢复增量更改。

要进行增量备份,我们需要保存增量更改。在MySQL中,这些更改在二进制日志中表示,因此MySQL服务器应该总是以——log-bin选项,以启用该日志。启用二进制日志记录后,服务器在更新数据时将每个数据更改写入一个文件。查看已经运行了几天的MySQL服务器的数据目录,我们发现这些MySQL二进制日志文件:

-rw-rw---- 1 guilhem guilhem 1277324 11月10日23:59 gbichot2-bin。000001 -rw-rw---- 1 guilhem guilhem 4 11月10日23:59 gbichot2-bin。000002 -rw-rw---- 1 guilhem guilhem 79 11 11 11:06 gbichot2-bin。000003 -rw-rw---- 1 guilhem guilhem 508 11月11日11:08 gbichot2-bin。000004 -rw-rw---- 1 guilhem guilhem 220047446 11月12日16:47 gbichot2-bin。000005 -rw-rw---- 1 guilhem guilhem 998412 11月14日10:08 gbichot2-bin。000006 -rw-rw---- 1 guilhem guilhem 361 11月14日10:07 gbichot2-bin.index

每次重新启动时,MySQL服务器都会使用序列中的下一个数字创建一个新的二进制日志文件。在服务器运行时,您还可以告诉它关闭当前二进制日志文件,并通过发出命令手动开始一个新日志文件刷新日志SQL语句或使用mysqladmin flush-logs命令。, mysqldump还有一个刷新日志的选项。的.indexdata目录下的“data”文件中包含了该目录下所有MySQL二进制日志的列表。

MySQL二进制日志对于恢复非常重要,因为它们构成了增量备份集。如果确保在进行完全备份时刷新日志,则之后创建的二进制日志文件将包含自备份以来所做的所有数据更改。让我们修改一下前面的, mysqldump命令位,以便在完全备份时刷新MySQL二进制日志,以便转储文件包含新的当前二进制日志的名称:

$> mysqldump——single-transaction——flush-logs——master-data=2 \——all-databases > backup_sunday_1_PM.sql

执行此命令后,data目录将包含一个新的二进制日志文件,gbichot2-bin.000007,因为——flush-logs选项将导致服务器刷新其日志。的——主数据选择的原因, mysqldump将二进制日志信息写入其输出,从而得到. sql转储文件包括这些行:

——开始复制或时间点恢复的位置——CHANGE MASTER to MASTER_LOG_FILE='gbichot2-bin.000007',MASTER_LOG_POS=4;

因为, mysqldump命令做了完全备份,这些行意味着两件事:

  • 转储文件包含写入gbichot2-bin.000007二进制日志文件或更高文件。

  • 备份后记录的所有数据更改都不存在于转储文件中,但存在于gbichot2-bin.000007二进制日志文件或更高文件。

在周一下午1点,我们可以通过刷新日志来创建一个增量备份,以开始一个新的二进制日志文件。例如,执行一个mysqladmin flush-logs命令创建gbichot2-bin.000008.从周日下午1点完全备份到周一下午1点之间的所有更改都会写入gbichot2-bin.000007.这种增量备份非常重要,因此最好将其复制到安全的地方。(例如,将其备份到磁带或DVD上,或复制到另一台机器上。)周二下午1点,再执行一次mysqladmin flush-logs命令。周一下午1点到周二下午1点之间的所有更改都写入gbichot2-bin.000008(也应该复制到安全的地方)。

MySQL二进制日志会占用磁盘空间。为了腾出空间,要不时清除它们。一种方法是删除不再需要的二进制日志,例如当我们进行完全备份时:

$> mysqldump——single-transaction——flush-logs——master-data=2 \——all-databases——delete-master-logs > backup_sunday_1_PM.sql
请注意

删除MySQL二进制日志, mysqldump——delete-master-logs如果您的服务器是复制源服务器,可能会很危险,因为副本可能还没有完全处理二进制日志的内容。的描述。清除二进制日志语句解释了在删除MySQL二进制日志之前应该验证什么。看到13.4.1.1节“清除二进制日志语句”