目录
准备工作
开始安装
innobackupex的使用
完全备份
增量备份
数据恢复
本次需要用到的软件
- mysql 5.7.35
- percona-xtrabackup-24-2.4.8
ps:---MySQL必须是5.7的版本,在8.0之后已经不支持 percona-xtrabackup-24
系统版本CentOS7.9
准备工作
下载软件percona-xtrabackup
链接 Software Downloads - Percona
当然,假如使用RHEL 9 或者 Rocky Linux 9 以上的版本 软件的版本也要求变高,如图所示
这两个是mysql的扩展包也需要安装
mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm
mysql-community-devel-5.7.35-1.el7.x86_64.rpm
由于安装此原件需要过多的扩展包,配置阿里云镜像源
wget -O https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost script] yum makecache
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
local | 3.6 kB 00:00:00
percona-release-noarch | 1.5 kB 00:00:00
percona-release-x86_64 | 2.9 kB 00:00:00
prel-release-noarch | 1.5 kB 00:00:00
updates | 2.9 kB 00:00:00
元数据缓存已建立
或者可以在官方源中寻找yum仓库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
开始安装
(CentOS 7.9)
[root@localhost src] ls
mysql percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
[root@localhost src] yum localinstall percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
已加载插件:fastestmirror, langpacks
正在检查 percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm: percona-xtrabackup-24-2.4.8-1.el7.x86_64
percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 percona-xtrabackup-24.x86_64.0.2.4.8-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
========================================================================================
Package 架构 版本 源 大小
========================================================================================
正在安装:
percona-xtrabackup-24
x86_64 2.4.8-1.el7 /percona-xtrabackup-24-2.4.8-1.el7.x86_64 31 M
事务概要
========================================================================================
安装 1 软件包
总计:31 M
安装大小:31 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : percona-xtrabackup-24-2.4.8-1.el7.x86_64 1/1
验证中 : percona-xtrabackup-24-2.4.8-1.el7.x86_64 1/1
已安装:
percona-xtrabackup-24.x86_64 0:2.4.8-1.el7
完毕!
Percona XtraBackup 2.4 版本主要提供了两个核心命令来进行MySQL的备份操作:
xtrabackup:这个命令是用于InnoDB和XtraDB存储引擎的物理备份工具,专注于高效、可靠的热备份。它能够执行全备(full backup)和增量备份(incremental backup),并在备份过程中不影响数据库的正常运行。
innobackupex:这是一个封装脚本,实际上是对
xtrabackup
命令的封装和扩展,旨在提供与mysqldump类似的使用体验,同时结合MyISAM等非事务表的支持。通过innobackupex,可以对包含InnoDB和非InnoDB表的MySQL实例进行热备份,它能够处理全备、增量备份以及备份的准备(prepare)阶段,以便备份文件可以被直接用于恢复。
innobackupex的使用
完全备份
[root@localhost src] innobackupex --user=root --password=Openlab123! --no-timestamp /db/full
这条命令是用来使用
innobackupex
工具执行一次MySQL数据库的全量备份操作。具体参数解释如下:
innobackupex
:是命令名称,表示要使用的工具是Percona XtraBackup的封装脚本,用于执行MySQL数据库备份。
--user=root
:指定连接MySQL数据库的用户名为root
。这是备份操作需要的数据库用户权限,用户必须拥有足够的权限来读取数据库的所有数据。
--password=Openlab123!
:指定连接MySQL数据库的密码为Openlab123!
。请注意,在实际使用中直接在命令行中暴露密码可能会有安全风险,建议通过其他更安全的方式传递密码,如使用环境变量或配置文件。
--no-timestamp
:此选项指示innobackupex不要在备份目录名中自动添加时间戳。默认情况下,innobackupex会在备份目标目录后面加上一个时间戳,以区分不同的备份。如果使用--no-timestamp
,则备份会被直接放在指定的目录下,这可能导致覆盖之前的备份,需谨慎使用。
/db/full
:这是指定的备份目标目录。备份将会被保存到这个路径下。如果没有提供绝对路径,那么路径会被认为是相对于当前工作目录的。由于使用了--no-timestamp
,所有备份文件都会直接存放在/db/full
目录下,没有子目录区分。该命令执行的操作是:以
root
用户身份,使用密码Openlab123!
登录MySQL数据库,并执行一次全量备份,备份文件将被保存到/db/full
目录下,且不会在目录名后添加时间戳。请确保在执行此类备份操作前,已正确配置MySQL的访问权限,并考虑备份文件的管理策略,避免无意识的覆盖重要备份。
使用root账号实现效果
使用其他账号需要增加权限
创建用户
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'password';
给予用户权限
mysql> grant SELECT,RELOAD,SHOW DATABASES,LOCK TABLES,SUPER,PROCESS,REPLICATION CLIENT on *.* to backup@'localhost' identified by 'Openlab123!'
[root@localhost src] rm -rf /db
[root@localhost src] innobackupex --user=backup --password=Openlab123! --no-timestamp /db/full
同样也能实现功能
查看备份的目录
[root@localhost src]# ls /db/full/
backup-my.cnf ibdata1 MyScl performance_schema xtrabackup_checkpoints xtrabackup_logfile
ib_buffer_pool Myschool_db mysql sys xtrabackup_info
增量备份
在执行增量备份之前,你需要有一个全量备份的基础。增量备份基于上一次的备份进行,只备份自那之后发生变化的数据。
[root@localhost src] innobackupex --user=backup --password=Openlab123! --host=localhost --port=3306 --incremental /db/incr_v1 --incremental-basedir=/db/full
这里,--incremental-basedir
指定了上一次全量备份的位置。
实现效果
数据恢复
已经完成了备份的准备阶段,现在要恢复数据:
-
停止MySQL服务:确保MySQL服务已经停止。
-
复制备份文件:将备份文件复制到MySQL的数据目录(通常是
/var/lib/mysql
)或者你自定义的数据存放位置。 -
调整文件所有权和权限:确保MySQL服务用户(如
mysql:mysql
)拥有这些文件的适当权限。 -
启动MySQL服务:启动MySQL服务,数据应该已经被恢复到备份时的状态。
请注意,实际操作时务必根据系统环境和需求进行适当的调整。此外,定期检查和验证备份的有效性是非常重要的,以确保在真正需要时能够成功恢复数据。
以下是一个完整的恢复示例(已经备份好数据了):
停止MySQL服务: 首先,确保MySQL服务已经停止,以避免数据不一致的问题。在大多数Linux系统上,可以通过以下命令实现:
systemctl stop mysql
准备恢复目录: 确保MySQL的数据目录为空或已移除旧数据(小心操作,避免误删生产数据!)
[root@localhost ~] ls /var/lib/mysql
auto.cnf ib_buffer_pool MyScl public_key.pem
back_db ibdata1 mysql server-cert.pem
ca-key.pem ib_logfile0 mysql.sock server-key.pem
ca.pem ib_logfile1 mysql.sock.lock sys
client-cert.pem ibtmp1 performance_schema
client-key.pem Myschool_db private_key.pem
[root@localhost ~] rm -rf /var/lib/mysql/*
复制备份文件: 将备份的文件复制到MySQL的数据目录。--copy-back
选项会自动处理文件复制和权限调整。
[root@localhost ~] innobackupex --copy-back /db/full/
调整权限: 如果在复制过程中权限没有被自动调整,可能需要手动调整MySQL数据目录的权限,确保MySQL服务用户(如 mysql:mysql
)有正确的访问权限。
[root@localhost ~] ll /var/lib/mysql
总用量 12324
drwxr-x---. 2 root root 48 5月 31 14:25 back_db
-rw-r-----. 1 root root 282 5月 31 14:25 ib_buffer_pool
-rw-r-----. 1 root root 12582912 5月 31 14:25 ibdata1
drwxr-x---. 2 root root 166 5月 31 14:25 Myschool_db
drwxr-x---. 2 root root 254 5月 31 14:25 MyScl
drwxr-x---. 2 root root 4096 5月 31 14:25 mysql
drwxr-x---. 2 root root 8192 5月 31 14:25 performance_schema
drwxr-x---. 2 root root 8192 5月 31 14:25 sys
-rw-r-----. 1 root root 434 5月 31 14:25 xtrabackup_info
# 给予权限
[root@localhost ~] chown -R mysql:mysql /var/lib/mysql
[root@localhost ~] ll -a /var/lib/mysql
总用量 122964
drwxr-x--x. 8 mysql mysql 4096 5月 31 14:27 .
drwxr-xr-x. 64 root root 4096 5月 30 10:49 ..
-rw-r-----. 1 mysql mysql 56 5月 31 14:27 auto.cnf
drwxr-x---. 2 mysql mysql 48 5月 31 14:25 back_db
-rw-------. 1 mysql mysql 1680 5月 31 14:27 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 5月 31 14:27 ca.pem
-rw-r--r--. 1 mysql mysql 1112 5月 31 14:27 client-cert.pem
-rw-------. 1 mysql mysql 1680 5月 31 14:27 client-key.pem
-rw-r-----. 1 mysql mysql 282 5月 31 14:25 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 5月 31 14:27 ibdata1
-rw-r-----. 1 mysql mysql 50331648 5月 31 14:27 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 5月 31 14:27 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 5月 31 14:27 ibtmp1
drwxr-x---. 2 mysql mysql 166 5月 31 14:25 Myschool_db
drwxr-x---. 2 mysql mysql 254 5月 31 14:25 MyScl
drwxr-x---. 2 mysql mysql 4096 5月 31 14:25 mysql
srwxrwxrwx. 1 mysql mysql 0 5月 31 14:27 mysql.sock
-rw-------. 1 mysql mysql 6 5月 31 14:27 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 5月 31 14:25 performance_schema
-rw-------. 1 mysql mysql 1680 5月 31 14:27 private_key.pem
-rw-r--r--. 1 mysql mysql 452 5月 31 14:27 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 5月 31 14:27 server-cert.pem
-rw-------. 1 mysql mysql 1676 5月 31 14:27 server-key.pem
drwxr-x---. 2 mysql mysql 8192 5月 31 14:25 sys
-rw-r-----. 1 mysql mysql 434 5月 31 14:25 xtrabackup_info
启动MySQL服务: 最后,重新启动MySQL服务以加载恢复的数据。
[root@localhost ~] systemctl start mysql
验证数据恢复: 登录MySQL,检查数据库是否正确恢复。
[root@localhost ~] mysql -u root -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MyScl |
| Myschool_db |
| back_db |
| mysql |
| performance_schema |
| sys |
+--------------------+