MySQL实验:误删除表后,如何还原最新状态(mysqldump)

前提条件:

  1. 启用二进制文件选项:
    [root@node2 ~]# vim /etc/my.cnf
    [mysqld]
    log_bin=/data/log_bin/mariadb-bin
    
  2. 数据库全备份
    [root@node2 ~]# mysqldump -A -F --single-transaction --master-data=2 --flush-privileges > /backup/full_bak_$(date +%F).sql
    

还原步骤:

数据库加读锁,防止进一步的变化,并做好准备工作

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER LOGS;    #查看binlog的position
mysql> FLUSH LOGS;    #生成新日志

导出二进制日志文件

  1. 查看全备份文件中二进制日志起始位置
    [root@node2 ~]# head /backup/full_bak_2020-03-31.sql
    
  2. 导出二进制日志为sql脚本
    [root@node2 ~]# mysqlbinlog --start-position=245 /data/bin_log/mariadb-bin.000003 > /backup/bin_log.sql
    

编辑二进制日志sql脚本

  1. 找到误操作指令并删除
    ~]# vim /backup/bin_log.sql

恢复数据库

  1. 禁止用户访问数据库,启动之
    [root@node2 ~]# vim /etc/my.cnf
    [mysqld]
    skip-networking
    [root@node2 ~]# systemctl restart mariadb.service
    
  2. 恢复全备,导入全备sql脚本
    ~]# mysql -uroot -pcentos < /backup/full_bak_2020-03-31.sql
  3. 恢复二进制日志,导入sql脚本
    ~]# mysql -uroot -pcentos < /backup/bin_log.sql
  4. 解除禁止用户访问,重启服务
    [root@node2 ~]# vim /etc/my.cnf
    [mysqld]
    [root@node2 ~]# systemctl restart mariadb.service
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容