MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份。

同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤:

备份(--backup)=> 应用日志(--apply-log)=> 恢复(--copy-back)

备份

# ./mysqlbackup --backup_dir=/backup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock backup

在备份目录下,会生成以下文件

# ls
backup-my.cnf datadir meta server-all.cnf server-my.cnf

其中datadir和meta是目录,其它是变量配置文件

backup-my.cnf

官方解释如下:

Records the configuration parameters that specify the layout of the MySQL data files.

# cat backup-my.cnf
#
# Generated backup-my.cnf file.
# Auto generated by mysqlbackup program.
#
[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_file_size=
innodb_log_files_in_group=
innodb_page_size=
innodb_checksum_algorithm=innodb

server-all.cnf

该文件记录了备份数据库的所有全局参数

server-my.cnf

该文件记录了备份数据库的非默认的全局参数

注意:在恢复数据库时,可使用server-all.cnf和server-my.cnf中的任意一个。如果需要将数据库恢复到非默认路径,还要修改路径相关的变量值。

再来看看meta目录中的文件

# ls meta/
backup_content.xml backup_create.xml backup_gtid_executed.sql backup_variables.txt MEB_2016--27.10--21_backup.log

MEB_2016-09-27.10-49-21_backup.log

记录了此次备份的详细信息

backup_content.xml

记录了备份文件的元数据信息和数据库定义信息,同时还记录了备份数据库的plugin信息,恢复时必须确保这些插件在目标数据库中同样存在。

backup_create.xml

记录了备份操作的相关信息,包括备份命令,备份的时间,备份的目录,数据库的参数信息

上述两个文件可通过--disable-manifest选项禁用。

backup_gtid_executed.sql

因为备份数据库启动了GTID复制,故会生成该文件记录GTID的信息

# cat backup_gtid_executed.sql
# On a new slave, issue the following command if GTIDs are enabled:
SET @@GLOBAL.GTID_PURGED='844e8202-8391-11e6-accb-000c29c64704:1-328944'; # Use the following command if you want to use the GTID handshake protocol:
# CHANGE MASTER TO MASTER_AUTO_POSITION=;

backup_variables.txt

记录了备份的相关信息,该文件由mysqlbackup来控制的,譬如apply_log_done指示是否进行了apply-log操作

# cat backup_variables.txt
#
# This file is auto generated by mysqlbackup.
#
[backup_variables]
start_lsn=
end_lsn=
apply_log_done=
is_incremental=
is_incremental_with_redo_log_only=
is_partial=
is_compressed=
is_skip_unused_pages=
binlog_position=mysql-bin.:
gtid_executed=844e8202--11e6-accb-000c29c64704:-
is_onlyinnodb=

关于各文件的说明,可参考官方文档的解释

https://dev.mysql.com/doc/mysql-enterprise-backup/3.12/en/meb-files-overview.html

应用日志

./mysqlbackup --backup-dir=/backup/ apply-log

MySQL Enterprise Backup version 3.9. [//]
Copyright (c) , , Oracle and/or its affiliates. All Rights Reserved. mysqlbackup: INFO: Starting with following command line ...
./mysqlbackup --backup-dir=/backup/ apply-log IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'apply-log' run mysqlbackup
prints "mysqlbackup completed OK!". :: mysqlbackup: INFO: MEB logfile created at /backup/meta/MEB_2016--27.11--43_apply_log.log --------------------------------------------------------------------
Backup Config Options:
--------------------------------------------------------------------
datadir = /backup/datadir
innodb_data_home_dir = /backup/datadir
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /backup/datadir
innodb_log_files_in_group =
innodb_log_file_size =
innodb_page_size =
innodb_checksum_algorithm = innodb mysqlbackup: INFO: Uses posix_fadvise() for performance optimization.
mysqlbackup: INFO: Creating buffers each of size .
:: mysqlbackup: INFO: Apply-log operation starts with following threads
read-threads process-threads
:: mysqlbackup: INFO: ibbackup_logfile's creation parameters:
start lsn , end lsn ,
start checkpoint .
InnoDB: Doing recovery: scanned up to log sequence number
mysqlbackup: INFO: InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent:
mysqlbackup: INFO: InnoDB: Setting log file size to
mysqlbackup: INFO: InnoDB: Setting log file size to
:: mysqlbackup: INFO: We were able to parse ibbackup_logfile up to
lsn .
mysqlbackup: INFO: Last MySQL binlog file position , file name mysql-bin.
:: mysqlbackup: INFO: The first data file is '/backup/datadir/ibdata1'
and the new created log files are at '/backup/datadir'
:: mysqlbackup: INFO: Apply-log operation completed successfully.
:: mysqlbackup: INFO: Full backup prepared for recovery successfully. mysqlbackup completed OK!

在应用日志之前,

数据目录中并没有redo log

[root@localhost datadir]# ls
ibbackup_logfile ibdata1 mysql performance_schema test

在应用完日志之后,

数据目录中会生成redo log

[root@localhost datadir]# ls
ibbackup_logfile ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema test

恢复

./mysqlbackup --defaults-file=/backup/server-my.cnf --backup-dir=/backup/ copy-back

./mysqlbackup --defaults-file=/backup/server-my.cnf --backup-dir=/backup/ copy-back
MySQL Enterprise Backup version 3.9. [//]
Copyright (c) , , Oracle and/or its affiliates. All Rights Reserved. mysqlbackup: INFO: Starting with following command line ...
./mysqlbackup --defaults-file=/backup/server-my.cnf
--backup-dir=/backup/ copy-back IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'copy-back' run mysqlbackup
prints "mysqlbackup completed OK!". :: mysqlbackup: INFO: MEB logfile created at /backup/meta/MEB_2016--27.15--55_copy_back.log --------------------------------------------------------------------
Server Repository Options:
--------------------------------------------------------------------
datadir = /usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/data/
innodb_data_home_dir = /usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/data/
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/data/
innodb_log_files_in_group =
innodb_log_file_size =
innodb_page_size =
innodb_checksum_algorithm = innodb
innodb_undo_directory = /usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/data/
innodb_undo_tablespaces =
innodb_undo_logs = --------------------------------------------------------------------
Backup Config Options:
--------------------------------------------------------------------
datadir = /backup/datadir
innodb_data_home_dir = /backup/datadir
innodb_data_file_path = ibdata1:12M:autoextend
innodb_log_group_home_dir = /backup/datadir
innodb_log_files_in_group =
innodb_log_file_size =
innodb_page_size =
innodb_checksum_algorithm = innodb mysqlbackup: INFO: Uses posix_fadvise() for performance optimization.
mysqlbackup: INFO: Creating buffers each of size .
:: mysqlbackup: INFO: Copy-back operation starts with following threads
read-threads write-threads
:: mysqlbackup: INFO: Copying /backup/datadir/ibdata1 (to '/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data')
. :: mysqlbackup: INFO: Copying /backup/datadir/mysql/innodb_index_stats.ibd.
:: mysqlbackup: INFO: Copying /backup/datadir/mysql/innodb_table_stats.ibd.
:: mysqlbackup: INFO: Copying /backup/datadir/mysql/slave_master_info.ibd.
:: mysqlbackup: INFO: Copying /backup/datadir/mysql/slave_relay_log_info.ibd.
:: mysqlbackup: INFO: Copying /backup/datadir/mysql/slave_worker_info.ibd.
:: mysqlbackup: INFO: Copying /backup/datadir/test/test.ibd.
:: mysqlbackup: INFO: Copying the database directory 'mysql'
:: mysqlbackup: INFO: Copying the database directory 'performance_schema'
:: mysqlbackup: INFO: Copying the database directory 'test'
:: mysqlbackup: INFO: Completing the copy of all non-innodb files.
:: mysqlbackup: INFO: Copying the log file 'ib_logfile0'
:: mysqlbackup: INFO: Copying the log file 'ib_logfile1'
:: mysqlbackup: INFO: Creating server config files server-my.cnf and server-all.cnf in /usr/local/mysql-advanced-5.6.-
linux-glibc2.-x86_64/data/ :: mysqlbackup: INFO: Copy-back operation completed successfully.
:: mysqlbackup: INFO: Finished copying backup files to '/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/' mysqlbackup completed OK!

关于恢复,有以下几点需要注意

1. 恢复必须使用配置文件,建议备份目录下的server-all.cnf和server-my.cnf,事实上,在恢复的过程中,mysqlbackup需要明确上述输出中的参数,譬如,我使用了自己的配置文件进行恢复,结果报如下错误:

# ./mysqlbackup --defaults-file=/usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/my.cnf --backup-dir=/backup/
copy-backMySQL Enterprise Backup version 3.9. [//]
Copyright (c) , , Oracle and/or its affiliates. All Rights Reserved. mysqlbackup: INFO: Starting with following command line ...
./mysqlbackup
--defaults-file=/usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/my.cnf
--backup-dir=/backup/ copy-back IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'copy-back' run mysqlbackup
prints "mysqlbackup completed OK!". :: mysqlbackup: INFO: MEB logfile created at /backup/meta/MEB_2016--27.15--09_copy_back.log mysqlbackup: ERROR: Server innodb_log_files_in_group is missing or invalid
mysqlbackup: ERROR: Server repository configuration problem found. mysqlbackup failed with errors!

很显然,我的配置文件中并没有定义innodb_log_files_in_group参数。

2. 可在上述配置文件中server-all.cnf和server-my.cnf自定义数据目录和base目录,不然默认的都是备份数据库的。

3. 虽然mysqlbackup --help中的解释是:The restore operation assumes the server is offline. Use of this command when server is running is not supported.

但事实上,在server是online的情况下,执行恢复操作并没有报错,甚至还显示“mysqlbackup completed OK!”。但是,并没有覆盖数据目录中的文件。

4. 在启动数据库的过程中,可以使用server-my.cnf或备份数据库的配置文件,不要使用server-all.cnf。在使用server-all.cnf启动数据库的过程中,会报如下错误:

-- ::  [ERROR] /usr/local/mysql-advanced-5.6.-linux-glibc2.-x86_64/bin/mysqld: Table './mysql/user' is marked a
s crashed and should be repaired2016-- :: [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/user' is marked as crashed and sh
ould be repaired

这个坑定位了好久,因为server-all.cnf中定义的是所有参数的配置,怀疑跟某些参数有关,因参数较多,时间有限,并没有一一验证。

启动数据库

修改数据目录的权限

# chown -R mysql.mysql /usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data

启动数据库

# /usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/bin/mysqld --defaults-file=/usr/local/mysql-advanced-5.
6.23-linux-glibc2.5-x86_64/my.cnf --user=mysql &

总结

以上只是mysqlbackup的一个简单的备份恢复流程,事实上,mysqlbackup还支持压缩备份等高级特性,后续再表。

基于MySQL MEB的备份恢复的更多相关文章

  1. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  2. MySQL基于mysqldump及lvmsnapshot备份恢复

    一.备份对象 数据 配置文件 代码:存储过程,存储函数,触发器 跟复制相关的配置 二进制日志文件 二.备份工具 mysqldump:逻辑备份工具 InnoDB热备.MyISAM温备.Aria温备 备份 ...

  3. MySQL基于LVM快照的备份恢复(临时)

    目录1.数据库全备份2.准备LVM卷3.数据恢复到LVM卷4.基于LVM快照备份数据5.数据灾难恢复6.总结 写在前面:测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷, ...

  4. mysql之6备份恢复

    基本意义: 将数据另存到其他设备,以便于出现问题时恢复数据     为什么要备份: 灾难恢复:需求改变:测试     几个事先需要考虑的问题: 可以容忍丢失多长时间的数据?恢复要在多长时间内完成?是否 ...

  5. MySQL实时在线备份恢复方案

    开源Linux 长按二维码加关注~ 上一篇:2020年MySQL数据库面试题总结 快照和复制技术的结合可以保证我们得到一个实时的在线MySQL备份解决方案. 当主库发生误操作时,只需要恢复备库上的快照 ...

  6. mysql日志与备份恢复

    一.mysql日志: mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES ...

  7. 一文搞懂│mysql 中的备份恢复、分区分表、主从复制、读写分离

    目录 mysql 的备份和恢复 mysql 的分区分表 mysql 的主从复制读写分离 mysql 的备份和恢复 创建备份管理员 创建备份管理员,并授予管理员相应的权限 备份所需权限:select,r ...

  8. mysql之 mysqldump 备份恢复详解

    mysqldump是MySQL用于转存储数据库的客户端程序.转储包含创建表和/或装载表的SQL语句 ,用来实现轻量级的快速迁移或恢复数据库,是mysql数据库实现逻辑备份的一种方式. mysqldum ...

  9. mysql 命令行 备份 恢复数据

    找到mysql启动位置 whereis mysql 备份指定数据库 包括表结构和数据 使用命令mysqldump 数据库名 -u 用户名 -p > 存储文件路径 [root@izm5e16gjd ...

随机推荐

  1. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  2. RPC 使用中的一些注意点

    最近线上碰到一点小问题,分析其原因发现是出在对 RPC 使用上的一些细节掌握不够清晰导致.很多时候我们做业务开发会把 RPC 当作黑盒机制来使用,但若不对黑盒的工作原理有个基本掌握,也容易犯一些误用的 ...

  3. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  4. 【.net 深呼吸】跨应用程序域执行程序集

    应用程序域,你在网上可以查到它的定义,凡是概念性的东西,大伙儿只需要会搜索就行,内容看了就罢,不用去记忆,更不用去背,“名词解释”是大学考试里面最无聊最没水平的题型. 简单地说,应用程序域让你可以在一 ...

  5. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  6. .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?

    配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个 ...

  7. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

  8. 从netty-example分析Netty组件

    分析netty从源码开始 准备工作: 1.下载源代码:https://github.com/netty/netty.git 我下载的版本为4.1 2. eclipse导入maven工程. netty提 ...

  9. 【夯实PHP基础】UML序列图总结

    原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...

  10. js 入门级常见问题

    写在前面:以下是个人总结的关于js常见的入门级的问题一些总结. js是有 ECMAScript Dom Bom 三部分组成. 1,undefined,NaN,Null,infinity 1) unde ...