增量备份和恢复<1>

来源:互联网 发布:淘宝客服快递快捷短语 编辑:程序博客网 时间:2024/06/05 07:44

Point-in-Time (Incremental) Recovery Using the Binary Log 基于时间点使用Binary log的增量恢复

7.5.1 Point-in-Time Recovery Using Event Times 使用Event Times 基于时间点恢复
7.5.2 Point-in-Time Recovery Using Event Positions 使用Event Positions 基于时间点恢复

基于时间点的恢复把服务器带到全备份后最近的时间:

根据这些原则的时间恢复点:

1.时间点恢复的数据源是通过binary log 文件产生的增量数据,因此 server必须带–log-bin选项来启用binlog.

从binary log 恢复数据,你必须知道当前binlog 文件的名字和位置。默认, server 创建binary log 在data目录,

路径名字可以通过–log-bin选项制定,把文件放在不同的位置。

列出所有的binary log 文件,使用语句:
mysql> SHOW BINARY LOGS;
+——————+———–+
| Log_name | File_size |
+——————+———–+
| mysql-bin.000001 | 260861478 |
| mysql-bin.000002 | 143 |
| mysql-bin.000003 | 1717 |
| mysql-bin.000004 | 430 |
| mysql-bin.000005 | 120 |
+——————+———–+
5 rows in set (0.18 sec)

查看当前的binary log文件,执行下面的语句:

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000005 | 120 | | | |
+——————+———-+————–+——————+——————-+
1 row in set (0.02 sec)

1.mysqlbinlog 功能 转换binary log 文件里的events 从2进制的格式转为text,可以查询和被执行。

mysqlbinlog 有选项用于选择binary log 的章节基于evnet times 或者evnets posistion

2.执行binary log 的events 的数据修改 表示 要重做,这个可以在给定的时间范围内的数据变化的恢复,

从二进制日志执行事件,使用MySQL客户端程序mysqlbinlog输出,从binary log 执行events 使用:

shell> mysqlbinlog binlog_files | mysql -u root -p

3.查看日志内容可以使有用的,当你需要确定event times 或者位置来选择部分的log 内容,查看log的events,

发送mysqlbinlog的输出到一个分页程序

shell> mysqlbinlog binlog_files | more

另外,将输出保存在文件中,并在文本编辑器中查看该文件

shell> mysqlbinlog binlog_files > tmpfile
shell> … edit tmpfile …

4.保存在文件中的输出是有用的, 作为一个初步的执行日志内容,比如意外的DROP DATABASE.你可以删除文件中的任何语句

不被执行, 编辑文件后,执行如下内容:

shell> mysql -u root -p < tmpfile

如果你有多个binary log 要执行,最安全的方式是使用一个单独的连接,下面是一个例子,演示了什么可能是不安全的

shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell> mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

使用不同的连接处理2进制文件会导致文件 ,如果第一个log 文件包含一个CREATE TEMPORARY TABLE 语句,

第2个日志包含到了一个使用临时表的语句,会导致问题。当第一个mysql 进程终止, server 删除临时表,

第2个mysql进程尝试使用表,server 报告”unkown table”

为了避免类似的问题,使用一个连接来执行你想处理的所有二进制日志的内容。这是一个这样做的方法:

0 0