用xtrabackup+binlog恢复误删除的数据库

关键技术,数据库产生的二进制文件,在主库就是binlog在从库就是relay-log,用最新的物理备份可以新启动个新实例,可以模拟个从库,把主库的binlog复制到新的数据库实例上,用sql_thread去同步备份倒误操作前的binlog
具体操作命令如下:
环境:
192.168.214.89  生产库
192.168.214.90  新数据库
 
1、在192.168.214.89上物理备份
innobackupex  --defaults-file=/application/mysql56/etc/my.cnf   --no-timestamp --user=root --password=123456 --host=192.168.214.89 --port=5621 --parallel=5    /data0/bak/full56
2、在192.168.214.89上多创建几个表,模拟业务增量
mysql> use employees;
 
mysql> create table employees_test as select * from employees;
Query OK, 300024 rows affected (7.18 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> insert into employees_test select * from employees_test;
Query OK, 300024 rows affected (5.19 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> insert into employees_test select * from employees_test;
Query OK, 600048 rows affected (7.97 sec)
Records: 600048  Duplicates: 0  Warnings: 0
 
#模拟binlog日志切换
mysql> flush logs;
Query OK, 0 rows affected (0.80 sec)
 
 
mysql> insert into employees_test select * from employees_test;
Query OK, 1200096 rows affected (25.22 sec)
Records: 1200096  Duplicates: 0  Warnings: 0
 
mysql> create table employees_test1 as select * from employees_test;
Query OK, 2400192 rows affected (59.35 sec)
Records: 2400192  Duplicates: 0  Warnings: 0
 
mysql> create table employees_test2 as select * from employees;
Query OK, 300024 rows affected (9.20 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> create table employees_test3 as select * from employees;
Query OK, 300024 rows affected (10.78 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> create table employees_test4 as select * from employees;
Query OK, 300024 rows affected (11.17 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
 
mysql> flush logs;
Query OK, 0 rows affected (0.49 sec)
 
mysql> create table employees_test5 as select * from employees;
Query OK, 300024 rows affected (10.67 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> flush logs;
Query OK, 0 rows affected (0.18 sec)
 
mysql> create table employees_test6 as select * from employees;
Query OK, 300024 rows affected (9.42 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> flush logs;
Query OK, 0 rows affected (0.31 sec)
 
mysql> create table employees_test7 as select * from employees;
Query OK, 300024 rows affected (8.83 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
mysql> create table employees_test8 as select * from employees;
Query OK, 300024 rows affected (9.83 sec)
Records: 300024  Duplicates: 0  Warnings: 0
 
 
查看数据库一共有多少个表
mysql> show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| employees_test      |
| employees_test1     |
| employees_test2     |
| employees_test3     |
| employees_test4     |
| employees_test5     |
| employees_test6     |
| employees_test7     |
| employees_test8     |
| salaries            |
| titles              |
+---------------------+
15 rows in set (0.00 sec)
 
mysql> drop database employees;
Query OK, 15 rows affected (4.00 sec)
 
为了查找方便,误操作后切换日志
mysql> flush logs;
Query OK, 0 rows affected (0.35 sec)
 
3、恢复备份文件
innobackupex  --defaults-file=/application/mysql56/etc/my.cnf   --no-timestamp --user=root --password=123456 --host=192.168.214.89 --port=5621 --parallel=5  --apply-log  /data0/bak/full56
 
4、在192.168.214.90上新安装个MySQL实例,启动新的MySQL实例,看启动是否成功,有异常的话,看错误日志解决,关闭MySQL数据库
 
5、把89恢复完的备份文件scp到90新安装的MySQL实例的数据目录下,启动数据库,让90成为一个从库
mysql> CHANGE MASTER TO   MASTER_HOST='192.168.1.88';   # MASTER_HOST可以随便指定
 
完了关闭数据库
 
 
6、把89的binlog文件scp到90新安装的MySQL实例的数据目录下,删除相关的文件,启动数据库
# scp  mysql-bin.*  192.168.214.90:/data0/mysql/mysql56/var
# rm -rf mysql-bin.index
# rename mysql-bin relay-log mysql-bin.*
# ls ./relay-log.0* > relay-log.index
 
7、在主库上解析误操作前的binlog信息
# /application/mysql56/bin/mysqlbinlog mysql-bin.000042 > /tmp/42.sql
 
vi /tmp/42.sql
 
。。。。。。。。。。。。。。。。。。
# at 16494555
#181026  9:28:38 server id 19289  end_log_pos 16494586 CRC32 0xedfa848b         Xid = 11451753
COMMIT/*!*/;
# at 16494586
#181026  9:29:55 server id 19289  end_log_pos 16494693 CRC32 0x8c072efe         Query   thread_id=3816657       exec_time=4     error
_code=0
SET TIMESTAMP=1540517395/*!*/;
drop database employees
/*!*/;
。。。。。。。。。。。。。。。。。
 
7、查看备份时候的binlog信息
# cat xtrabackup_binlog_pos_innodb
mysql-bin.000039        32987250
 
8、在90上做恢复
mysql> change master to relay_log_file='relay-log.000039',relay_log_pos=32987250;
Query OK, 0 rows affected (0.05 sec)
 
mysql> START SLAVE until RELAY_LOG_FILE = 'relay-log.000042', RELAY_LOG_POS = 16494555;
Query OK, 0 rows affected (0.04 sec)
 
查看验证表是否恢复正确
mysql> use employees;
Database changed
mysql> show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| employees_test      |
| employees_test1     |
| employees_test2     |
| employees_test3     |
| employees_test4     |
| employees_test5     |
| employees_test6     |
| employees_test7     |
| employees_test8     |
| salaries            |
| titles              |
+---------------------+
15 rows in set (0.00 sec)
 
再把employees数据库备份出来导入到192.168.214.89上

猜你喜欢

转载自www.cnblogs.com/manger/p/9855993.html