对于企业版的用户,还有不少人没有使用过此备份工具。其实此工具是包含在企业版本内的,如此好工具如未能使用,那也是一种严重的资源浪费。

Mysqlbackp支持的功能:

Online Backup for InnoDB
Support for MyISAM (Read-only)
High Performance Backup & Restore
Compressed Backup
Full Backup
Incremental Backup
Partial Backups
Point in Time Recovery
Unlimited Database Size
Cross-Platform
Windows, Linux, Unix

mysqlbackup的优势:

Online “Hot” Backup (Non-blocking)

   Reads and Writes to InnoDB
   Reads for MyISAM tables
High Performance
   Backup: >3x faster than mysqldump (export)
   Restore: >10x than mysqldump recovery
Consistent Backups
   Point in Time Recovery
Compression
   Multi-level compression
   Save 70% or more of the storage required

Mysqlbackup的操作手册

以下大部分内容转载自

A.1.2是本人添加的新内容。

Mysqlbackup 企业级备份工具详解(针对版本3.9.0)

A.1.1全库备份.

命令:

mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf --user=root --password=root  --databases="mysql total2"--with-timestamp   --backup-dir=/home/mysql-server/backup  backup

参数说明:    

--defaults-file my.cnf文件的路径,主要用于一台服务器多个mysql服务.默认位置是/etc/my.cnf

--user 用户名,这个用户必须在mysql库里面有创建table和查询,插入的权限.在备份的过程中.mysqlbackup会在mysql库下建立backup_history,backup_progress.用户保留备份的历史信息和备份的基础信息.  

--password密码

--database 需要备份的数据库,要备份多个数据库需要用””包括起来,每个数据库中间用空格分开

--with-timestamp用户创建一个备份目录下面当前时间的文件夹,如果没有这个参数,多次备份时,制定同一个目录,会使上一次备份的文件覆盖掉.

--backup-dir备份的目录

Backup 表明,这是备份操作

A.1.1部分备份(只备份innodb表).

mysqlbackup--defaults-file="/var/lib/mysql/my.cnf" --user=root--password=root --backup-dir=/home/mysql-server/backup --only-innodb --include=‘ompdb\.*’ backup

mysqlbackup--defaults-file="/var/lib/mysql/my.cnf" --user=root--password=root --backup-dir=/home/mysql-server/backup --only-innodb-with-frm --include=‘ompdb\.*’ backup

--only-innodb 只备份Innodb表的数据,不包括frm文件

--only-innodb-with-frm 备份Innodb表的数据和相应的frm文件

--include 需要备份的Innodb数据表的正则匹配条件。上面列出的--databases的选项是用来过滤非Innodb表的。这就是为何你加上了--database选项,还能在备份目录下看到mysql系统数据库的原因。

A.2全库还原.

第一步:检测事务日志

Mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf  --backup-dir=/home/mysql-server/backup/2012-03-21_14-01-34/ apply-log

参数说明:

apply-log:因为在备份的时候是在线的,如果有新插入的SQL语句,会记录新增加的LSN,然后新修改的页面会放到这个文件里面(ibbackup_logfile,同时也会放到表空间里面.当还原使用这个参数的时候,mysqlbackup会检测ibbackup_logfile和表空间的LSN,然后比较ibbackup_logfile文件表空间LSN的差值,把这个值放到事务日志LOG里面.(事务日志如果填满了,会进入表空间的)

第二步:copy物理文件

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf --backup-dir=/home/mysql-server/backup/2012-03-21_14-01-34/ --innodb_log_files_in_group=2  copy-back

#注意:在还原的时候,my.cnf文件中必要要有datadir的参数

B.1压缩全库备份

mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf --user=root --password=root --compress-level=1 --databases="mysqltotal2" --with-timestamp  --backup-dir=/home/mysql-server/backup  backup

参数说明:

--compress-level=1

1为快速压缩.共有9个等级

B.2压缩还原

第一步:检测事务日志,并解压

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf --uncompress--backup-dir=/home/mysql-server/backup/2012-03-21_14-08-33/apply-log

uncompress解压压缩后的文件.

第二步:copy物理文件

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf--innodb_log_files_in_group=2--backup-dir=/home/mysql-server/backup/2012-03-21_14-08-33/ copy-back

#注意:在还原的时候,my.cnf文件中必要要有datadir的参数

增量备份不支持压缩.backup-and-apply-log参数不能跟--compress-level同用

C.1备份时,同时释放事务日志

备份

mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf  --user=root--password=root  --databases="mysql total2"--with-timestamp    --backup-dir=/home/mysql-server/backup  backup-and-apply-log

参数说明:

backup-and-apply-log这个参数,在备份的时候,就把事务日志检测的功能就完成了,并把ibbackup_logfile与表空间差值的LSN内容放入到了事务日志里面,所以在还原的时候,就只需要备份物理文件就行

还原

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf--innodb_log_files_in_group=2--backup-dir=/home/mysql-server/backup/2012-03-21_19-25-09/ copy-back    

D.1增量备份

第一次增量备份:

mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf  --user=root--password=root   --with-timestamp

--databases=”mysql total2”--incremental --incremental-backup-dir=/home/mysql-server/in/ --incremental-base=dir:/home/mysql-server/backup/2012-03-22_11-10-28 backup

参数说明:

--incremental:代表为增量备份.

--incremental-backup-dir:增量备份存放到哪个路径下

--incremental-base:增量备份的基础备份或增量备份的文件

第二次增量备份:

mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf  --user=root--password=root   --with-timestamp

--databases=”mysql total2” --incremental --incremental-backup-dir=/home/mysql-server/in/ --incremental-base=dir:/home/mysql-server/backup/2012-03-22_11-15-28 backup

参数说明:

--incremental-base:这里的备份,就是上一次增量备份的路径

增量备份原理:增量备份是基于第一次的完整备份之后,通过完整最后的LSN点这个基础在往后进行备份.当第二次增量备份的时,就基于前一次增量备份的LSN点的基础在进行备份.所以--incremental-base这个参数在增量备份的时候,是指向上一次全备份或增量备份的LSN

D.2增量还原

1.全备检测匹配释放事务日志

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf --backup-dir=/home/mysql-server/backup/2012-03-21_17-59-54/apply-log

2.检测匹配释放第一次的增量备份

mysqlbackup --backup-dir=/home/mysql-server/backup/2012-03-21_17-59-54/ --incremental-backup-dir=/home/mysql-server/in/2012-03-22_11-47-47/ apply-incremental-backup

3.检测匹配释放第二次的增量备份

mysqlbackup --backup-dir=/home/mysql-server/backup/2012-03-21_17-59-54/ --incremental-backup-dir=/home/mysql-server/in/2012-03-22_11-50-47/ apply-incremental-backup

4.最后进行物理文件复制

mysqlbackup--defaults-file=/home/mysql-server/mysql2/my.cnf --backup-dir=/home/mysql-server/backup/2012-03-21_17-59-54/copy-back

增量还原原理:

1.               首先检测匹配释放全备事务日志文件(当然如果备份中使用了backup-and-apply-log,在备份的时候,已经检测匹配了,就不需要这一步了)

2.               第一次增量备份的文件释放到全备文件里面.(首先会进入事务日志,然后是表空间),所以--backup-dir指向全备目录(基于LSN点向后增加)

3.               第二次增量备份的文件也是释放到全备文件里面.(首先会进入事务日志,然后是表空间),因为第一次的增量备份后,全库里面已经有了第一次的LSN,所以二次还原的时候同样指向全备文件里面使LSN点在外后增加

4.               因为增量的页面,已经全部进入了事务日志或表空间,这个时候,就可以直接备份物理文件了.

但最后依然记住…

#=======================================================================

把先备份的系统库MV到原来的地方

修改data目录的权限(如果你设置的是已MySQL用户访问的话)

chown-R mysql.mysql data

#=========================================================================

在启动mysqlserver..

Mysqlbackup工作原理

1.       mysqlbackupinnodb的表空间进行物理复制,但是,它是记录LSN点的,在备份过程中,新增加的输入直接写入备份文件的ibbackup_logfile.同时记录最后的LSN

2.       mysqlbackupmyisam进行的是锁表全备.就算是增量备份,它依然是全备.

3.       还原的时候,检测对比ibbackup_logfile文件里面与表空间里面的差值,使ibbackup_logfile里面的数据进入事务日志或表空间

4.       在备份文件中的meta/backup_variables.txt文件中记录了备份的一些信息

[backup_variables]

start_lsn=1602048                                              #开始备份的LSN

end_lsn=687810168                                          # 结束LSN

apply_log_done=1                                            # 是否释放检测ibbackup_logfile文件(0表示没有,1表示已经释放)

is_incremental=0                                               #是否是增量为增量备份文件(0:,1:)

is_incremental_with_redo_log_only=0             # 只配置重做日志,当输入数据大小重做日志大小时,会有一场抛出

is_partial=1                                                       # 是服务器备份还是部分备份(0表示全服务器备份,1表示部分备份)

is_compressed=0                                             #是否压缩(0表示没有压缩,1表示压缩)

binlog_position=mysql-bin.000001:107         # 二进制文件大小

is_onlyinnodb=0                                               #是否只备份了innodb的表