目录
1.关于Percona XtraBackup
2. Percona XtraBackup有哪些特点?
3.安装Percona XtraBackup
3.1.环境信息
3.2.安装步骤
4.实战演练
4.1.全量备份与恢复
4.2.总结
1.关于Percona XtraBackup
Percona XtraBackup是世界上唯一的开源、免费的MySQL热备份 为InnoDB和XtraDB执行非阻塞备份的软件 数据库。使用Percona XtraBackup,您可以获得以下好处:
快速可靠地完成备份
备份期间不中断的事务处理
节省磁盘空间和网络带宽
自动备份验证
更快的恢复时间导致更高的延迟
2. Percona XtraBackup有哪些特点?
以下是Percona XtraBackup功能的简短列表。
创建热InnoDB备份而无需暂停数据库
对MySQL进行增量备份
将压缩的MySQL备份流式传输到另一台服务器
在线在MySQL服务器之间移动表
轻松创建新的MySQL复制副本
备份MySQL而不增加服务器负载
备份锁是Percona Server 5.6+中可用的
FLUSH TABLES WITH READ LOCK
的轻量级替代方案。Percona XtraBackup使用它们自动复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。Percona XtraBackup根据每秒IO操作数执行限制。
Percona XtraBackup跳过辅助索引页,并在准备紧凑备份时重新创建它们。
Percona XtraBackup甚至可以从完整备份中导出单个表,无论InnoDB版本如何。
使用Percona XtraBackup导出的表可以导入Percona Server 5.1、5.5或5.6+或MySQL 5.6+。
3.安装Percona XtraBackup
3.1.环境信息
主机IP | 操作系统 | Mysql版本 | XtraBackup版本 |
---|---|---|---|
172.17.0.2 | CentOS Stream release 9 | 8.0.37 | 8.0.35 |
3.2.安装步骤
Percona XtraBackup的安装方法有三中YUM仓库安装,RPM包安装,源码编译安装,下面介绍到的是YUM仓库安装
-
以
root
用户身份或使用sudo运行以下命令来安装Percona yum仓库:sudo yum install \ https://repo.percona.com/yum/percona-release-latest.\ noarch.rpm
-
启用存储库:
sudo percona-release enable-only tools release
如果Percona XtraBackup预期与 上游MySQL服务器,只需要开启`tools仓库:
sudo percona-release enable-only tools
-
通过运行以下命令安装Percona XtraBackup:
sudo yum install percona-xtrabackup-80
警告:
在CentOS 6上安装Percona XtraBackup之前,请确保安装了
libev
软件包。对于此操作系统,可以从EPEL存储库中获得libev
包。 -
要对使用
LZ4
或ZSTD
压缩算法进行的备份进行重新编译,请安装相应的软件包:sudo yum install zstd
4.实战演练
创建备份目录
mkdir -p /data/backup
xtrabackup配置都是通过选项完成的,也可以通过/etc/my.cnf进行配置,如下所示:
[xtrabackup] host=localhost port=3306 user=root password=123456 socket=/var/lib/mysql/mysql.sock target_dir=/data/backup
授予root用户BACKUP_ADMIN权限
grant BACKUP_ADMIN on *.* to 'root'@'%'
LOCK INSTANCE FOR BACKUP
是MySQL 8.0引入的一种新的备份相关SQL语句,主要用于在进行数据库备份时,以一种更为细粒度和高效的方式控制对数据库实例的访问,以保证备份的一致性。这个命令的工作原理及特点如下:目的:在执行备份操作时,此命令用于获取一个实例级别的锁,该锁允许在备份过程中继续执行DML(数据操作语言,如INSERT、UPDATE、DELETE)操作,同时防止那些可能导致数据快照不一致的DDL(数据定义语言,如CREATE、ALTER、DROP)操作和某些管理操作。这样可以在不影响数据库服务的情况下进行备份,特别适用于需要最小化服务中断的在线备份场景。
权限需求:执行
LOCK INSTANCE FOR BACKUP
语句需要用户具备BACKUP_ADMIN
权限。这是一个专门为了备份相关的高级操作而设计的权限级别。兼容性:此特性是在MySQL 8.0及以上版本中引入的,早于8.0的MySQL版本并不支持这一语句,因此在使用旧版本时,可能需要依赖其他机制(如
FLUSH TABLES WITH READ LOCK
)来确保备份的一致性。解锁:执行备份后,需要使用
UNLOCK INSTANCE
语句来释放之前由LOCK INSTANCE FOR BACKUP
获得的锁,从而恢复正常操作。与传统备份命令的对比:相比于传统的备份方法,如使用
FLUSH TABLES WITH READ LOCK
,LOCK INSTANCE FOR BACKUP
提供了更小的性能影响,因为它不会完全阻止写操作,只是限制了可能引起数据不一致的活动,更适合于高可用性和高性能要求的生产环境。4.1.全量备份与恢复
登陆数据库查看现有的的数据,可以看到现在有一个tes1的库
进行全量备份,最后看到 completed OK!代表成功
xtrabackup --backup --target-dir=/data/backup --datadir=/var/lib/mysql --user=root --password=123456 --host=172.17.0.2 --port=3306
在/data/backup目录下可以看到备份的数据
登陆数据库删除tes1库
停止MySQL服务进行恢复数据
systemctl stop mysqld
rsync -avrP /data/backup/ /var/lib/mysql/
恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动
chown -R mysql:mysql /var/lib/mysql
重启数据库查看数据是否恢复,可以看到之前被删除的tes1数据库已经成功恢复
4.2.总结
需要注意的是,在执行恢复之前需要关闭MySQL服务器。您不能恢复到正在运行的mysqld实例的数据目录(导入部分备份时除外)。由于文件的属性将被保留,在大多数情况下,您需要mysql在启动数据库服务器之前将文件的属主和属组更改为mysql.mysql。