mysql利用有gtid模式的binlog日志文件恢復數據


一、新建數據庫test_gtid,並在下面新建一個表test_gtid.並插入幾條測試數據

mysql> create database test_gtid CHARSET utf8;
Query OK, 1 row affected (0.01 sec)
mysql> create table test_gtid( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,  name VARCHAR(20) NOT NULL) ENGINE=INNODB CHARSET=utf8;
Query OK, 0 rows affected (0.11 sec)
mysql> insert into test_gtid(id,name)values(1,'andy');
Query OK, 1 row affected (0.02 sec) mysql> insert into test_gtid(id,name)values(2,'kevin'); Query OK, 1 row affected (0.03 sec) mysql> insert into test_gtid(id,name)values(3,'peter'); Query OK, 1 row affected (0.03 sec) mysql> 

二、刪除數據庫test_gtid

mysql> drop database test_gtid;
Query OK, 1 row affected (0.06 sec) mysql> 
mysql> show databases;
+--------------------------+
| Database                 |
+--------------------------+
| information_schema       |
| hl_central_sms_deduction |
| mysql                    |
| performance_schema       |
| sys                      |
| test                     |
+--------------------------+
6 rows in set (0.00 sec) mysql> 

三、查看binlog日志文件過濾"create database",並顯示上下文5行

[root@orderer run]# mysqlbinlog --base64-output=decode-rows -d test_gtid /home/mysql-5.7.26/data/master.000002|grep 'create database' -C 5
#200407 11:38:10 server id 69  end_log_pos 483 CRC32 0x122f6de5         GTID    last_committed=1        sequence_number=2       rbr_only=no SET @@SESSION.GTID_NEXT= '143c2270-3b22-11ea-9dea-14feb5dc2c77:2'/*!*/; # at 483 #200407 11:38:10 server id 69 end_log_pos 605 CRC32 0x4de1053c Query thread_id=5 exec_time=0 error_code=0 SET TIMESTAMP=1586230690/*!*/; create database test_gtid CHARSET utf8 /*!*/; # at 605 #200407 11:41:33 server id 69 end_log_pos 670 CRC32 0x99dd5b88 GTID last_committed=2 sequence_number=3 rbr_only=no SET @@SESSION.GTID_NEXT= '143c2270-3b22-11ea-9dea-14feb5dc2c77:3'/*!*/; # at 670 [root@orderer run]# 

可以看到create database test_gtid CHARSET utf8命令的gtid為143c2270-3b22-11ea-9dea-14feb5dc2c77:2

四、查看binlog日志文件過濾"drop database",並顯示上下文5行

[root@orderer run]# mysqlbinlog --base64-output=decode-rows -d test_gtid /home/mysql-5.7.26/data/master.000002 |grep "drop database" -C 5
WARNING: The option --database has been used. It may filter parts of transactions, but will include the GTIDs in any case. If you want to exclude or include transactions, you should use the options --exclude-gtids or --include-gtids, respectively, instead. #200407 11:44:33 server id 69 end_log_pos 2231 CRC32 0xa862ff44 GTID last_committed=8 sequence_number=9 rbr_only=no SET @@SESSION.GTID_NEXT= '143c2270-3b22-11ea-9dea-14feb5dc2c77:9'/*!*/; # at 2231 #200407 11:44:33 server id 69 end_log_pos 2338 CRC32 0xd4f9ce4b Query thread_id=5 exec_time=0 error_code=0 SET TIMESTAMP=1586231073/*!*/; drop database test_gtid /*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; [root@orderer run]# 

可以看到drop database語句的gtid為143c2270-3b22-11ea-9dea-14feb5dc2c77:9,那么利用gtid參數來截取恢復數據庫的日志文件內容

五、截取指定gtid區間為:"143c2270-3b22-11ea-9dea-14feb5dc2c77:2到143c2270-3b22-11ea-9dea-14feb5dc2c77:8"的binlog日志文件

[root@orderer run]# mysqlbinlog --skip-gtids --include-gtids='143c2270-3b22-11ea-9dea-14feb5dc2c77:2-8' -d test_gtid /home/mysql-5.7.26/data/master.000002 > /home/binlog_test_gtid.sql;

六、進入mysql,利用source 導入sql

mysql> source /home/binlog_test_gtid.sql;
Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Charset changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 1 row affected (0.02 sec) Database changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.09 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.05 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)

七、驗證結果

查看數據庫

mysql> show databases;
+--------------------------+
| Database                 |
+--------------------------+
| information_schema       |
| hl_central_sms_deduction |
| mysql                    |
| performance_schema       |
| sys                      |
| test                     |
| test_gtid                |
+--------------------------+
7 rows in set (0.00 sec)

已經恢復了test_gtid數據庫

mysql> use test_gtid;
Database changed
mysql> select * from test_gtid; +----+-------+ | id | name | +----+-------+ | 1 | andy | | 2 | kevin | | 3 | peter | +----+-------+ 3 rows in set (0.00 sec) mysql> 

查看數據表,數據恢復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM