之前工作的时候,业务需要用到了Xtrabackup软件。于是在空闲的时候就写下这份Xtrabackup的应用文档。在这里共享给需要用到的兄弟姐妹们。文档撰写比较粗糙,有什么错误还请指教。

          Xtrabackup是一个免费的MySQL热备份软件,支持在线热备份InnoDB和XtraDB,也可以支持MyISAM

表的备份。

工具介绍

        在介绍  innobackupex 之前不得不提到的是Xtrabackup 软件。官网上的说法是,Xtrabackup 是一

个免费的 MySQL 热备份软件,支持在线热备份 InnoDB 和 XtraDB,也可以支持 MyISAM 表的备份,

不过需要在锁定表的情况下进行。

 

Xtrabackup 有三个主要的工具:xtrabackup、innobackupex、xbstream

 

其中:

 

        1) xtrabackup 是一个编译了的 C 二进制文件,只能够备份 InnoDB/XtraDB 数据

 

 2)  innobackupex 是一个封装了      xtrabackup 的 Perl 脚本,除了可以备份InnoDB/XtraDB,还可

以备份 MyISAM

 

        3) xbstream 是一个新的组件能够允许文件转 成 xbstream 格式或从 xbsteream 转到文件

 

        当然,你可以依照你的实际工作需求来选择备份的工具。你可以单独使用 xtrabackup工具,但是

 

还是推荐用      innobackupex 来备份,因为    innobackupex 本身就已包含了xtrabackup 的所有功能。

 

所以这篇文档只介绍了 innobackupex 工具的具体用法,xtrabackup并没有涉及,不过用法是相似的,

 

只是参数的表现方式不同而已。

 

        Xtrabackup 基于 InnoDB 的 crash-recovery 功能,备份工具会复制 innodb 的 datafile。但是,由于

 

不锁表,这样复制出来的数据就会不一致,在恢复的使用会自动使用crash-recovery,使得数据恢复一

 

致。这是由于 InnoDB 维护了一个 redo log,包含了 innodb数据的所有改动情况。当   InnoDB 启动

 

时,它会先去检查数据文件和重做日志文件。 在Xtrabackup 备份的时候,一页一页复制 innodb 的数

 

据,而且不锁定表。与此同时,Xtrabackup还有另外一个线程监视着重做日志,一旦日志发生变化,

 

就把变化过的日志 page 复制走。 在 prepare 阶段,Xtrabackup 使用复制到的重做日志对备份出

 

的 innodb 数据文件进 行crash recovery。

 

Xtrabackup 对 MyISAM 的复制,是按这样的一个顺序:先锁定表,然后复制,再解锁表。

 

安装和部署

 

本文档是以 Xtrabackup2.05为基础来编写的。

 

在 http://www.percona.com/downloads/XtraBackup/LATEST/下载最新 Xtrabackup 软件。

spacer.gif

推荐以源码方式安装,这里下载了 percona-xtrabackup-2.0.5.tar.gz。

 

直接解压:tar -zxvf  percona-xtrabackup-2.0.5.tar.gz

 

之后得到一个新的目录 percona-xtrabackup-2.0.5

spacer.gif

[root@localhost percona-xtrabackup-2.0.5]# ll

total 8

drwxr-xr-x 2 root root 4096 Jan

18 04:40 bin

drwxr-xr-x 4 root root 4096 Jan

18 04:40 share

[root@localhost percona-xtrabackup-2.0.5]# cd bin

[root@localhost bin]# ll

total 40372

-rwxr-xr-x

1

root root

106390

Jan 18 04:40

innobackupex

lrwxrwxrwx

1

root root

12

Mar  7 10:26

innobackupex-1.5.1 -> innobackupex

-rwxr-xr-x

1

root root

2258560

Jan 18

04:40

xbstream

-rwxr-xr-x 1 root root 12538596

Jan 18

04:35

xtrabackup

-rwxr-xr-x 1 root root 10653886

Jan 18

04:40

xtrabackup_51

-rwxr-xr-x

1

root root 15710599

Jan 18

04:29

xtrabackup_55

 

可以看到 percona-xtrabackup-2.0.5有两个目录其中一个 bin 就是存放着之前说过的备

 

份工具share 存放着 Xtrabackup 的测试脚本。

 

这里解释一个 bin 目录中各个文件的意义

 

除了之前说过的三个工具 innobackupexxtrabackupxbstream 外我们还可以看到几

 

个之前没提过的文件它们分别是 xtrabackup_51xtrabackup_55。在官网上市这样介绍的:

    

The xtrabackup binary actually exists as three separate binaries: xtrabackup, xtrabackup_51, and xtrabackup_55. This is to ensure binary compatibility ofInnoDBdatafiles across releases. Which binary you should use depends onthe version of the server that produced the data files you want to back up. It’ s important to use the correct binary. Whichever binary is used to create abackupshouldalso be the binary used to prepare that backup.

 

    原来 Xtrabackup 为了保证对这个 InnoDB 发行版的有效兼容而采取的一种人性化的做法。来看看这些命令的

作用范围:

Server

xtrabackup

binary

MySQL 5.0.*

xtrabackup_51

MySQL 5.1.*

xtrabackup_51

MySQL 5.1.* with InnoDB plugin

xtrabackup

MySQL 5.5.*

xtrabackup_55

MariaDB 5.1.*

xtrabackup

MariaDB 5.2.*

xtrabackup

MariaDB 5.3.*

xtrabackup

MariaDB 5.5.*

xtrabackup_55

Percona Server 5.0

xtrabackup_51

Percona Server 5.1

xtrabackup

Percona Server 5.5

xtrabackup_55

进行备份前的准备

innobackupex 的选项

 

--apply-log 恢复的第一阶段应用日志

 

--copy-back --复制之前做的备份到原来的数据目录

 

--databases=LIST --指定备份的数据库,若没有指定默认备份所有数据库

 

--defaults-file=[MY.CNF] --默认的配置文件

 

--export 导出个别表,以便于导入到其他服务器上

 

--host=HOST 当以 TCP/IP 连接数据库服务器时指定主机

 

--incremental --建立增量备份

 

--incremental-basedir=DIRECTORY 全备目录,主要用于作为增量备份的基准

 

--incremental-dir=DIRECTORY 增量备份目录

 

         --incremental-lsn 用于增量备份的日志序列号

 

 --no-lock 取消表的锁定(flush table with read lock)。当你备份的表都是 InnoDB 表时,而且不担心备份的二进制日志文件的位置,当有  DDL 语句或是非 InnoDB 表时不能使用这个选项,否则会导致备份不一致

 

--no-timestamp --禁止以时间标志来生成备份目录

 

--password=PASSWORD

 

--port=PORT

 

--redo-only --在增量备份恢复时用到

 

--rsync 用 rsync 工具来优化本地文件传输,innobackupex 会使用 rsync 来复制所有非InnoDB 文件,而不是使用 cp 来分别 copy 每个文件,rsync 在大数据量的时候会非常有效 。只能用于本地,不能与--remote-host or--stream.一起用

 

--slave-info 在备份一个复制结构中的从库时,这个选项非常有用。它记录了主库的二进制日志位置和主库的名字 ,这些信息被记录到了 xtrabackup_slave_info 文件中,这个有点 像 mysqldump 中的 change master 标志。当为主库搭建新的从库时 ,可以通过之前的备份 加上 xtrabackup_slave_info 文件中的二进制位置来实现从库恢复

 

--scpopt = SCP-OPTIONS

 

--sshopt = SSH-OPTIONS

 

--socket

 

--use-memory

 

--user=USER

 

具体的 innobackupex 选项说明可以参照

 

 http://www.percona.com/doc/percona-xtrabackup/innobackupex/innobackupex_option_refere

spacer.gif

 nce.html

 

innobackupex 相关文件

 

 

1xtrabackup_checkpoints

 

包含了 LSN 号与备份类型。此文本被用于增量备份恢复

 

[root@game7 2013-03-07_14-07-19]# more xtrabackup_checkpoints backup_type = full-backuped

 

from_lsn = 0

to_lsn = 95118590296

 

2xtrabackup_binlog_info

记录了备份时刻二进制日志的位置是 show master status 的结果

 

[root@game7 2013-03-07_14-07-19]# more xtrabackup_binlog_info

 

mysql-bin.000001106

 

3backup-my.cnf

记录了备份所需的 my.cnf 中的选项

 

[root@game7 2013-03-07_14-07-19]# more backup-my.cnf

 

This MySQL options file was generated by innobackupex-1.5.1. 

 

The MySQL server 

[mysqld]

datadir=/home/backup/2013-03-07_14-07-19

innodb_data_home_dir=/home/backup/2013-03-07_14-07-19 innodb_data_file_path=ibdata1:5120M;ibdata2:100M:autoextend innodb_log_group_home_dir=/home/backup/2013-03-07_14-07-19 innodb_log_files_in_group=2

innodb_log_file_size=377487360

 

 

 

4xtrabackup_binlog_pos_innodb

 

记录了备份时刻 InnoDB 表的二进制日志的位置

 

5xtrabackup_slave_info

 

记录了复制架构中 master 服务器的 mysql 二进制日志位置用于复制中的  CHANGE

 

MASTER

 

6xtrabackup_binary

 

用于备份的二进制文件

 

7mysql-stderr

 

mysqld 的标准错误输出

 

8mysql-stdout

 

mysql 服务的标准输出