上一篇已经,针对XTRABACKUP 的在版本上的问题,导致在使用较新版本的MYSQL上,只能使用mysqlbakcup. 到底mysqlbakcup 是一个什么样的企业级别的工具。今天我们就看看他有什么样的功能。
mysqlbackup,简称 MEB,是ORACLE 为企业版本MYSQL开发的一套备份工具,通过这个工具我们可以很好的来进行MYSQL 的备份。其中支持热备,增量备份,数据选择性备份等功能,以及恢复数据的功能。
通过并行的方式来对数据库中的数据来进行block级别进行并行备份,提高备份效率和速度。
这里MEB ,支持MYSQL 数据库的三种备份方式, FULL,Differential, Incremental . 同时支持对这些数据的压缩后的存储方式。在对数据备份后,会产生三类文件,ibdata* , ibd , ibz 其中, ibdata 是innodb 系统表空间的数据,而 ibd 是数据文件,ibz是压缩后的数据文件,另外还带有一些 backup-mysql.cnf, 备份时的 my,cnf 的备份,以及做增量备份时产生的 ibbackup_ibd_files 和 ibbackup_logfile 的增量数据文件和日志文件。当然也有后续 MYSQL 对REDO LOG 整改后的对 redo log 单独备份的方式。
下面我们列一个表格,针对mysqlbackup ,MEB 对数据的备份步骤进行一个简单的归总。
序号 | 工作内容 |
1 | 在执行mysqlbackup命令后,备份软件会针对 系统中的 innodb data files ,redo log, binary log , relay log ,等当前不在线的数据和日志文件进行copy 到指定的备份目录中去。 |
2 | 在COPY的同时会添加一个backup lock 将DDL的操作禁止, 备份程序会扫描innodb的表并对表进行快速的加载backup lock锁的工作 |
3 | 在简短的上锁后,MEB会对当前的日志信息的LSN号进行记录,以及binlog 的位置,GTID,复制源信息或者复制的状态等等进行记录 |
4 | 此时如果有不是INNODB 的表,就会被锁释放然后持续的针对binlog , 然后持续拷贝binlog ,relay log |
5 | 在COPY 文件结束后,backup lock 将被释放数据库将恢复到正常的状态。 |
6 | 在此确认redo log 文件和元数据文件已经被完全COPY |
7 | 备份工作完毕 |
同时在MEB,之前备份中对于主节点中的一些VIEW中的关于组复制,或者称为 innodb cluster的一些成员信息会动态写入到backup_history 的表中方便恢复后,将动态的一些信息还原。
那么具体在备份开始,MEB对数据库中所需的权限进行说明
备份前收集信息,收集的信息包含 mysql 的配置文件,包含端口号,数据目录,用户名密码,数据库中元数据,验证是否对要备份的数据目录有文件权限。 |
针对备份MEB 中的账号的权限需求,进行判断,包含账号是否具有对所有的数据库具有,select ,backup_admin,reload ,super,replication client(binlog position获取需求),process ,同时需要针对 mysql.backup_history, mysql.backup_prcess 等表具有 create,insert, drop ,update ,alter 等权限。 |
CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO `mysqlbackup`@`localhost`; GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbackup'@'localhost'; GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history TO 'mysqlbackup'@'localhost'; |
在获得这些备份中所需的基本权限后,我们的备份的工作才刚刚能正常进行在备份前,还有对于mysqlbackup 在操作系统中的一些要求和建议
1 执行 mysqlbackup命令建议是在数据库备份源的主机中运行命令,而不是通过网络传送命令,具体原因,请参见下方官方的解释和建议
2 在执行恢复的数据库的命令时,建议也在恢复的数据库主机上执行相关的命令,而不是通过网络来发送命令
mysqlbackup --user=mysqlbackup --password=1234.Com --socket=/data/mysql.sock --backup-dir=/backup --backup-image=/backup/8030.mbi backup-to-image
备份完毕后,我们产生了如下图的文件
下面我们逐一的通过打印的日志来分析过程和对产生的文件进行分析
首先在执行备份命令后,应用程序开始通过参数的输入,对比输入的参数是否符合程序的要求,
然后备份系统开始与数据库系统建立连接,并且验证备份软件和数据库之间的版本的匹配度,然后开始在数据库MYSQL中建立两张表 mysql.backup_progress ,然后在确认被目录是否可用,在然后建立备份中所需的目录和日志文件等如 meb 日志。
在然后,系统开始对MYSQL中 my.cnf 配置信息进行比对和保存复制
然后备份正式开始,产生对此次备份的ID 需求,创建备份中需要得buffer,得到当前的checkpoint 点,并判断当前的数据库中是否有redo log archive的设置。以及当前的日志的lsn号以及在redo log 中对应的文件关系。
然后就开始备份,拷贝文件,这里通过1个读,一个写,还有6个过程线程进行工作。然后就是备份文件
并且在备份中,获取LSN号,并且开始刷新REDO LOG 并且记录LSN号,后面直接加锁,对数据库中的备份的数据文件进行copy , 锁持续了770毫秒在copy 完毕后,记录log 日志的 lsn 信息,开始,终止信息,然后copy binlog 信息,
然后这些copy 和嬉戏都做完后,解锁。最后将元数据信息分布到 meta 目录下的多个文本文件中进行保存,整体的full 备份结束。
下面是备份的数据文件
8030.mbi 备份的总体的数据文件
backup-my.cnf 不能改变的my.cnf 的配置内容
datadir
meta 中保存这整体备份中产生的备份的过程信息,标记信息和备份文件的信息,备份中涉及的命令变量,以及备份的日志等信息。
server-all.cnf 系统中所有的配置信息和值
server-my.cnf
到这里仅仅针对 MEB 的粗浅的工作,有一个简单的认识,到底 MEB 为什么是目前最好的mysql backup 工具,我们还的往下分析和学习。