一、前言
关于Mysql数据库的数据备份、数据迁移,想必大家首先想到的方式便是使用Mysql提供的“mysqldump” 工具。尽管它很常用,但也有一些缺点:
-
备份速度较慢:对于大型数据库或包含大量数据的表,
mysqldump
可能会比较慢,特别是在导出大量数据时。 -
备份文件较大:
mysqldump
生成的备份文件通常是文本格式的 SQL 脚本,这可能会导致备份文件非常大,占用大量磁盘空间。 -
无法实现增量备份:
mysqldump
通常进行全量备份,它不能只备份自上次备份以来发生更改的数据。 -
恢复时间较长:恢复过程中,
mysqldump
需要逐条执行 SQL 脚本,这可能会使恢复过程较慢,尤其是对于大规模的数据恢复。 -
不支持实时备份:
mysqldump
可能需要在数据库服务器上执行,这可能会对数据库的性能产生影响。它不是一个热备份工具,不能在数据库运行时进行备份而不影响数据库的操作。 -
不适用于高并发环境:在高并发环境中,
mysqldump
可能无法捕获所有的事务,因为它在备份过程中不会锁定数据库,从而可能会导致备份不一致。 -
不支持备份数据库之间的关系:对于涉及多个数据库的复杂系统,
mysqldump
可能无法完全捕获数据库之间的关系和约束。
综上,如果mysqldump不能满足我们的要求,就可以使用一些第三方工具,例如:XtraBackup、MyLoader、DBSync... 不同的工具具有不同的特性和优点,本次内容我们引入XtraBackup进行介绍。
二、XtraBackup
-
关于 XtraBackup
Xtrabackup是Percona团队开发的用于MySQL数据库物理热备份的开源备份工具,当前主要存在两个版本:Xtrabackup 2.4.x与8.0.x,分别用于备份MySQL 5.x与MySQL 8.0.x 版本
XtraBackup优点
1. 支持热备份
-
描述:Percona XtraBackup 能够在数据库正在运行的情况下进行备份,而不会对数据库性能产生显著影响。这意味着可以在不中断服务的情况下备份数据。
2. 增量备份
-
描述:支持增量备份,即只备份自上次备份以来发生变化的数据。这种方式可以显著减少备份时间和存储空间需求。
3. 压缩和加密
-
描述:提供压缩功能来减小备份文件的体积,从而节省存储空间。同时,也支持备份文件的加密,确保备份数据的安全性。
4. 支持多种存储引擎
-
描述:兼容 MySQL 的 InnoDB、XtraDB 和 MyISAM 存储引擎,能够灵活处理不同类型的数据表。
5. 恢复灵活性
-
描述:支持将备份恢复到不同的服务器或不同的数据库实例,使得数据迁移和恢复变得更加灵活和方便。
6. 高效的备份速度
-
描述:通过并行处理等技术,Percona XtraBackup 可以显著提高备份速度,尤其是在处理大型数据库时。
7. 支持复制
-
描述:能够备份 MySQL 主从复制环境中的数据,并支持从复制环境中恢复数据,有助于维持数据一致性。
8. 易于集成和自动化
-
描述:可以与各种自动化工具和脚本集成,支持定期备份和自动化备份任务,提高运维效率。
9. 开源和免费
-
描述:作为开源软件,Percona XtraBackup 是免费的,社区支持和文档丰富,能够满足大多数用户的需求。
10. 恢复到任意时间点
-
描述:支持将备份恢复到任意时间点(基于事务日志),使得用户可以从最近的备份中恢复到具体的时间点。
11. 支持多种平台
-
描述:兼容各种操作系统和平台,包括 Linux 和 Windows,使得在不同环境下的使用更加灵活。
Centos安装XtraBackup
1. 安装必要依赖
sudo yum install epel-release
sudo yum install zstd
2.添加 Percona 仓库及 安装xtrabackup
--添加 Percona 仓库
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release setup ps80
--安装2.4版本
sudo yum install percona-xtrabackup-24
--安装8.0版本
sudo yum install percona-xtrabackup-80
--卸载2.4版本
sudo yum remove percona-xtrabackup-24
--卸载8.0版本
sudo yum remove percona-xtrabackup-80
3、查看安装版本
xtrabackup --version
全量备份文件
1、执行数据备份前需在源数据库创建备份用户并授予相应权限
--查看当前用户权限
SHOW GRANTS FOR CURRENT_USER();
--创建备份用户
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'your_password';
--授予备份过程必要权限
GRANT BACKUP_ADMIN ON *.* TO 'backup_user'@'localhost';
GRANT PROCESS ON *.* TO 'backup_user'@'localhost';
GRANT RELOAD ON *.* TO 'backup_user'@'localhost';
GRANT RELOAD, LOCK TABLES, SHOW VIEW, PROCESS, SELECT ON *.* TO 'backup_user'@'localhost';
GRANT SELECT ON performance_schema.* TO 'backup_user'@'localhost';
GRANT SELECT ON mysql.* TO 'backup_user'@'localhost';
--查看备份用户权限
SHOW GRANTS FOR 'backup_user'@'localhost';
--刷新权限
FLUSH PRIVILEGES;
2、全量备份数据
--备份数据
xtrabackup --backup --target-dir=/path/to/backup --user=backup_user --password=your_password
3、准备备份文件
xtrabackup --prepare --target-dir=/path/to/backup
4、如果是文件迁入其他MYSQL数据库
迁移后目标数据库同源数据库一致(包括:用户信息、数据信息、视图、基础配置等)
--文件传输
scp -r /path/to/backup user@remote_host:/path/to/destination
--目标服务器操作:
1、相同步骤安装percona及xtrabackup
2、清空当前data目录下所有文件
3、关闭mysql服务
4、执行copy或者move脚本(文件比较大或者磁盘空间不足的情况下可使用move)
xtrabackup --copy-back --target-dir=/path/to/destination
xtrabackup --move-back --target-dir=/path/to/destination
--可能需要调整权限
chown -R mysql:mysql /path/to/mysql/data
--重启服务进行数据验证
sudo systemctl start mysqld
5、综上,就完成了整库数据的迁移备份
增量备份文件
1、全量备份是进行增量备份的前提,执行增量备份前需执行过全量备份
2、创建增量备份
xtrabackup --backup --incremental --incremental-basedir=/path/to/previous/backup --target-dir=/path/to/backup/incremental --user=root --password=your_password
--incremental: 指定这是一个增量备份。
--incremental-basedir: 指定之前的全量备份或增量备份目录。
3、验证备份
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/incremental
4、合并增量备份(假设有多个增量备份)
如果需要将增量备份合并到全量备份中,你需要先对全量备份执行 --prepare
命令,然后再将增量备份合并到全量备份中。
--对全量备份进行预处理
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full
-- 对每个增量备份进行合并
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full --incremental-dir=/path/to/backup/incremental1
xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full --incremental-dir=/path/to/backup/incremental2
-- 准备最终备份(这个命令将应用所有增量日志,使备份成为一个完整的一致性备份。
)
xtrabackup --prepare --target-dir=/path/to/backup/full
5、综上,就完成了增量备份的操作。
注意事项
- 备份目录:确保备份目录有足够的磁盘空间,并且指定的目录路径正确。
- 日志文件:检查 MySQL 错误日志,以便在备份和恢复过程中发现任何潜在问题。
- 权限:确保
xtrabackup
命令运行的用户具有足够的权限进行备份和恢复操作。