您的位置 首页 数据库

通过日志 binlog 日志进行数据恢复 简单情况

通过日志 binlog 日志进行数据恢复 相关案例

1 数据库数据异常恢复(简单情况)

在实际生成环境中,可以利用binlog日志记录的信息截取,实现数据库异常情况下的数据信息恢复功能;

数据库异常恢复情况环境准备:

# 切换新的binlog日志文件做模拟数据恢复
mysql> flush logs;
Query OK, 0 rows affected (0.03 sec)
mysql> show master status;
+------------------+------------+------------------+-----------------------+-------------------------+
| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+------------+------------------+-----------------------+-------------------------+
| binlog.000003 |          156 |                          |                                 |                                  |
+------------------+------------+------------------+-----------------------+-------------------------+
1 row in set (0.01 sec)
-- 确认已经刷新生成了新的binlog日志文件;

# 进行基本的数据库SQL语句操作:
mysql> create database bindb;
mysql> use bindb;
mysql> create table t1 (id int);
mysql> begin;
mysql> insert into t1 values(1);
-- 在没有进行事务提交前,操作的事务事件信息,是不会出现在binlog事件日志中的
mysql> commit;
-- 对于数据库的binlog日志,只会记录事务已经提交的DML语句信息,没有提交的DML语句是不会进行记录的;
-- 在日志中变化的DML语句信息是无法识别的,因为记录DML操作的语句默认是以ROW模式记录的;

数据库二进制日志信息查看方法:

[root@xiaoq ~]# mysqlbinlog /data/3306/data/binlog.000003
-- 对于数据库binlog日志信息,是无法直接查看内容信息,需要利用相关命令工具进行查看

 

binlog日志内容中主要关注的信息:

通过日志信息查看DDL操作语句信息(记录方式 SBR)

通过日志信息查看DML操作语句信息(记录方式 RBR)

 

以上ROW模式记录的信息是加密显示,无法直接查看的,可以使用下面命令参数进行获取详细信息:

[root@xiaoq ~]# mysqlbinlog --base64-output=decode-rows -vvv /data/3306/data/binlog.000003 
-- 以上添加的参数信息,表示将DML的ROW格式语句信息,进行格式化处理输出;
# at 739
#221121 13:17:45 server id 1  end_log_pos 779 CRC32 0xb468b459 	Write_rows: table id 101 flags: STMT_END_F
### INSERT INTO `bindb`.`t1`
-- 利用DML语句做的插入语句信息就显示出来了
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
-- 以上日志记录的信息,可以用命令实现,如下:
mysql > insert into t1 set id=1;
等价于
mysql > insert into t1 values(1);

数据库模拟异常情况破坏操作:

mysql> drop database bindb;
-- 模拟破坏性操作,删除数据库

数据库异常情况数据恢复操作:

# 需要恢复建库开始,删除之前的所有操作(即所有binlog日志信息),实现日志信息的截取
mysql> show binlog events in 'binlog.000002';
-- 查看截取日志信息事件区域范围
[root@oldboyxiaoq ~]# mysqlbinlog --start-position=233 --stop-position=1162 /data/3306/data/binlog.000003 >/tmp/bin.sql
-- 依据binlog日志的position号码,即可获取到想要恢复数据信息;

# 根据截取的日志信息,进行数据库服务数据恢复
mysql> set sql_log_bin=0;
-- 建议在进行数据日志恢复数据时,将数据恢复时执行的SQL语句信息,不做binlog日志记录;
mysql> source /tmp/bin.sql

# 查看确认数据信息是否恢复
mysql> use bindb;
mysql> show tables;
mysql> select * from t1;

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章