当前位置:首页 > 编程笔记 > 正文
已解决

Mysql数据备份 —xtrabackup

来自网友在路上 183883提问 提问时间:2023-11-20 02:47:06阅读次数: 83

最佳答案 问答题库838位专家为你答疑解惑

一  备份介绍

### 优点:

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

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Mysql数据备份 —xtrabackup":http://eshow365.cn/6-39906-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!