MySQL中如何用全库备份恢复单张表

一、概述
模拟场景:下面模拟逻辑备份与物理备份两种方式恢复单表方法,利用完整备份+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;
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xtrabackup是一种备份工具,可用于对MySQL数据库进行全量或增量备份。在备份过程,xtrabackup会创建一个完整的数据库备份,包括所有的和数据。如果需要从xtrabackup备份恢复单张,可以使用可移动空间(Transportable Tablespace)功能来实现。从MySQL 5.6版本开始,支持可移动空间功能,该功能允许将单个从一个数据库实例移动到另一个实例。 要从xtrabackup备份恢复单张,可以按照以下步骤进行操作: 1. 使用xtrabackup备份整个MySQL数据库。 2. 将备份文件解压到指定的目录,并确保解压后的备份文件包含了所有的数据和结构。 3. 使用MySQL的物理备份工具innobackupex来恢复备份文件。这个工具可以将备份文件还原到指定的目录。 4. 在还原过程,可以选择只恢复需要的。可以将需要恢复复制到新的数据库实例,或者使用可移动空间(Transportable Tablespace)功能将备份移动到现有的数据库实例。 5. 如果备份后的数据有插入操作,但在恢复过程没有出现,请使用binlog进行恢复。binlog是MySQL的二进制日志,可以用于恢复备份后的插入操作。 请注意,以上步骤仅适用于使用xtrabackup进行备份MySQL数据库,且需要使用MySQL 5.6版本或更高版本支持可移动空间功能。有关更详细的步骤和示例,请参考提供的链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [从xtrabackup备份恢复](https://blog.csdn.net/yimenglin/article/details/106902717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值