一、承上启下
1. MySQL安装
https://www.cnblogs.com/eagle6688/p/8975090.html
2. XtraBackup安装
https://www.cnblogs.com/eagle6688/p/17066856.html
二、全量备份
1. 备份
执行以下命令进行数据备份:
xtrabackup --user=bkpuser --password=bpkpassword --backup --target-dir=/data/backups/mysql/
如果不指定--user参数,xtrabackup将会假设数据库的用户为当前操作xtrabackup命令的系统用户。
其他参数:
a. -port: 数据库的端口号;
b. -socket: 使用socket来连接本地数据库;
c. -host: 数据库的host地址。
备份执行之后的预期输出如下:
备份之后,target-dir中的文件如下:
2. 恢复
数据恢复分为两个阶段,准备(Prepare)阶段和恢复阶段。
(1) 在数据恢复之前首先需要关闭MySQL实例:
sudo systemctl stop mysqld
(2) 清空datadir
数据恢复之前必须要清空MySQL的datadir目录:
mkdir /tmp/mysql mv /var/lib/mysql/* /tmp/mysql/
(3) 准备阶段
准备阶段的目的是使备份文件达到某个时间点的数据一致性。
xtrabackup --prepare --target-dir=/data/backups/mysql
预期输出:
注意:在xtrabackup执行准备的过程中,不要中断该操作,否则可能引起准备阶段产生的文件不可用的问题。
(4) 恢复阶段
执行如下命令将备份文件拷贝至MySQL的datadir目录中进行恢复:
xtrabackup --copy-back --target-dir=/data/backups/mysql
如果你不希望保留target-dir中的备份文件,可以执行如下命令将备份文件移动至MySQL的datadir目录中:
xtrabackup --move-back --target-dir=/data/backups/mysql
甚至,你可以使用rsync或者cp命令将相关文件复制到datadir目录中:
rsync -avrP /data/backups/mysql /var/lib/mysql/
(5) 设置datadir权限
此时,datadir中文件的Owner是上面执行数据恢复的用户,我们需要重置datadir的权限:
sudo chown -R mysql: /var/lib/mysql
或者
sudo chown -R mysql:mysql /var/lib/mysql
(6) 重启服务
sudo systemctl start mysqld
三、增量备份
1. 备份
(1) 全量备份
xtrabackup增量备份是在全量备份的基础上进行的,可以设置每周全量备份一次,每天增量备份一次,或者每天全量备份一次,每小时增量备份一次。
执行增量备份之后,xtrabackup会在target-dir中生成一个名为xtrabackup_checkpoints的文件,内容如下:
其中的*_lsn则是增量备份的依据。每个InnoDB数据页(page)都包含一个LSN(Log sequence number),LSN是MySQL系统的版本号,当某个数据页的数据发生改变的时候它的LSN就会增量改变。
(2) 第一次增量备份
xtrabackup --backup --target-dir=/data/backups/mysql/inc1 --incremental-basedir=/data/backups/mysql
target-dir用于保存增量备份文件的目录,上面的命令执行之后/data/backups/mysql-inc目录下会存在*.delta的文件;
incremental-basedir是保存全量备份文件的目录。
此外,增量备份也会生成检查点文件xtrabackup_checkpoints:
from_lsn是全量备份中的to_lsn/last_lsn。
(3) 第二次增量备份
xtrabackup --backup --target-dir=/data/backups/mysql/inc2 --incremental-basedir=/data/backups/mysql/inc1
target-dir用于保存增量备份文件的目录;
incremental-basedir是保存上一次增量备份文件的目录。
xtrabackup_checkpoints文件:
to_lsn与last_lsn不同意味着在执行增量备份期间,正在运行的数据库有数据更新。
2. 恢复
与恢复全量备份一样,恢复增量备份同样需要两个阶段。
(1) 准备阶段
有三个目录的文件需要依次Prepare:
/data/backups/mysql /data/backups/mysql/inc1 /data/backups/mysql/inc2
a. 准备全量backup
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/mysql
--apply-log-only 会避免xtrabackup撤销(Roll back)未提交的事务,因为这些事务所涉及到的改动可能会在随后的增量backup中提交。
这里的log sequence number将会与target-dir的to_lsn保持一致。
b. 准备第一份增量backup
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/mysql --incremental-dir=/data/backups/mysql/inc1
该命令行会将增量备份更新到全量备份。
期望的输出如下:
c. 准备第二份增量backup
xtrabackup --prepare --target-dir=/data/backups/mysql --incremental-dir=/data/backups/mysql/inc2
与第一次执行类似,该命令行会将增量备份更新到全量备份。
(2) 恢复阶段
数据恢复与全量部分相同,此处不再赘述。
四、备份压缩
1. 压缩
XtraBackup支持压缩和解压备份文件,方法是在执行备份命令的时候添加参数:
--compress
该命令需要安装qpress并启用tools,我们在上面安装部分已经提到。
2. 压缩算法
(1) quicklz,这是--compress参数的默认算法,例如:
xtrabackup --backup --compress --target-dir=/data/backups/mysql
(2) lz4,需要指定lz4压缩算法:
xtrabackup --backup --compress=lz4 --target-dir=/data/backups/mysql
(3) Zstandard (ZSTD)
xtrabackup --backup --compress=zstd --target-dir=/data/backups/mysql
3. 多线程压缩
多线程压缩可以通过--compress-threads参数来实现,如下:
xtrabackup --backup --compress --compress-threads=4 --target-dir=/data/compressed/
4. 解压
(1) 在执行Prepare之前,需要先对压缩文件进行解压,解压需要使用--decompress参数:
xtrabackup --decompress --target-dir=/data/compressed/
(2) 自动清除压缩包
解压完成之后,压缩包就没用了,但XtraBackup并不会自动的对已经解压,除非你在解压过程中带上--remove-original参数:
xtrabackup --decompress --remove-original --target-dir=/data/compressed/
(3) 解压完成之后就是执行数据恢复了,参考上文不再赘述。
五、流式备份
对于大型数据库,流式备份能更好的节约系统资源并且有更好的性能表现,它甚至支持直接将备份文件通过SSH发送到另一台备份服务器上。
上文展示的XtraBackup的普通备份模式是将备份文件写入到命令参数中的target-dir中,而XtraBackup的流式备份模式将备份文件以xbstream的格式输出到标准输出流中。
关于Stream的具体用法可参考https://docs.percona.com/percona-xtrabackup/8.0/howtos/recipes_xbk_stream.html
六、参考
1. 官方
https://docs.percona.com/percona-xtrabackup/8.0/backup_scenarios/full_backup.html
2. 其他
标签:--,备份,---,XtraBackup,xtrabackup,mysql,data,dir From: https://www.cnblogs.com/eagle6688/p/17072925.html