一.概述

  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
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐