之前工作的时候,业务需要用到了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 软件。
推荐以源码方式安装,这里下载了 percona-xtrabackup-2.0.5.tar.gz。
直接解压:tar -zxvf percona-xtrabackup-2.0.5.tar.gz
之后得到一个新的目录 percona-xtrabackup-2.0.5
[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 目录中各个文件的意义:
除了之前说过的三个工具 innobackupex、xtrabackup、xbstream 外,我们还可以看到几
个之前没提过的文件,它们分别是 xtrabackup_51,xtrabackup_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
nce.html
innobackupex 相关文件
1)xtrabackup_checkpoints
包含了 LSN 号与备份类型。此文本被用于增量备份恢复
[root@game7 2013-03-07_14-07-19]# more xtrabackup_checkpoints backup_type = full-backuped
from_lsn = 0
to_lsn = 95118590296
2)xtrabackup_binlog_info
记录了备份时刻二进制日志的位置,是 show master status 的结果
[root@game7 2013-03-07_14-07-19]# more xtrabackup_binlog_info
mysql-bin.000001106
3)backup-my.cnf
记录了备份所需的 my.cnf 中的选项
[root@game7 2013-03-07_14-07-19]# more backup-my.cnf
0 This MySQL options file was generated by innobackupex-1.5.1.
0 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
4)xtrabackup_binlog_pos_innodb
记录了备份时刻 InnoDB 表的二进制日志的位置
5)xtrabackup_slave_info
记录了复制架构中 master 服务器的 mysql 二进制日志位置,用于复制中的 CHANGE
MASTER
6)xtrabackup_binary
用于备份的二进制文件
7)mysql-stderr
mysqld 的标准错误输出
8)mysql-stdout
mysql 服务的标准输出