教你玩转MySQL8物理备份利器Xtrabackup

news/2025/1/19 11:20:07/文章来源:https://www.cnblogs.com/cheyunhua/p/18432846

教你玩转MySQL8物理备份利器Xtrabackup

原创 我科绝伦 小周的数据库进阶之路
 

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望大家能够喜欢,并提出宝贵地意见,我们一起提升,守住自己的饭碗。

小周的数据库进阶之路
致力于dba数据库经验分享、新手入门、原理解读、踩坑指南
171篇原创内容

一、Xtrabackup介绍

xtrabackup是由Percona公司开发的一个用于MySQL数据库物理热备的工具,开源免费,目前官方最新版本是8.0.35,也支持8.0.37版本数据库,本文已经过测试。另外8.1,8.2和8.3也支持。它具有如下优点:

(1)备份速度快,物理备份可靠;

(2)在备份期间不间断地处理事务; 

(3)支持备份压缩,节约磁盘空间和网络带宽; 

(4)自动校验备份。

xtrabackup支持流式输出、压缩、增量备份、加密,是目前各个备份厂商普遍使用的MySQL备份工具。

二、Xtrabackup备份原理

1、xtrabackup开始,记录lsn ,同时启动后台进程监控redo日志的变化,且将变化实时记录到xtrabackup_logfile中;

2、复制ibdata1,.ibd数据文件;

3、全局读锁,执行LOCK INSTANCE FOR BACKUP(8.0取代了 FLUSH TABLES WITH READ LOCK); 

4、复制非InnoDB的表和文件;

5、获取binlog位置信息; 

6、停止复制redo log,即停止记录xtrabackup_logfile;

7、执行UNLOCK INSTANCE释放锁; 

8、复制buffer pool; 

9、备份完成。

图片

三、下载软件

官网地址:https://www.percona.com/downloads Percona XtraBackup 8.0 只支持MySQL 8.0的版本 

Percona XtraBackup 2.4 支持MySQL 5.11 , 5.5, 5.6 和5.7的版本

大家按需下载对应的版本

图片

当然,也可以从网盘下载

链接: https://pan.baidu.com/s/1cWZ_Vbf8d-eUaAsawA2lUg 

提取码: sfka

图片

四、Xtrabackup安装

上传安装包至/usr/local目录下,并重命名为xtrabackup目录

[root@mysql local]# tar -xvf percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz
[root@mysql local]# mv percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17 xtrabackup
[root@mysql local]# echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >>/etc/profile
[root@mysql local]# source /etc/profile
[root@mysql local]#which xtrabackup
[root@myoracle local]#xtrabackup --version
[root@myoracle local]#yum install perl-Digest-MD5 -y #安装依赖,要不然备份会报错
图片

五、xtrabackup常用参数

--user:指定连接数据库的用户名。
--password:指定连接数据库的密码。
--backup:执行备份操作。
--prepare:执行备份准备操作。
--copy-back:将备份恢复到原来的数据目录。
--datadir:指定数据目录的路径。
--target-dir:指定备份文件存储目录。
--incremental:执行增量备份操作。
--incremental-lsn:指定增量备份的LSN号。
--tables:仅备份特定的表。
--databases:仅备份特定的数据库。
--compress:压缩备份文件。#开启备份压缩,根据数据内容不同,压缩比可以在50%~60%
--stream=xbstream #开启流式备份,备份出来的数据输出到stdout
--remote-host=user@ip DST_DIR #备份到远程主机

六、备份

新建备份目录

[root@mysql ~]# mkdir -p /data/backup
[root@mysql ~]# chown -R mysql:mysql /data/backup/

新增测试数据

root@localhost:(none)>CREATE DATABASE test;
root@localhost:test>use test;
root@localhost:test>droptableifexists test;
root@localhost:test>CREATETABLE test ( id intNOTNULL AUTO_INCREMENT PRIMARY KEY comment '自增主键',
dept tinyint notnull comment '部门id',
age tinyint notnull comment '年龄',
name varchar(30) comment '用户名称',
create_time datetime notnull comment '注册时间',
last_login_time datetime comment '最后登录时间'
) comment '测试表';
root@localhost:test>insertinto test values(1,1,25,'zhangsan','2024-09-01 00:00:00','2024-09-01 12:00:00');
root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;
root@localhost:test>create index idx_dept on test(dept);create index idx_create_time on test(create_time);
root@localhost:test>create index idx_last_login_time on test(last_login_time);
图片

以上步骤准备继续后,开始全量备份。

(一)全量备份

赋予账号备份权限

root@localhost:(none)>grant BACKUP_ADMIN on *.* to 'root'@'%';
root@localhost:(none)>FLUSH PRIVILEGES;

开始全备

[root@mysql backup]# xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/db_`date +%F`   --user=root --password=123456 --socket=/tmp/mysql.sock  >/data/backup/db_full_`date +%F`.log 2>&1
图片

(二)增量备份

新增数据

root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;
图片

开始增量备份

新建增量备份目录 

[root@mysql ~]# mkdir -p /data/backup/incremental

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --no-lock --backup --socket=/tmp/mysql.sock --target-dir=/data/backup/incremental --incremental-basedir=/data/backup/db_`date +%F` #先不演示流式备份

图片图片

注:--incremental-basedir 首次增量备份,就指定全量备份路径。如果是第二次增量备份,就指定第一次增量备份路径。 

再次插入数据

root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;

新建增量备份的目录并进行备份

[root@mysql incremental]# mkdir -p /data/backup/incremental2
[root@mysql incremental]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --no-lock --backup --socket=/tmp/mysql.sock --target-dir=/data/backup/incremental2 --incremental-basedir=/data/backup/incremental
图片图片

六、恢复

(一)全量恢复

这里我们演示删掉数据盘进行恢复。

root@localhost:test>show variables like 'datadir';
[root@mysql ~]# mv /data/mysql/ /data/mysql.bak
[root@mysql incremental2]# xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/db_2024-09-22 #备份文件一致性检查
图片
[root@mysql incremental2]#xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/db_2024-09-22 #将备份文件从restore_dir拷贝到work_dir目录
图片

给恢复的数据目录赋予mysql权限

[root@mysql data]# chown -R mysql.mysql mysql
图片

启动数据库

[root@mysql data]# ps -ef|grep mysql
[root@mysql data]# service mysql start #如果起不来,需要杀掉之前的进程。
图片

验证数据

root@localhost:(none)>use test;
root@localhost:test>select count(1) from test;
图片

(二)使用binlog恢复数据

[root@mysql db_2024-09-22]# cat xtrabackup_binlog_info
mysql-bin.000005 197 5c4a9483-781b-11ef-84a6-000c29f8db3f:1-17
图片
[root@mysql db_2024-09-22]# mysqlbinlog -vv --start-position=197 /data/mysql.bak/mysql-bin.000005 > recoverdata.sql
root@localhost:(none)>source /data/backup/db_2024-09-22/recoverdata.sql
root@localhost:test>select count(1) from test;
图片

(三)利用增量备份数据恢复

[root@mysql db_2024-09-22]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/db_2024-09-22 #准备数据
图片
[root@mysql db_2024-09-22]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/db_2024-09-22 --incremental-dir=/data/backup/incremental ## 把增量备份的数据合并到完整备份里面
图片
[root@mysql db_2024-09-22]#xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --target-dir=/data/backup/db_2024-09-22 #备份文件一致性检查
[root@mysql db_2024-09-22]#xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back --target-dir=/data/backup/db_2024-09-22 # 恢复数据
图片

修改权限,启动

[root@mysql data]# chown -R mysql.mysql mysql
[root@mysql data]# service mysql start
图片

验证数据

root@localhost:(none)>use test;
root@localhost:test>select count(1) from test;
图片

七、总结

这篇文章主要讲述如何安装Xtrabackup和备份恢复数据库。后面会分享一键备份和恢复脚本,也会分享基于时间点和各种场景的应急恢复。

大家如果想要测试异机备份,一键安装脚本可以参考以下连接

MySQL数据库一键安装脚本,适合任何版本

全网首例!MySQL8 MGR多主一键搭建脚本分享

实战!MySQL主从复制一键搭建脚本分享

小周的数据库进阶之路
致力于dba数据库经验分享、新手入门、原理解读、踩坑指南
171篇原创内容

 

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。

 

 

我科绝伦

赞赏二维码喜欢作者

MySQL · 目录
下一篇MySQL8物理一键备份和恢复脚本分享
个人观点,仅供参考
阅读 710
 
写留言
 
 
 
 
 
 
 
 
写留言
留言
 

暂无留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803896.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双面打印机:激光打印、复印、扫描一体机LaserJet Pro MFP 4104dw

双面打印机: 型号:LaserJet Pro MFP 4104dw 功能:激光打印、复印、扫描一体机

【计算几何】凸包问题 (Convex Hull)

【计算几何】凸包问题 (Convex Hull) 引言 凸多边形 凸多边形是指所有内角大小都在\([0,π]\)范围内的简单多边形 凸包 在平面上能包含所有给定点的最小凸多边形叫做凸包。 其定义为:对于给定集合 X,所有包含 X 的凸集的交集 S 被称为 X 的 凸包。 实际上可以理解为用一个橡皮…

2535. 数组元素和与数字和的绝对差

给你一个正整数数组 nums 。 元素和 是 nums 中的所有元素相加求和。 数字和 是 nums 中每一个元素的每一数位(重复数位需多次求和)相加求和。 返回 元素和 与 数字和 的绝对差。 注意:两个整数 x 和 y 的绝对差定义为 |x - y| 。 示例 1: 输入:nums = [1,15,6,3] 输出:9…

[34](CSP 集训)CSP-S 联训模拟 1

A 几何 重复若干次 -> 不能重叠,因此考虑直接暴力 DP 设 \(f_{i,j,k}\) 表示主串匹配到第 \(i\) 位(将前 \(i\) 位分别归为两类),其中 \(x\) 在重复了若干次后,又匹配到了第 \(j\) 位,\(y\) 在重复了若干次后,又匹配到了第 \(k\) 位 转移非常好写,枚举 \(i\),尝试把…

ShiftAddAug:基于乘法算子训练的最新无乘法网络方案 | CVPR24

不包含乘法的运算符,如移位和加法,因其与硬件的兼容性而日益受到重视。然而,采用这些运算符的神经网络(NNs)通常表现出比具有相同结构的传统NNs更低的准确性。ShiftAddAug利用成本较高的乘法来增强高效但功能较弱的无乘法运算符,从而在没有任何推理开销的情况下提高性能。…

ubuntu录屏转格式 webm转mp4

起因 想着将一些操作录屏记录下来。之前在win上面,使用EV录屏或者用CS(CamtasiaStudio)。这次用ubuntu,发现系统自带的录屏似乎就可以用,于是试了一下。操作确实很方便,但录屏生成的文件是.webm后缀,似乎要上传一些平台需要转格式。遂祭起AI大旗。 AI协助转格式 在Ubunt…

飞驰云联亮相”电子半导体数智化年会” 获”数据交换领域最佳厂商奖”

2024年9月20日,“2024第二届电子半导体/智能制造数智化年会暨品牌出海论坛”于上海隆重开幕,Ftrans飞驰云联作为国内领先的数据安全交换厂商,应邀携半导体全场景产品和解决方案亮相此次峰会。会上进行了“智象奖”评选,Ftrans飞驰云联凭借创新的技术以及优质的服务,荣获“…

智能同步,效率倍增:Ftrans文件自动化实时同步技术革新!

随着企业结构分散化,企业内部数据流转更加频繁,为了保证数据在不同平台和设备之间的一致性和可用性、保障数据的安全性并有效支撑业务开展,越来越多的企业需要将内部数据在多个数据中心之间、多台服务器之间、多云和本地间进行服务器文件自动化实时同步处理。通过同步软件,…

跨地域协作新篇章:异地传输文件的最优方案!

基于市场拓展、获取丰富资源、实现长期战略目标、分散运营风险等考量,企业会在多个城市或国家设立分支机构,用以覆盖更广泛的市场和客户群体,提高业务的可靠性和稳定性。企业在实现总分支机构之间异地传输文件时,会面临以下挑战: 1.管理难统一 不同业务部门、机构之间进行…

鸿蒙应用开发——Scroll/List组件无法触发滑动,检查子组件的高度是否被固定/是否内嵌了Tabs组件

鸿蒙应用开发——Scroll/List组件无法触发滑动,检查子组件的高度是否被固定/是否内嵌了Tabs组件鸿蒙应用开发——Scroll/List组件无法触发滑动 一、检查子组件的高度是否被固定 若Scroll/List组件的子组件的高度超出了Scroll/List组件高度则能够滚动,此时子组件的高度固定且不…

多线程极速导出/9字段10W行只需2秒/导入导出打印组件/功能丰富简单易用

一、功能特点组件同时集成了导出数据到csv、xls、pdf和打印数据。 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。 同时支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。 提供静态方法直接传入QTableView、…