客户一套Mysql用NBU不能备份,工程师到达现场后检查发现:Mysql是MariaDB,NBU为7.7.3版本,而且安装了Agent,配置了脚本。查看配置未发现任何故障,于是,找到一台相似的Mysql,通过详细比对发现path的环境变量不同,也就是MariaDB和Mysql的目录结构不一样。虽然很多人认为MariaDB是Mysql的开源版本,但在NBU支持方面,MariaDB稍逊一筹。查看 Knowledgebase发现,NBU在8.0之后的版本做了一些改动,能够支持MariaDB。
但显然7.7.3版本是不支持的,那么MariaDB都有哪些备份方式呢?
MariaDB的NBU备份方式有以下几种:
1、导表。Mariadump导出数据后用NBU以备份文件的方式备份dump文件;但毕竟属于逻辑导出,并不完善,不推荐;
2、工具1-Percona XtraBackup。Percona XtraBackup是一款开源的备份软件,也是可实现对表级别的备份,在10.3版本之前主要用于MariaDB的备份,后被Mariabackup取代,可实现备份目的,但由于是完全开源,对版本的支持性不好,不推荐;
3、代理。由于NBU的Agent需要安装客户端,利用Agent的方式备份数据到一个文件,然后备走对于文件;但此种方式需要在NBU 8.0之后才支持MariaDB,不推荐;
4、工具2 -Mariabackup。Mariabackup不同于Xtrabackup,是官方支持且推荐的企业级备份方式。同样,备份完成后的文件也可以通过NBU以备份文件的方式备份出来,推荐。
下面主要介绍Mariabackup的概况、备份和恢复:
基于MariaDB的Mariabackup备份恢复
1、Mariabackup的安装部署
Mariabackup是MariaDB提供的开源工具,用于对InnoDB、Aria和MyISAM表进行物理在线备份。InnoDB采用“热门在线”方式备份,最初来自Percona XtraBackup 2.3.8版本,适用于Linux和Windows。
MariaDB 10.1引入了MariaDB的独有功能,例如InnoDB页面压缩和静态数据加密,这些独有功能在MariaDB用户中非常受欢迎。但是,来自MySQL生态系统的现有备份解决方案(如Percona XtraBackup)不支持这些功能的完全备份。 为满足用户需求,我们决定通过创建Mariabackup(Mariabackup以广泛使用的备份工具-Percona XtraBackup为基础,从其2.3.8版本扩展而来。),制定一个可完全支持MariaDB独有功能的备份解决方案。 Mariabackup支持的功能 Mariabackup支持Percona XtraBackup 2.3.8版本的所有主要功能,另外还有如下特点: a.使用静态数据加密备份/恢复表; b.使用InnoDB页面压缩备份/恢复表; c.Galera Cluster的mariabackup SST方法; d.Microsoft Windows支持; e.使用从MariaDB 10.2.16版本和MariaDB 10.3.8版本开始的MyRocks存储引擎备份/恢复表。 MariaDB Enterprise Backup支持一些其他功能: a.在备份期间最小化锁定以实现范围更广、更高效的备份: 1)依赖于BACKUP STAGE命令和DDL日志记录的使用; 2)在ALTER TABLE语句的复制阶段没有锁定,往往是这些语句的最长阶段。 b.为本地磁盘上存储内容的所有存储引擎提供最佳备份支持。 与Percona XtraBackup相比的差异 a.Percona XtraBackup将其InnoDB重做日志文件复制到文件xtrabackup_logfile;Mariabackup使用文件ib_logfile0; b.Mariabackup 不支持 以 libgcrypt为基础的Percona XtraBackup的备份加密; c.因为是Xtrabackup,没有符号链接Mariabackup和Innobackupex;相反,Mariabackup有Innobackupex命令行选项来启用Innobackupex兼容的选项; d.在--compact与--rebuild_indexes不支持的选项; e.MariaDB 10.1.24版本中,Mariabackup删除了--stream=tar的支持; f.该Xbstream实用程序已重命名为Mbstream。但要在创建备份时选择此输出格式,Mariabackup的--stream选项仍然需要该Xbstream值; g.Mariabackup不支持无锁binlog。 版本控制方案的差异 a.每个Percona XtraBackup版本都有两个版本号 - Percona XtraBackup版本号及其对应的MySQL Server版本号。例如:Xtrabackup 2.2.8版本对应MySQL服务器5.6.22; b.每个Mariabackup版本只有一个版本号,与其对应的MariaDB Server版本的版本号相同。例如:Mariabackup对应的MariaDB服务器10.2.15-MariaDB Linux(x86_64)。 有关Mariabackup版本的更多信息,请参阅Mariabackup版本与MariaDB Server版本的兼容性。https://mariadb.com/kb/en/library/mariabackup-overview/#compatibility-of-mariabackup-releases-with-mariadb-server-releases |
2、MariaDB的Mariabackup备份
使用Mariabackup时,可选择执行完全备份或增量备份:完全备份在空目录中创建数据库服务器的完整备份,而增量备份通过备份过的数据更改来更新之前的备份。下文介绍如何执行完整备份。
为备份数据库,需要运行Mariabackup,选择--backup执行备份,使用--target-dir选项放置备份文件。进行完整备份时,目标目录必须为空或不存在。
备份需运行如下命令:
$ mariabackup --backup \
--target-dir=/var/mariadb/backup/ \
--user=mariabackup --password=mypassword
备份所需时间取决于目标数据库或表的大小。如有需要,可取消备份(备份过程不会修改数据库)。
Mariabackup将备份文件写入目标目录,若目标目录不存在,需创建目标目录;如果目标目录已存在并包含备份文件,则会引发错误并中止备份。
图为示例备份目录:
$ ls /var/mariadb/backup/
aria_log.0000001 mysql xtrabackup_checkpoints
aria_log_control performance_schema xtrabackup_info
backup-my.cnf test xtrabackup_logfile
ibdata1 xtrabackup_binlog_info
3、 MariaDB的Mariabackup恢复
准备备份
备份操作期间,在不同时间点复制数据文件,会使Mariabackup在目标目录中创建的数据文件时间点不一致。如果尝试从复制文件还原,InnoDB会检测到不一致的情况并中止备份,避免数据文件受损。
备份还原之前,需提前准备使数据文件保持一致:
$ mariabackup --prepare \
--target-dir = / var / mariadb / backup /
恢复备份
备份完成后,可使用--copy-back或--move-back选项还原备份。--copy-back选项允许保留原始备份文件;--move-back选项实际上是将备份文件移动到Datadir(原始备份文件将会丢失):
a.停止MariaDB Server进程;
b.确保Datadir是空的;
c.任选一种选项运行Mariabackup:
$ mariabackup --copy-back \
--target-dir = / var / mariadb / backup /
d.可能需要修复文件权限;
当Mariabackup还原数据库时,会保留备份的文件和目录权限,将文件作为用户和组,还原数据库写入磁盘。因此,在还原备份后,可能需要调整数据目录的所有者以匹配MariaDB服务器的用户和组。例如,要递归地将文件的所有权更改为Mysql用户和组,可以执行:
$ chown -R mysql:mysql / var / lib / mysql /
e.最后,启动MariaDB Server进程。
使用其他备份工具恢复
MariaDB完整备份后,就是一个功能齐全的MariaDB数据目录。因此,只要MariaDB Server进程在目标服务器上停止,便可使用任意文件复制工具恢复备份rysnc。
可执行以下操作来恢复备份:
$ rsync -avrP
/ var / mariadb / backup / var / lib / mysql /
$ chown -R mysql:mysql / var / lib / mysql /
$ rm / var / lib / mysql / ib_logfile *
以MariaDB 10.2.10之前的版本使用Mariabackup时,还必须删除所有预先存在的 InnoDB重做日志文件。例如:
$ rm / var / lib / mysql / ib_logfile *
4、MariaDB的Mariabackup实际备份语句示例
备份: 用户名为root 密码为P@ssw0rd 备份到目录/backup/$(date ‘+%y-%m-%d’)_fullbackup 这里$(date ‘+%y-%m-%d’)_fullbackup目录会自动创建,而backup需要自己创建。 mariabackup --backup --target-dir /backup/$(date '+%y-%m-%d')_fullbackup --user root --password P@ssw0rd |
恢复: 第一步:准备全备数据 mariabackup --prepare --target-dir --user backup_user --password backup_passwd 第二步:还原数据 (保证要还原的数据库服务器的data目录为空) mariabackup --copy-back --target-dir /backup/18-07-30_fullbackup --user root --password P@ssw0rd 第三步:修改data目录权限 因为备份的用户是root,还原过去的时候属主没有变化,所以要把还原数据的属主和属组修改一下 chown -R mysql:mysql /usr/local/mariadb/data |
增量备份与还原
备份: 完全备份:mariabackup --backup --target-dir /backup/fullbackup --user root --password P@ssw0rd 增量备份:mariabackup --backup --target-dir /backup/inc1 --incremental-basedir /backup/fullbackup --user root --password P@ssw0rd 这里的 /backup/fullbackup表示基于全备做的增量备份 |
有增量的恢复: 有增量的备份恢复,需要先将备份进行整合: a.准备全备的预读: mariabackup --prepare --target-dir /backup/fullbackup/ --user root --password P@ssw0rd --apply-log-only b.合并上增量备份: mariabackup --prepare --target-dir /backup/fullbackup/ \ --user root --password P@ssw0rd \ --incremental-dir /backup/inc1 --apply-log-only c.新建或清空目标位置目录/usr/local/mariadb/data/,当然也可将原目录改名后重建新的data; d.进行还原操作: mariabackup --copy-back --target-dir /backup/fullbackup/ \ --user root --password P@ssw0rd e.修改属主: chown -R mysql:mysql /usr/local/mariadb/data |
如欲了解更多,请登录安图特官方网站:www.antute.com.cn