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


    关键技术,数据库产生的二进制文件,在主库就是binlog在从库就是relay-log,用最新的物理备份可以新启动个新实例,可以模拟个从库,把主库的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    --parallel=5  --apply-log  /data0/bak/full56
     
    4、在192.168.214.90上新安装个MySQL实例,启动新的MySQL实例,看启动是否成功,有异常的话,看错误日志解决,关闭MySQL数据库
     
     
    5、把89恢复完的备份文件scp到90新安装的MySQL实例的数据目录下,启动数据库,让90成为一个从库
     
    # cd /data0/bak/full56
     
    # chown mysql:mysql * -R
     
    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信息
    # catxtrabackup_binlog_info
    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上
  • 相关阅读:
    Linux学习之二——档案与目录的属性和权限
    Linux学习之一——开机必备知识
    阿里云实战之二(mysql+phpmyadmin)
    阿里云实战之一(必备程序安装)
    简要揭秘在线代码编辑器
    磕磕碰碰的Chrome之plugin开发
    Oracle导出的sql执行出错
    Spring学习(八)
    Spring学习(七)
    Spring学习(六)
  • 原文地址:https://www.cnblogs.com/manger/p/9855993.html
Copyright © 2020-2023  润新知