方法可以在任意时间将数据库恢复到其状态二进制日志备份中包含的文件。该过程假设满足以下条件:
备份的MySQL服务器已经启用了二进制日志记录。要检查这个条件是否满足,在服务器上执行以下查询:
mysql>显示“log_bin”变量+---------------+-------+ | Variable_name |值 | +---------------+-------+ | log_bin |上 | +---------------+-------+ 1行集(0.00秒)
已经为服务器创建了一系列备份,通常由一个完全备份和一系列增量备份组成。该系列中的最后一个备份涵盖了恢复的目标时间点。下面的示例说明了这样一个典型案例。
您所执行的备份系列中的最后一个备份本身包含相关的二进制日志文件。(为了确保满足这个需求,在创建备份时不要使用以下MySQL Enterprise Backup选项:
——skip-binlog
,——use-tts
,——无固定
,或——start-lsn
.)
以下是实时恢复的步骤:
将备份系列还原到服务器,但系列中的最后一个增量备份除外(它涵盖了恢复的目标时间点)。完成后,注意您将服务器恢复到的二进制日志位置。这些信息可以从
backup_variables.txt
服务器恢复数据目录中的文件:查找条目的值binlog_position
在文件中。例如:binlog_position = binlog.000012:426
这意味着在恢复备份系列之后,服务器现在位于二进制日志文件中的日志位置426
binlog.000012
.您稍后将需要这些信息。请注意虽然恢复后的最后一个二进制日志位置也会被InnoDB显示出来,但这并不是获取恢复的结束日志位置的可靠方法,因为在显示的位置反映的时间之后可能会发生DDL事件和非InnoDB更改。
从备份系列中的最后一个增量备份(即覆盖恢复目标时间点的备份)中提取二进制日志。方法将增量备份映像解压缩到备份目录中
image-to-backup-dir
命令;例如:Mysqlbackup——backup-dir=incr-backup-dir2——backup-image=incremental_image2。bi image-to-backup-dir
接下来,进入生成的备份目录(
incr-backup-dir2
在本例中),在里面的data目录下,找到二进制日志文件[s] (binlog.000012
在这个例子中):Incr-backup-dir2 $ ls datadir binlog。000012 ibbackup_logfile mysql pets undo_002…
前滚数据库到用于恢复的目标时间点(标识为)的状态
tR
在本例中,使用二进制日志最后一步提取的文件。然后,使用mysqlbinlog工具,向服务器重放记录在二进制日志file[s],从上面步骤1中服务器已经恢复到的日志位置(在我们的例子中是426)一直到时间tR
.方法指定要重播的二进制日志事件的范围——起始位置
选项和——停止位置
选项(表示对应的二进制日志位置tR
),并将输出管道到mysql客户:mysqlbinlog——起始位置= "binary-log-position-at-the-end-of-backup-restores\——stop-position="binary-log-position-corresponding-to-tR" \binary-log-filename| mysql -uadmin -p
笔记使用
——start-datetime
或——stop-datetime
选项指定要重播的二进制日志段范围,不建议使用该选项:使用该选项时,丢失二进制日志事件的风险较高。使用——起始位置
而且——停止位置
代替。如果您的增量备份中有多个二进制日志文件,并且它们都需要将服务器恢复到它的状态
tR
,你需要在一个单一的连接中管道所有它们到服务器;例如:Mysqlbinlog——start-position="426"——stop-position="binary-log-position-corresponding-to-tR\ binlog。000012 binlog。000013 binlog。000014 | mysql -u admin -p
您还可以转储所有的mysqlbinlog首先输出到单个文件,然后将文件传输或播放到mysql客户端。
有关使用二进制日志进行时间点恢复的更多说明,请参见时间点(增量)恢复.
检查服务器是否已恢复到所需的时间点。