Mysql数据备份 —xtrabackup

一  备份介绍

### 优点:

1. **在线备份:** XtraBackup 支持在线备份,这意味着你可以在 MySQL 服务器运行的同时进行备份,而无需停止数据库服务。这对于生产环境中的数据库是非常关键的,因为可以最小化停机时间。

2. **增量备份:** XtraBackup 支持增量备份,允许你仅备份自上次完整备份或增量备份以来发生更改的数据。这可以减少备份所需的时间和磁盘空间。

3. **高性能:** XtraBackup 通过使用 InnoDB 的快速检查点算法来实现高性能备份。这可以显著减少备份所需的时间,并降低对生产系统的影响。

4. **支持 InnoDB 和 XtraDB 存储引擎:** XtraBackup 不仅支持 MySQL 的默认存储引擎 InnoDB,还支持 Percona 的增强版 XtraDB 存储引擎。这使其成为使用这两种存储引擎的用户的理想选择。

5. **完整性检查和验证:** XtraBackup 在备份过程中会对备份数据的完整性进行检查,以确保备份文件是可用且正确的。这提供了额外的安全性。

二 工作原理 

1. 创建快照:          2. 应用日志:
   ┌──────────────┐      ┌──────────────────┐
   │ MySQL 数据库 │      │ 事务日志 (redo log)│
   └──────────────┘      └──────────────────┘
         │                       │
         ▼                       ▼
   ┌──────────────┐      ┌──────────────────┐
   │ 创建数据库快照│      │ 应用事务日志到快照 │
   └──────────────┘      └──────────────────┘

3. 备份元数据:         4. 创建备份文件:
   ┌──────────────┐      ┌──────────────┐
   │ 数据库元数据 │      │ 备份文件   │
   └──────────────┘      └──────────────┘
         │                       │
         ▼                       ▼
   ┌──────────────┐      ┌──────────────┐
   │ 备份数据库元数据 │      │ 备份文件操作 │
   └──────────────┘      └──────────────┘

          

三  获取xtarbackup

Percona 官方网站: 你可以从 Percona 的官方网站下载 XtraBackup。访问 Percona XtraBackup 下载页面icon-default.png?t=N7T8https://www.percona.com/downloads/XtraBackup/

使用包管理工具: 对于一些 Linux 发行版,你还可以使用系统的包管理工具来安装 XtraBackup。以下是一些示例

sudo apt-get install percona-xtrabackup
sudo yum install percona-xtrabackup

源码编译: 如果你需要特定版本或者无法通过包管理工具获取 XtraBackup,你还可以从源代码编译。在 Percona XtraBackup GitHub 仓库 上可以找到源代码

3.1   安装完整的xtrabackup软件

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.28/binary/tarball/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17.tar.gz
tar -zxvf percona-xtrabackup*.tar.gz
rm -f *.tar.gz
mv percona-xtrabackup* /usr/local/xtrabackup-2.4
echo "export PATH=/usr/local/xtrabackup-2.4/bin:$PATH" >> ~/.bashrc  
source ~/.bashrc
xtrabackup --version

这里 /path/to/destination 是你想要安装 XtraBackup 的目标目录。

##适用于数据库5.7的mysql   若是8.0以上数据库则需要下载8.0版本

四 xtrabackup全库备份和恢复

4.1 创建数据db_one db_two  一个使用myisam引擎和innodb引擎

CREATE TABLE db_two (
  stock VARCHAR(255),
  price INT
) ENGINE = MyISAM;

CREATE TABLE db_one (
  stock VARCHAR(255),
  price INT
) ENGINE =INNODB;
INSERT INTO db_two (stock, price) VALUES
  ('三倍半导体做多', 18),
  ('三倍科技做多', 51);

INSERT INTO db_one (name, com) VALUES
  ('小明', '中国'),
  ('华为', '美国');

4.2 准备数据库备份的账号

CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY '123456';
GRANT REPLICATION CLIENT, RELOAD, PROCESS ON *.* TO 'xtrabackup'@'localhost';
FLUSH PRIVILEGES;
  • 'xtrabackup' 是你希望创建的用户名,你可以根据需要更改它。
  • 'localhost' 指定该用户只能从本地主机连接。如果你希望从远程主机连接,请替换为相应的主机名或 IP 地址。
  • '123456' 是用户的密码,确保你选择一个强密码。
  • GRANT REPLICATION CLIENT 授予用户 REPLICATION CLIENT 权限,使其能够执行主从复制操作。
  • GRANT RELOAD 授予用户 RELOAD 权限,以便在备份期间执行 FLUSH TABLES WITH READ LOCK 操作。
  • GRANT PROCESS 授予用户 PROCESS 权限,以便能够查看正在运行的进程

4.3  备份数据库

 mkdir /tmp/xbackup ##创建存储路径
 xtrabackup --backup --target-dir=/tmp/xbackup  --user=xtrabackup --password=123456
GRANT ALL PRIVILEGES ON *.* TO 'xtrabackup'@'localhost';
FLUSH PRIVILEGES;
##权限问题可以直接给这个用户全部权限 实验状态下

[root@master local]# ll /tmp/xbackup/
总用量 18456
-rw-r----- 1 root root      487 11月 13 17:07 backup-my.cnf
drwxr-x--- 2 root root      110 11月 13 17:07 db_defualt
-rw-r----- 1 root root     1581 11月 13 17:07 ib_buffer_pool
-rw-r----- 1 root root 18874368 11月 13 17:07 ibdata1
-rw-r----- 1 root root       21 11月 13 17:07 xtrabackup_binlog_info
-rw-r----- 1 root root      138 11月 13 17:07 xtrabackup_checkpoints
-rw-r----- 1 root root      520 11月 13 17:07 xtrabackup_info
-rw-r----- 1 root root     2560 11月 13 17:07 xtrabackup_logfile

xtrabackup --backup --target-dir=/tmp/xbackup/xtra-$(date +"%Y-%m-%d") --user=xtrabackup --password=123456  --apply-log

##第一次执行的命令就是备份前进行备份,但是在备份中的数据就不在了,然后这次使用apply-log参数 用于存储日志
 

4.4 模拟数据库故障及恢复

rm -rf /var/lib/mysql/data
xtrabackup --copy-back --target-dir=/tmp/xbackup/$(date +"%Y-%m-%d") --user=xtrabackup --password=123456
chown -R mysql:mysql  /var/lib/mysql/data

五   增量备份

因为xtrabackup是专注数据目录的恢复,所以每次恢复需要直接删除数据目录

增量备份基于已有的全备份(包含所有数据库文件和二进制日志文件)和之前的增量备份

rm -rf /tmp/xbackup

这边使用xtrabackup的封装,相对于xtraback命令更加直接一点

进行完整备份:这会创建数据库的一个基本副本。

innobackupex --user=root --password=123456   /tmp/xbackup

准备把全量备份中数据日志进行整合(就是第一条命令中备份时产生的数据)

[root@master xbackup]# ll
总用量 0
drwxr-x--- 8 root root 286 11月 14 11:01 2023-11-14_11-01-05
[root@master xbackup]# innobackupex --user=root --password=123456 --apply-log --redo-only /tmp/xbackup/2023-11-14_11-01-05/

5.1 向数据库中写入数据

mysql> INSERT INTO db_one (姓名,国家) VALUES   ('小明', '中国'),   ('华为', '日本');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from db_defualt.db_one
    -> ;
+--------+--------+
| 姓名   | 国家   |
+--------+--------+
| 小明   | 中国   |
| 华为   | 美国   |
| 小明   | 中国   |
| 华为   | 日本   |
+--------+--------+


5. 2 做增量备份

innobackupex --user=root --password=123456 --backup --incremental /tmp/xbackup --incremental-basedir=/tmp/xbackup/2023-11-14_11-01-05/  ##执行增量备份 基于11-01-05的
innobackupex --user=root --password=123456 --apply-log --redo-only /tmp/xbackup/2023-11-14_11-01-05/ --incremental-dir=/tmp/xbackup/2023-11-14_11-20-13/ ##应用日志到全量备份
 

5.3  删除数据库

rm -rf /var/lib/mysql/data/*

全量备份恢复

innobackupex --user=root --password=123456 --copy-back /tmp/xbackup/2023-11-14_11-01-05/
chown -R mysql:mysql /var/lib/mysql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值