MYSQL-物理备份(xtrabackup)使用指南

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL (本章节)

PostgreSQL

MongoDB

Redis

Etcd

物理备份分两种情况:一种是直接复制库的物理文件(利用的是Linux复制文件的特性),但是这种情况一般需要在数据库服务停止的情况下进行,适合那种允许中断业务的情况进行。另外一种就是利用开源工具XtraBackup进行备份,因为他具有增量备份的能力,所有部分云厂商的备份也会基于类似的操作。

备份

安装

复制代码
# 安装 Percona 仓库sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpmsudo percona-release enable tools releasesudo yum install percona-xtrabackup-24

全量备份​​​​​​​

复制代码
# 基本全量备份xtrabackup --backup --target-dir=/path/to/backup --user=root --password=your_password
# 完整示例xtrabackup \    --backup \    --target-dir=/backup/mysql/full_$(date +%Y%m%d_%H%M%S) \    --user=root \    --password=your_password \    --socket=/var/lib/mysql/mysql.sock \    --parallel=4 \    --compress​​​​​​

251013 22:26:57 Executing UNLOCK TABLES251013 22:26:57 All tables unlocked251013 22:26:57 [00] Compressing ib_buffer_pool to /backup/mysql/full_20251013_222642/ib_buffer_pool.qp251013 22:26:57 [00]        ...done251013 22:26:57 Backup created in directory '/backup/mysql/full_20251013_222642/'MySQL binlog position: filename 'mysql-bin.000014', position '154'251013 22:26:57 [00] Compressing /backup/mysql/full_20251013_222642/backup-my.cnf.qp251013 22:26:57 [00]        ...done251013 22:26:57 [00] Compressing /backup/mysql/full_20251013_222642/xtrabackup_info.qp251013 22:26:57 [00]        ...donextrabackup: Transaction log of lsn (1079467870) to (1079467879) was copied.251013 22:26:58 completed OK!

备份完成内容

可以和数据存储的的数据进行比对,你会发现具体的某个库下面的实际内容和数据目录甚至是一模一样。​​​​​​​

复制代码
[root@localhost xback]# lltotal 77876-rw-r----- 1 root root      487 Sep 28 00:45 backup-my.cnf-rw-r----- 1 root root      790 Sep 28 00:45 ib_buffer_pool-rw-r----- 1 root root 79691776 Sep 28 00:45 ibdata1drwxr-x--- 2 root root     4096 Sep 28 00:45 mysqldrwxr-x--- 2 root root     8192 Sep 28 00:45 performance_schemadrwxr-x--- 2 root root     8192 Sep 28 00:45 sysdrwxr-x--- 2 root root      214 Sep 28 00:45 test_db-rw-r----- 1 root root       21 Sep 28 00:45 xtrabackup_binlog_info-rw-r----- 1 root root      144 Sep 28 00:45 xtrabackup_checkpoints-rw-r----- 1 root root      493 Sep 28 00:45 xtrabackup_info-rw-r----- 1 root root     2560 Sep 28 00:45 xtrabackup_logfile

备份单个库​​​​​​​

复制代码
# 备份指定数据库的所有表xtrabackup --backup \    --target-dir=/backup/database1_full \    --user=root \    --password='@!qaz2WSX' \    --tables="^database1[.].*"
# 示例:备份 db1 数据库xtrabackup --backup \    --target-dir=/backup/db1_full \    --user=root \    --password='@!qaz2WSX' \    --tables="^db1[.].*"

第一次增量备份​​​​​​​

复制代码
FULL_BACKUP_DIR="/backup/mysql/full_20251013_222642" && \INC_BACKUP_DIR1="/backup/mysql/inc1_$(date +%Y%m%d_%H%M%S)" && \xtrabackup --backup --target-dir=$INC_BACKUP_DIR1 --incremental-basedir=$FULL_BACKUP_DIR --user=root --password='@!qaz2WSX' --socket=/var/lib/mysql/mysql.sock && \echo "第一次增量备份完成: $INC_BACKUP_DIR1"

第二次增加备份​​​​​​​

复制代码
FULL_BACKUP_DIR="/backup/mysql/full_20251013_222642" && \INC_BACKUP_DIR1="/backup/mysql/inc1_$(date +%Y%m%d_%H%M%S)" && \xtrabackup --backup --target-dir=$INC_BACKUP_DIR1 --incremental-basedir=$FULL_BACKUP_DIR --user=root --password='@!qaz2WSX' --socket=/var/lib/mysql/mysql.sock && \echo "第一次增量备份完成: $INC_BACKUP_DIR1"

注意:这里的备份需要上一次备份具体目录。

还原

合并备份​​​​​​​

复制代码
#!/bin/bash
# 备份目录FULL_BACKUP_DIR="/backup/mysql/full_20251013_222642"INC_BACKUP_DIR1="/backup/mysql/inc1_20251013_223918"INC_BACKUP_DIR2="/backup/mysql/inc2_20251013_224134"  # 您的第二次增量备份目录
echo "开始合并还原全量+增量备份..."
# 步骤1: 准备全量备份(应用redo日志)echo "1. 准备全量备份..."xtrabackup --prepare --apply-log-only --target-dir=$FULL_BACKUP_DIR
# 步骤2: 合并第一次增量备份echo "2. 合并第一次增量备份..."xtrabackup --prepare --apply-log-only --target-dir=$FULL_BACKUP_DIR \    --incremental-dir=$INC_BACKUP_DIR1
# 步骤3: 合并第二次增量备份(最后一步不使用--apply-log-only)echo "3. 合并第二次增量备份..."xtrabackup --prepare --target-dir=$FULL_BACKUP_DIR \    --incremental-dir=$INC_BACKUP_DIR2
echo "合并完成!现在可以执行恢复操作..."

还原​​​​​​​

复制代码
# 1. 停止MySQLsystemctl stop mysql
# 2. 清空数据目录(确保已备份重要数据)rm -rf /var/lib/mysql/*
# 3. 执行还原xtrabackup --copy-back --target-dir=/backup/mysql/full_20251013_222642
# 4. 设置权限chown -R mysql:mysql /var/lib/mysql
# 5. 启动MySQLsystemctl start mysql

这样我们就完成了使用增量物理备份工具(xtrabackup),从备份到还原的全部操作,当然这里只演示步骤,真实环境还需要考虑很多因素,会更复杂。

相关推荐
笃行3507 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员9 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范
SelectDB14 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶14 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
这个DBA有点耶16 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风16 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio16 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
Starry-sky(jing)19 小时前
Vidda ADB 开启:R Pro 65 找不到开发者选项的处理与连接验收
android·adb·远程控制·电视·vidda
数据库急诊室_阿哲20 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋21 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap