Mariadb 物理备份工具 Mariabackup
一.概述 Mariabackup是MariaDB提供的一个开源工具,用于执行InnoDB、Aria和MyISAM表的物理在线备份。基于Percona XtraBackup 2.3.8进行开发,最早在Mariadb10.1.23和10.2.7中发布,支持mariadb独有功能,比如InnoDB页面压缩和静态数据加密。和mysqldump相比Mariabackup为物理备份,备份速度比较快,并且支持
一.概述
Mariabackup是MariaDB提供的一个开源工具,用于执行InnoDB、Aria和MyISAM表的物理在线备份。基于Percona XtraBackup 2.3.8进行开发,最早在Mariadb10.1.23和10.2.7中发布,支持mariadb独有功能,比如InnoDB页面压缩和静态数据加密。和mysqldump相比Mariabackup为物理备份,备份速度比较快,并且支持全备和增倍。
Mariabackup支持在Linux和Windows进行安装使用,除了支持Percona XtraBackup 2.3.8 plus主要功能以外,它还有功能如下:
- 备份/恢复支持静态加密;(从10.1.3开始MariaDB在MariaDB 10.1.3中添加了对表和表空间的加密。MariaDB 10.1.4中进行了重大更改,。相比未加密大概增加了3%-5%的硬盘开销)
- 使用InnoDB页面压缩备份/还原表
- 支持Galera Cluster 集群
- 支持windows系统
- 从MariaDB 10.2.16和MariaDB 10.3.8开始,使用MyRocks存储引擎对表进行备份/还原
MariaDB Enterprise Backup企业版支持额外功能:
- 备份时支持最小话锁定,增加高并发加速备份
- 对本地所安装的所有存储引擎优化备份时优化,提高备份速度
二、安装
2.1 Linux下YUM安装
添加Mariadb 10.2中科大YUM源
vim /etc/yum.repos.d/MariaDB.repo
# 添加如下内容
# MariaDB 10.2 CentOS repository list - created 2021-01-13 02:48 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
添加Mariadb 10.3中科大YUM源
# MariaDB 10.3 CentOS repository list - created 2021-01-13 02:50 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
Centos7、Centos8
注:如果8无法使用yum,请替换为 dnf install
sudo yum install MariaDB-backup
2.2 Windows下安装
下载地址
https://mariadb.org/download/?rel=10.6.4&prod=mariadb&os=windows
选择Mairadb版本
选择WindowsX86_64,选择下载节点,推荐韩国。
注:如果已经安装过Windows客户端,默认已经安装好Mariabackup
下载完成,双击安装包进行安装。
三、使用
具体使用方法为
mariabackup <options>
3.1 全备(所有库)及全备恢复
- 3.1.1 全备
备份所有mysql数据库; - 1.- -backup :执行备份动作
- 2.- -target-dir:指定备份目录,不存在则会自动创建
- 3- -user & - -password :备份时所用的用户名和密码
# 全备
mariabackup --backup \
--target-dir=/var/mariadb/backup/ \
--user=root --password=mypassword
查看备份文件
[root@pev ~]# ls /backup/dbbak/
aria_log.00000001 backup-my.cnf ibdata1 mysql vipshop
xtrabackup_checkpoint saria_log_control ib_buffer_pool ib_logfile0
performance_schema xtrabackup_binlog_info xtrabackup_info
- 3.1.2 全备恢复
Mariadb-backup恢复有点麻烦,因为全备是基于原文件进行copy的,所以备份完成的数据文件会存在一定的时间差异,假如没有对全备文件进行预恢复,统一时间戳,恢复备份时,Innodb存储引擎会检测到数据不一致,从而导致mariadb崩溃。 - 1.预恢复
使用- -prepare对备份文件进行预恢复
# 预备费
mariabackup --prepare \ # 指定动作为预恢复
--target-dir=/backup/dbbak # 指定全备目录
豫恢复完成会提示:
2021-10-29 10:30:25 140226825001152 [Note] InnoDB: Highest supported file format is Barracuda.
2021-10-29 10:30:25 140226825001152 [Note] InnoDB: Starting crash recovery from checkpoint LSN=1314370293
[00] 2021-10-29 10:30:26 completed OK!
- 2.开始恢复
恢复区需要做如下操作 - 停掉mariadb数据库
systemctl stop mariadb
- 清空mariadb目录
rm -rf /home/mysql/* #请替换成你的mariadb目录。默认为/var/lib/mysql
恢复备份时可选2个选项,相当于复制和剪切
- - copy-back :恢复时保留原文件;
mariabackup --copy-back \
--target-dir=/backup/dbbak/
- -move-back:恢复时不保留原文件;
mariabackup --move-back \
--target-dir=/backup/dbbak/
恢复完成提示:
[01] 2021-10-29 10:45:02 Copying ./exbak/xtrabackup_info to /home/mysql/exbak/xtrabackup_info
[01] 2021-10-29 10:45:02 ...done
[00] 2021-10-29 10:45:02 completed OK!
- 修复mysql目录权限
恢复完成的mysql目录会继承原备份目录的权限,所以需要对其进行修复
chown -R mysql:mysql /home/mysql/
最后启动服务即可
systemctl start mariadb
3.2增量备份
- 3.2.1 增备
增量备份需要做一次全备,才能在全备的基础上进行增量备份;
1- -incremental-basedir:增备目录
2.- -incremental-basedir:全备目录,不指定全备目录无法进行增备
注:执行增备时指定的–target-dir必须为空
# 执行增备
mariabackup --backup \
--target-dir=/backup/dbbak/exbak \
--incremental-basedir=/backup/dbbak \
--user=root --password=test123456
- 3.2.2 增备恢复
增备恢复和全备差不多,只是多了一个把增备合并到全备的过程。具体如下:
注:10.1和10.2版本执行命令不同,以下命令在10.2.40执行无问题 - 1.预恢复
10.2 预恢复命令
mariabackup --prepare \ # 指定动作为预恢复
--target-dir=/backup/dbbak # 指定全备目录
10.1 预恢复命令
mariabackup --prepare --apply-log-only \
--target-dir=/backup/dbbak
- 2.合并增备文件到全备
10.2 合并命令
mariabackup --prepare \
--target-dir=/backup/dbbak/ \ # 指定全备目录
--incremental-dir=/backup/dbbak/exba # 指定增备目录
10.1 合并命令
mariabackup --prepare --apply-log-only \
--target-dir=/backup/dbbak/ \ # 指定全备目录
--incremental-dir=/backup/dbbak/exba # 指定增备目录
注:按照官方文档说法,假如有1个全备,多个增备,需要依次合并,直到最后一个才能形成完整全备文件。感觉有点麻烦,还不如备份时按照一个全备,1个增备进行备份,或者直接使用逻辑备份。
- 3.增备恢复
剩下的步骤和全备恢复差不多,不在具体叙述
3.3 备份部分库、表
使用Mariabackup可以备份部分数据,比如备份指定的库或者表;包含的参数如下:
- 1.- -database:需要备份的数据库或者表
# 格式
--databases="database[.table][ database[.table] ...]"
# 示例1:备份时只备份某个库
mariabackup --backcup \
--databases="test" \ # 备份指定数据库
--target-dir=/backup/dbbak/test \ #全备新增一个test文件夹,存放test库备份
--user=root --password=mypassword
# 示例2:备份时只备份库下的某个表
mariabackup --backcup \
--databases="test.table1 test.table2" \ # 备份指定库下的表
--target-dir=/backup/dbbak/test \
--user=root --password=mypassword
- 2.- -databases-exclude:备份时排除的表
格式:--databases-exclude="database[.table][ database[.table] ...]"
示例1:备份时排除test里的table1和table2表
mariabackup --backcup \
--databases="test" \ # 备份指定库
--databases-exclude="test.table1 test.table2" \ # 备份时排除指定库下的表
--target-dir=/backup/dbbak/test \
--user=root --password=mypassword
示例2 :备份时排除test库
mariabackup --backcup \
--databases-exclude="test" \
--target-dir=/backup/dbbak/test \
--user=root --password=mypassword
- 3.- -databases-file:从文件指定需要备份库或者表
格式: --databases-file="/path/to/database-file"
假如我们备份的库或者表过多的好,在命令行不方便操作,那么我们可以预先把需要导出的表名定义成文本文件,然后备份的时候引入一下即可;
# 定义一个需要备份的库或者表
[root@pev ~]# cat data-file
test
test1
test.table1
test.table2
test1.table1
test1.table2
示例::
mariabackup --backcup --databases-file=/root/data-file \
--target-dir=/backup/dbbak/test/ \
--user=root --password=mypassword
- 4.–tables、–tables-exclude:备份表,排除表
备份和排除时,可以使用正则进行匹配,格式:--tables=REGEX(正则表达式)
示例:
mariabackup --backup \
--databases=test \ # 备份时指定库
--tables=nodes_* \ # 备份所有表名为nodes_XX的表
--tables-exclude=nodes_tmp \ # 备份时排除nodes_tmp表
--target-dir=/backup/dbbak/test/ \
--user=root --password=mypassword
- 恢复工作
恢复过程和增倍全备差不多,也是准备预恢复文件-停服务-恢复-修复权限-起服务
- 准备预恢复文件
注意:在mariadb10.2.8之前的版本不支持–export选项,查看版本号可以用mysql -V
进行查看
示例:
mariabackup --prepare --export \
--target-dir=/backup/dbbak/test/
剩下的恢复步骤和正常恢复一样,不在叙述
3.4 主从备份
因为没有相关的环境,无法做测试,具体的可以参考官方文档
https://mariadb.com/kb/en/setting-up-a-replication-slave-with-mariabackup/
四、备份脚本
- 4.1 全备脚本
首先创建一个全备目录mkdir -p /backup/dbbak/fullbak
,
#!/bin/bash
bak_dir='/backup/dbbak/fullbak'
bak_date="fb_$(date +'%Y%m%d%H%M')"
mariabackup --backup --target-dir=${bak_dir}/${bak_date} --user=root --password=mypassword
更多推荐
所有评论(0)