mysql数据库通过binlog还原数据_mysql数据库通过binlog日志进行数据恢复

短命女 2022-10-27 13:58 89阅读 0赞

mysql数据库通过binlog日志进行数据恢复

1.需要开启binlog日志

# vim my.cnf 配置如下选项,重启数据库,让数据库生成我们需要的binlog日志

server-id = 206

log-bin = mysql-bin

expire_logs_days = 10

binlog_format = row

2.创建测试数据

mysql> create database itpart;

mysql> use itpart;

mysql> create table users(id int auto_increment primary key, name varchar(200));

# 插入数据

mysql> insert into users(name) values(‘jack’),(‘tom’),(‘lily’),(‘lucy’);

mysql> select * from users;

+——+———+

| id | name |

+——+———+

| 1 | jack |

| 2 | tom |

| 3 | lily |

| 4 | lucy |

+——+———+

mysql> show master status;

+—————————+—————+———————+—————————+—————————-+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+—————————+—————+———————+—————————+—————————-+

| mysql-bin.000001 | 835 | | | |

+—————————+—————+———————+—————————+—————————-+

# 查看binlog日志的文件

mysql> show binary logs;

+—————————+—————-+

| Log_name | File_size |

+—————————+—————-+

| mysql-bin.000001 | 835 |

3.删除表,然后通过binlog进行数据恢复

drop table users;

# 查看binlog日志中记录的内容

# cd /var/lib/mysql

# gtid模式查看需要加参数 —base64-output=DECODE-ROWS -v

# mysqlbinlog —base64-output=DECODE-ROWS -v —start-position=0 —stop-position=835 mysql-bin.000001

[root@server01 mysql]# mysqlbinlog —base64-output=DECODE-ROWS -v —start-position=0 —stop-position=835 mysql-bin.000001

mysqlbinlog: [Warning] option ‘start-position’: unsigned value 0 adjusted to 4

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#201103 16:50:14 server id 206 end_log_pos 123 CRC32 0xaa4b8247 Start: binlog v 4, server v 5.7.31-log created 201103 16:50:14 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

# at 123

#201103 16:50:14 server id 206 end_log_pos 154 CRC32 0xb3c39630 Previous-GTIDs

# [empty]

# at 154

#201103 16:51:07 server id 206 end_log_pos 219 CRC32 0x617069ad Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=no

SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/*!*/;

# at 219

#201103 16:51:07 server id 206 end_log_pos 319 CRC32 0x1bef97c7 Query thread_id=12 exec_time=0 error_code=0

SET TIMESTAMP=1604393467/*!*/;

SET @@session.pseudo_thread_id=12/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=1436549152/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8mb4 *//*!*/;

SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

create database itpart

/*!*/;

# 从此处开始是我们插入表的操作

# at 319

#201103 16:51:41 server id 206 end_log_pos 384 CRC32 0x9236a8ba Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no

SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/*!*/;

# at 384

#201103 16:51:41 server id 206 end_log_pos 534 CRC32 0xd068dcb2 Query thread_id=12 exec_time=0 error_code=0

use `itpart`/*!*/;

SET TIMESTAMP=1604393501/*!*/;

create table users(id int auto_increment primary key, name varchar(200))

/*!*/;

# at 534

#201103 16:52:54 server id 206 end_log_pos 599 CRC32 0x7ac60d6f Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=yes

/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/*!*/;

# at 599

#201103 16:52:54 server id 206 end_log_pos 673 CRC32 0x529cfe02 Query thread_id=12 exec_time=0 error_code=0

SET TIMESTAMP=1604393574/*!*/;

BEGIN

/*!*/;

# at 673

#201103 16:52:54 server id 206 end_log_pos 726 CRC32 0xd98193ed Table_map: `itpart`.`users` mapped to number 109

# at 726

#201103 16:52:54 server id 206 end_log_pos 804 CRC32 0x8b2d79ca Write_rows: table id 109 flags: STMT_END_F

### INSERT INTO `itpart`.`users`

### SET

### @1=1

### @2=’jack’

### INSERT INTO `itpart`.`users`

### SET

### @1=2

### @2=’tom’

### INSERT INTO `itpart`.`users`

### SET

### @1=3

### @2=’lily’

### INSERT INTO `itpart`.`users`

### SET

### @1=4

### @2=’lucy’

# at 804

#201103 16:52:54 server id 206 end_log_pos 835 CRC32 0xc09cc5e4 Xid = 108

COMMIT/*!*/;

SET @@SESSION.GTID_NEXT= ‘AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;

DELIMITER ;

# End of log file

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

4.使用binlog日志对mysql的数据库进行恢复操作

mysqlbinlog —start-position=319 —stop-position=835 —database=itpart /var/lib/mysql/mysql-bin.000001 | /usr/bin/mysql -uroot -p密码 -v itpart

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读