一、概述
模拟场景:下面模拟逻辑备份与物理备份两种方式恢复单表方法,利用完整备份+binlog恢复单表,某天某张表意外删除,如何从全备中恢复单表?

二、安装部署
2.1Mysql安装
(我的模拟环境数据版本为:5.7.36 ,此处省略相关操作)

2.2  xtrabackup-2.4.24 安装(物理备份)
官网地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

安装依赖包:
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev

下载并安装 安装路径任意(rpm包)
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.24/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
 
yum -y install percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm

安装后检查一下
which innobackupex
which xtrabackup

三、物理备份与还原(xtrabackup)
3.1全量备份
(说明:主节点上进行全量备份,自定义备份路径名称:/data/backup/xbk/full_`date +%F`)
innobackupex --user=root --password=123   --no-timestamp /data/backup/xbk/full_`date +%F`
innobackupex --apply-log  /data/backup/xbk/full_2022-05-14/

3.2恢复数据(全量备份+binlog备份)
(恢复思路:我们有全量备份+binlog备份,某天误删除主节点db01库中的t1表,如何恢复?保证主节点环境安全,我们先在测试节点操作,主节点的全备文件scp到测试节点进行全备恢复+binlog,然后单独备份在主节点删除的t1表,在将t1单表备份文件导入到主节点恢复)

3.2.1、删除db01库中的t1表
drop table db01.t1;

3.2.2、主节点的全备文件scp到测试库
scp -r /data/backup/xbk/full_2022-05-14 root@192.168.73.175:/data/backup/

3.2.3、测试库操作,清空data目录下数据
pkill mysqld
rm -rf /data/3306/mysql/*

3.2.4、恢复主节点scp过来的全备文件,并授权
innobackupex --copy-back /data/backup/full_2022-05-14/
授权
chown -R mysql.mysql /data/3306/mysql/*
启动
mysqld_safe --defaults-file=/etc/my.cnf  --user=mysql &

4、binlog日志恢复
截取binlog日志,在测试节点进行恢复
4.1、测试节点操作:在scp过来的全备文件中查找binlog文件名
more /data/backup/full_2022-05-14/xtrabackup_binlog_info

4.2、去主节点上将mysql_bin.000009 日志scp到测试节点
scp /data/3306/log/mysqlbinlog/mysql_bin.000009 root@192.168.73.175:/data/3306/log/

4.3、测试节点操作:查找binlog最后位置点,用mysqlbinlog解析日志,找到drop之前最后操作的位置点
mysqlbinlog mysql_bin.000009

mysqlbinlog --skip-gtids --start-position=2435 --stop-position=3126 /data/3306/log/mysqlbinlog/mysql_bin.000009 >/data/backup/binlog.sql

4.4、恢复binlog
mysql> set sql_log_bin=0;
mysql> source /data/backup/binlog.sql
mysql> set sql_log_bin=1;

5、在测试节点上已把删除的t1表以及备份后的操作全部恢复完成,在测试节点上进行t1单表备份,在将t1单表备份文件导入到主节点恢复

5.1、用mysqldump对db01库下的t1表进行备份
mysqldump db01 -uroot -p --set-gtid-purged=off > /data/backup/db01_t1.sql

5.2、将上方单表备份db01_t1.sql文件,scp到主节点
scp /data/backup/db01_t1.sql root@192.168.73.176:/data/backup/

5.3、主节点上操作,恢复t1表数据,至此主节点被删的t1表恢复完成
mysql -uroot -p db01 < db01_t1.sql

四、逻辑备份与还原(mysqldump)

4.1全量备份
(场景:周一晚上进行全量备份,参数解释:-u(用户名)-p(密码)-A(全库备份 )-R(导出存储过程和函数)--single-transaction(设置事务的隔离级别)--triggers(触发器)--master-data=2(把change log那行注释掉,=1是没有注释)-set-gtid-purged=OFF (会记录binlog日志,如果不加,不记录binlog日志)>定向输出到文件,文件不存在,就创建文件)
mysqldump -uroot -p123  -A  -R  --single-transaction --triggers --master-data=2  --set-gtid-purged=OFF>/data/backup/all.sql

模拟周二上午数据变化,下午误删除t1表
mysql>use db01 ;
mysql>insert into t1 values(1),(2),(3);
mysql>commit;
mysql>drop table  t1;

4.2恢复数据(全量备份+binlog备份)
(恢复思路:我们用全量备份+binlog备份,恢复t1表,需要处理全备,在全备中截取create.sql+insert.sql+binlog.sql)

在全备中截取建表语句(路径根据自己的修改)
sed -n '/CREATE TABLE `t1` /,/\;/p' /data/backup/all.sql >/data/backup/create.sql

在全备中截取插入语句(路径根据自己的修改)
grep -i 'INSERT INTO `t1`'  /data/backup/all.sql >/data/backup/insert.sql

在全备中截取binlog(路径根据自己的修改)
在全备all.sql中查找binlog文件名和起点
vi /data/backup/all.sql
 
查找binlog最后位置点,用mysqlbinlog解析日志,找到drop之前最后操作的位置点
mysqlbinlog mysql_bin.000007

截取binlog的日志(路径根据自己的修改)
mysqlbinlog --skip-gtids --start-position=1775 --stop-position=2152 /data/3306/log/mysqlbinlog/mysql_bin.000007> /data/backup/binlog.sql

恢复数据(create.sql+insert.sql+binlog.sql)
use db01;
set sql_log_bin=0;
source /data/backup/create.sql
source /data/backup/insert.sql
commit;
source /data/backup/binlog.sql
set sql_log_bin=1;

MySQL中如何用全库备份恢复单张表相关推荐

  1. mysql 快照能否恢复某个表_mysql全库备份恢复某个表

    早上小红过来问我说网站的一个功能没了,看了下数据库,少了个表.好吧,心里mmp,开始恢复数据 环境: 全库备份 恢复某一个表 1.1 查看备份数据 [aiye@aiye mysql_backup]$l ...

  2. mysql 全库 备份 恢复_从MySQL全库备份中恢复某个库和某张表

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-d ...

  3. oracle8616,ORACLE11G-数据库备份恢复之RMAN全库备份恢复

    文章模拟数据库在有rman全库备份并在备份后有事务产生后数据库崩溃的恢复过程,欢迎交流学习. 1.rman全库备份 RMAN> backup as compressed backupset da ...

  4. 再谈MySQL全库备份

    简介 Part1:写在最前 在很早之前,我写过一个MySQL生产库全库备份脚本,今天有同事问我是不是要再加一个-R参数来备份存储过程,理由的话是由于mysqldump --help中 关于存储过程的默 ...

  5. mysql异机还原_MySQL innobackupex全量备份恢复

    转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupex innobackupex比xtarbacku ...

  6. 魔兽假设把mysql卸了_【原创】假设在有最后一次全库备份之后,你误删除了一张表,请使用备份+归档来将数据库...

    topic:[原创]假设在有最后一次全库备份之后,你误删除了一张表,请使用备份+归档来将数据库恢复到删除表之前的状态.(不完全恢复)更多精彩内容尽在www.leonar topic:[原创]假设在有最 ...

  7. MySQL 数据库备份一键执行脚本 --- 全库备份和增量备份

    文章目录 1. 全库备份 2. 增量备份 3. 开启定时任务 1. 全库备份 vim all_db_bak.sh#!/bin/bash #MySQL 全库备份PATH="/usr/local ...

  8. MySQL 采用Xtrabackupex进行全库备份过程汇总

    1,xtrabackup简介 关于数据库备份以及备份工具,参考:http://blog.itpub.net/26230597/viewspace-1460065/,这里来介绍xtrabackup已经如 ...

  9. Window环境下配置MySQL 5.6的主从复制、备份恢复

    Window环境下配置MySQL 5.6的主从复制.备份恢复 1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 ...

最新文章

  1. 风险度量之[下行风险]
  2. 在茫茫人海中发现相似的你——局部敏感哈希(LSH)
  3. 采用UDP协议实现PIC18F97J60 ethernet bootloader
  4. Redis系列二:reids介绍
  5. 光流 | OpenCV中的光流有关函数
  6. think in baidu
  7. CLion 输出遇到乱码解决办法,GBK和utf-8的转换
  8. Bootstrap 字体图标 Bootstrap Glyphicon Components
  9. struct timeval结构体 以及 gettimeofday()函数
  10. Linux时间同步(内外网/内网/外网)
  11. Golang实践录:命令行cobra库实例再三优化
  12. opencv-Getting Started with Videos
  13. 《Spring技术内幕》——2.3节IoC容器的初始化过程
  14. Hive的行转列及列转行函数使用总结
  15. 虚幻引擎学习总结(其一)
  16. Excel技能培训之四-按颜色排序,按自定义文字排序
  17. html5 3d动画效果代码,精选9款迷人的HTML5 3D动画效果及源码
  18. 你在项目中做过哪些安全防范措施?
  19. .java.smap_利用Java Binary Webshell对抗静态检测
  20. win7 开wifi 关wifi

热门文章

  1. 【智慧空开】ASCB系列63A智能微型断路器应用说明
  2. 常用的8种字符串处理函数
  3. 部署环境从docker swarm迁移到k8s后kie-server的发布方式变化
  4. 初级前端面试题 - js
  5. 曾国藩修身养性十三条
  6. 大圣归来:我们心中缺少一份英雄主义
  7. fatal error: juce_core.h: No such file or directory
  8. redis之RediSearch全文搜索
  9. Unity动态添加tag
  10. 使用非JAVA代码 说明