首页 > 数据库 >MySQL 备份工具 XtraBackup 系列2 --- 备份

MySQL 备份工具 XtraBackup 系列2 --- 备份

时间:2023-01-29 16:01:43浏览次数:124  
标签:-- 备份 --- XtraBackup xtrabackup mysql data dir

一、承上启下

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. 其他

https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-centos-7

https://www.digitalocean.com/community/tutorials/how-to-configure-mysql-backups-with-percona-xtrabackup-on-ubuntu-16-04

https://severalnines.com/blog/mysqldump-or-percona-xtrabackup-backup-strategies-mysql-galera-cluster/

标签:--,备份,---,XtraBackup,xtrabackup,mysql,data,dir
From: https://www.cnblogs.com/eagle6688/p/17072925.html

相关文章

  • S2 - Lesson 25 - Do the English speak English?
    Words railwayrailwaystationtrainstation foreignerforeign porter wonderfeelsurprisedwanttoknow severalseveraltimes    Content......
  • 操作系统 - 计算机组成原理
    冯诺依曼模型CPU每次可以计算4个byte-32位CPU;每次可以计算8个byte-64位CPU;32和64称为CPU的位宽。寄存器离CPU近的存储来存储需要被计算的数字PC寄存......
  • 操作系统 - 指令概述
    文件/为根目录,绝对路径即为从根目录开始到文件所在地址的路径。.代表当前目录,..代表上一级目录,相对路径即为从当前工作路径开始到文件所在地的目录,pwd查看工作目录。cd指......
  • k8s client-go 02基础clientset操作k8s
    Clientset构造clientset操作k8s集群。packagemainimport("context""fmt"v1"k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/ku......
  • JavaWeb-VUE&Element
    JavaWeb-VUE&Element1,VUE1.1概述Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。Mybatis是用来简化jdbc代码编写的;而VUE是前端的框架,是用来简化Ja......
  • linux网络名词--ip、域名、主机名、uri、url、
    一、ip、域名、主机名定义ip:IP地址就可以访问到每一台主机域名:与ip之间存在对应关系主机名:服务器名+域名主机名和域名区别:1、域名的范围要比主机名大,一个域名下可以有......
  • linux--systemctl、service和chkconfig
    一、systemctl1、centos7下,systemctl可以理解为systemd的一个工具。也可以认为systemctl命令将service和chkconfig命令结合在了一起,它永久性或只在当前会话中启用/禁用服务......
  • C++ 设计模式--模板方法Template Method
    1.定义定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。TemplateMethod使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某......
  • k8s client-go 01介绍
    关于client-goclient-go是一个golang的client,我们可以通过client-go与K8SapiServer进行交互,对k8s集群中资源对象,包括内置资源(例如:Pod、Deployment、Service等)和CRD进......
  • 金线--摘自得到精选
    你好,欢迎每天听本书,我是陈章鱼。今天我要为你解读的这本书叫《金线》,它的副标题是《解决一切问题的结构化思维和结构化表达》。这本书在2022年11月出版,到了12月就成了互联......