mysql如何从日志文件中恢复单库、单表、或者部分行数据信息
A计划:可以利用命令单独截取某个数据库的日志信息;mysqlbinlog -d world xxx > xxxx
B计划:可以借助第三方工具实现单表或部分数据恢复;binlog2sql(python)
过滤指定表数据或过滤指定表的部分数据;
实战操作:
数据库异常恢复情况环境准备:
# 查看获取当前binlog日志状态信息
mysql > show master status;
+------------------+-----------+-------------------+-----------------------+-------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+-------------------+-----------------------+-------------------------+
| binlog.000003 | 1269 | | | |
+------------------+-----------+-------------------+-----------------------+-------------------------+
# 进行基本的数据库SQL语句操作:
mysql> create database test1;
mysql> create table t1 (id int);
mysql> insert into t1 values(1);
mysql> insert into t1 values(2);
mysql> commit;
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
-- 创建了一个test1数据库,并在数据库中创建了一个表,在表中插入了一些数据信息
mysql> create database test2;
mysql> use test2;
mysql> create table t2 (id int);
mysql> insert into t2 values(1);
mysql> insert into t2 values(2);
mysql> commit;
-- 创建了一个test2数据库,并在数据库中创建了一个表,在表中插入了一些数据信息
mysql> use test1;
mysql> insert into t1 values(3);
mysql> insert into t1 values(4);
mysql> use test2;
mysql> insert into t2 values(3);
mysql> insert into t2 values(4);
mysql> commit;
mysql> select * from test1.t1;
mysql> select * from test2.t2;
-- 通过操作不同的数据库,以及不同的数据表,实现binlog日志事件信息的交叉
数据库模拟异常情况破坏操作:
mysql> drop database test1;
-- 模拟破坏性操作,删除数据库
数据库异常情况数据恢复操作:
# 根据日志信息查看相关的事件情况
mysql> show binlog events in 'binlog.000003';
# 需要恢复建库开始,删除之前的所有操作(即所有binlog日志信息),实现日志信息的截取
[root@oldboyxiaoq ~]# mysqlbinlog --start-position=1346 --stop-position=4116 -d test1 /data/3306/data/binlog.000003 >/tmp/bin.sql
-- 依据binlog日志的position号码,即可获取到想要恢复数据信息,并利用-d参数导出指定数据库相关数据;
# 根据截取的日志信息,进行数据库服务数据恢复
mysql> set sql_log_bin=0;
-- 建议在进行数据日志恢复数据时,将数据恢复时执行的SQL语句信息,不做binlog日志记录;恢复后别忘在改为1;
mysql> source /tmp/bin.sql
# 查看确认数据信息是否恢复
mysql> use test1;
mysql> show tables;
mysql> select * from t1;
-- 查看test1数据库中的t1表的数据信息是否恢复
mysql> use test2;
mysql> show tables;
mysql> select * from t2;
-- 查看test2数据库中的t2表的数据信息是否破坏
B计划:可以借助第三方工具实现单表或部分数据恢复;
欢迎来撩 : 汇总all