当前位置: 首页 > news >正文

XtraBackup备份与恢复

XtraBackup

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

  • 数据量非常的大的时间用它;
  • 全量备份和恢复数据库,速度很快;
  • 增量备份和恢复,主从时从服务器可以当做备份;
  • 热备(主库开机时备份数据);
  • 冷备(关闭mysql服务进行备份)。

xtrabackup是percona开源的mysql物理备份工具。

XtraBackup支持MySQL 5.1至8.0版本的备份和恢复。具体来说,不同版本的XtraBackup对MySQL版本的支持情况如下:

  • XtraBackup 2.4版本:可以备份和恢复MySQL 5.1、5.5、5.6和5.7版本的数据库,但不支持MySQL 8.0及以上版本。
  • XtraBackup 8.0版本:专门用于备份和恢复MySQL 8.0版本的数据库。需要注意的是,xtrabackup8.0.12以前版本不支持MySQL 8.0.20及以后版本的备份,因此如果需要备份更新版本的MySQL 8.0,建议使用更新的XtraBackup 8.0版本。

核心功能对比

对比维度MySQL dumpXtraBackup
备份类型逻辑备份(生成 SQL 脚本)物理备份(复制数据文件)
备份速度较慢(需逐条读取数据并生成 SQL)较快(直接复制文件,效率接近文件系统拷贝)
恢复速度较慢(需执行大量 SQL 插入数据)较快(直接拷贝文件,仅需少量日志恢复)
对数据库影响备份时会加锁(MyISAM 表)或产生读写压力几乎无锁(InnoDB 表支持热备份,不阻塞读写)
备份一致性需通过--single-transaction保证 InnoDB 一致性自动通过 redo log 实现崩溃恢复,确保一致性
支持增量备份不原生支持(需手动对比数据差异)原生支持(基于 LSN 日志序列号追踪变化)
跨版本兼容性较好(SQL 脚本可跨小版本恢复)较差(物理文件与 MySQL 版本绑定较紧)
备份内容仅包含数据库逻辑结构和数据包含数据文件、日志、配置等完整物理文件

3. 适用场景

CentOS7 安装Xtrabackup 8.0

# 安装Percona yum存储库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm# 启用Percona Server 8.0存储库
percona-release enable-only tools release
percona-release setup ps80# 安装依赖环境
yum -y install  libev perl-DBD-mysql perl-Digest-MD5 epel-release# 安装
yum -y install percona-xtrabackup-80-8.0.12# 安装成功后测试版本
xtrabackup --version#如果成功安装,则会显示Xtrabackup的版本信息。
#安装完成后,我们就可以使用Xtrabackup进行MySQL数据库备份和恢复操作了。

Ubuntu22.04 安装Xtrabackup 8.0

# 添加percona的软件仓库
sudo add-apt-repository 'deb http://repo.percona.com/apt focal main'
# 执行后需要敲一下回车# 添加percona的公钥
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb# 安装xtrabackup-80
sudo apt update
sudo apt install percona-xtrabackup-80# 若安装过程中出现如下错误信息
The following packages have unmet dependencies:
percona-xtrabackup-80 : Depends: libssl1.1 (>= 1.1.1) but it is not installable
# 则下载libssl1.1安装一下wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb# 之后继续安装percona-xtrabackup-80sudo apt install -y percona-xtrabackup-80# 若安装过程中出现如下错误信息
The following packages have unmet dependencies:percona-xtrabackup-24 : Depends: libdbd-mysql-perl but it is not going to be installedDepends: libcurl4-openssl-dev but it is not going to be installedDepends: libev4 (>= 1:4.04) but it is not going to be installedpercona-xtrabackup-80 : Depends: libdbd-mysql-perl but it is not going to be installedDepends: libcurl4-openssl-dev but it is not going to be installedDepends: libev4 (>= 1:4.04) but it is not going to be installedDepends: libssl1.1 (>= 1.1.1) but it is not installableConflicts: percona-xtrabackup-24 but 2.4.28-1.jammy is to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
# 则根据提示执行相应的命令修复sudo apt --fix-broken install# 查看安装版本
sudo xtrabackup --version

全量备份

1.在备份服务器上创建一个目录,用于存储备份文件。

mkdir  /bak/

2.运行以下命令来执行完整备份:

# 全量备份,如果远程备份需要添加参数--host=IP,删除--socket参数
xtrabackup  --defaults-file=/etc/my.cnf  \--user=root  \--password=root123 \--port=3306  \--socket=/tmp/mysql.sock \--datadir=/usr/local/mysql/data \--backup \--target-dir=/bak/full# 这将备份MySQL数据目录(/usr/local/mysql/data)到指定的目录(/bak/full )中。
通用选项:
-u, --user       # 数据库用户名 -u root            或 --user=root
-p, --password   # 数据库密码   -p root123         或 --password=root123
-P, --port       # 数据库端口号 -P 3306            或 --port=3306
-H, --host       # 远程连接地址 -H 192.168.8.36    或 --host=192.168.8.36
-S, --socket     # 本地数据连接 -S /tmp/mysql.sock 或 --socket=/tmp/mysql.sock
--datadir        # 指定MySQL数据库数据存放路径        --datadir=/usr/local/mysql/data
备份选项:
--backup         # 创建备份并且放入--target-dir目录中
--target-dir     # 指定backup的目的地,如果目录不存在,xtrabakcup会创建。如果目录存在且为空则成功。不会覆盖已存在的文件。
--incremental    # 创建增量备份
还原选项:
--prepare        # 预处理,合并数据文件和日志文件,确保数据完整性。
--apply-log-only # 在备份还在进行准备工作时,跳过消除(undo)阶段,只执行重做(redo)阶段,从而进行增量备份
--copy-back      # 将备份目录下的所有文件复制到数据库数据目录

全量还原

1.首先停止MySQL服务,并确保MySQL数据目录为空。

systemctl stop mysqld
# 或者 /etc/init.d/mysqld stop
rm -rf /usr/local/mysql/data/*

2.进行恢复:

# 1.合并数据文件和日志文件,确保数据完整性。
xtrabackup --prepare \--datadir=/usr/local/mysql/data \--target-dir=/bak/full# 2.全备的恢复
xtrabackup  --copy-back \--datadir=/usr/local/mysql/data \--target-dir=/bak/full# 3.修复所有者和权限
chown -R mysql:mysql /usr/local/mysql/data# 4.启动MySQL
systemctl start mysqld
# 或者:/etc/init.d/mysqld start# 5.登录测试
mysql -uroot -proot123
show databases;

增量备份

增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。 增量备份前需要有一次全量备份。

# 增量备份
mkdir /bak/{inc1,inc2}
# 第一次增量备份
xtrabackup  --defaults-file=/etc/my.cnf  \--user=root  \--password=root123 \--port=3306  \--socket=/tmp/mysql.sock \--datadir=/usr/local/mysql/data \--backup \--target-dir=/bak/inc1 \--incremental-basedir=/bak/full# 第二次增量备份
xtrabackup  --defaults-file=/etc/my.cnf  \--user=root \--password=root123 \--port=3306  \--socket=/tmp/mysql.sock \--datadir=/usr/local/mysql/data \--backup \--target-dir=/bak/inc2 \--incremental-basedir=/bak/inc1

增量还原

1.首先停止MySQL服务,并确保MySQL数据目录为空。

systemctl stop mysqld
# 或者 /etc/init.d/mysqld stop
rm -rf /usr/local/mysql/data/*

2.进行恢复:

# 增量备份的恢复,需要恢复增量备份到完全备份
## 1.准备全备
### 预处理,此选项--apply--log-only 阻止回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/bak/full## 2.将第一次增备添加到全备中
xtrabackup --prepare --apply-log-only --target-dir=/bak/full --incremental-dir=/bak/inc1## 3.将第二次增备添加到全备中
xtrabackup --prepare --apply-log-only --target-dir=/bak/full --incremental-dir=/bak/inc2## 4.将合并后的完备再一次准备复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
### A.合并数据文件和日志文件,确保数据完整性。
xtrabackup --prepare \--datadir=/usr/local/mysql/data \--target-dir=/bak/full
### B.全备的恢复
xtrabackup  --copy-back \--datadir=/usr/local/mysql/data \--target-dir=/bak/full# 这将从备份中复制数据文件到MySQL数据目录,并将权限设置正确。# 5.修复所有者和权限
chown -R mysql:mysql /usr/local/mysql/data# 6.启动MySQL
systemctl start mysqld
#或者 /etc/init.d/mysqld start# 7.登录测试
mysql -uroot -proot123
show databases;

Xtrabackup与mysqldump区别

Xtrabackup属于物理备份,mysqldump属于逻辑备份。

Xtrabackup占用的CPU与内存较少,消耗的IO相对较大,备份后的文件较大。

通过mysql自带的工具mysqldump进行逻辑备份和恢复,虽然可以节省磁盘空间,但是速度很慢。

本条目发布于 2021-11-14 。属于MySQL 分类, 作者是 zuojie@88.com 。

http://www.dtcms.com/a/313657.html

相关文章:

  • Python 程序设计讲义(61):Python 的函数——变量的作用域
  • 【运维基础】Linux 硬盘分区管理
  • [Oracle] DUAL数据表
  • [自动化Adapt] 录制引擎 | iframe 穿透 | NTP | AIOSQLite | 数据分片
  • 第二节 YOLOv5参数
  • Python 程序设计讲义(59):Python 的函数——labmda函数(匿名函数)
  • 四、驱动篇-HDF驱动介绍2
  • sublime 乱码问题
  • JavaEE文件泄露与修复方案
  • Linux | i.MX6ULL移植 Gdb+Gdbserver 调试(第十四章)
  • 深入解析 Linux Kernel 中的设备树:使用、修改与实际应用
  • 经典文献阅读之--ViNT(视觉导航的基础模型)
  • 《汇编语言:基于X86处理器》第11章 MS-Windows编程(3)
  • 8.3 Java Web(JavaScript P15-P28)
  • Leetcode——365. 水壶问题
  • 决策树模型知识点整理:从原理到实战(含可视化与调参)
  • [硬件电路-134]:模拟电路 - 运算放大器常见运算:两模拟信号相加、相减、单模拟信号的积分、微分...
  • HTTPS的概念和工作过程
  • Ollama模型库模型下载慢完美解决(全平台)
  • 模型学习系列之参数
  • pytorch深度学习全流程:以简易数据、模型介绍
  • linux火焰图
  • vuhub Noob靶场攻略
  • 雪花算法重复id问题
  • Maxscript在选择的可编辑多边形每个面上绘制一个内部圆形
  • 自动驾驶中的传感器技术19——Camera(10)
  • OS21.【Linux】环境变量
  • CMake 命令行参数完全指南(5)
  • graph TD的规则
  • Linux Deepin深度操作系统应用商店加载失败,安装星火应用商店