xtrabackup用法【备忘】(二)

2014-11-24 17:09:19 · 作者: · 浏览: 1
3_14-09-34 --tmpdir=/tmp innobackupex: Waiting for ibbackup (pid=13829) to suspend innobackupex: Suspend file '/backup/2013-12-23_14-09-34/xtrabackup_suspended_2'

备份过程中终止日志线程,并以上一次 checkpoint 作为日志备份时间点

xtrabackup: The latest check point (for incremental): '85727497'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (85727497)

完成所有备份后,可以看到下面信息返回

innobackupex: Backup created in directory '/backup/2013-12-23_14-09-34'
131223 14:09:39  innobackupex: Connection to database server closed
131223 14:09:39  innobackupex: completed OK!

上述全库备份方法将会自动把备份信息存放到一个以当前年-月-日_时-分-秒的目录中
如果你希望自定义备份目录(注,目录需在备份过程中自动生成),可以增加 --no-timestamp 参数,如

innobackupex --user=root --password=123 --socket=/var/run/mysqld/mysql5.socket /backup/2013_12_23 --no-timestamp

则备份时候会自动创建 2013_12_23 目录并把备份集存放至该目录中

注意,当前全库备份只备份至上文提到 checkpoint '85727497' 序号的事务及已经完成同步至磁盘中的数据,而已经执行,但还没有提交的事务仍然存放在内存中(innodb buffer),导致当前数据文件处于非一致性状态
假设当前要对全备进行恢复,则我们却要利用回滚未提交的事务,使得数据文件处于一致状态,因此,我们再执行完整全备之后,切记要执行一次 --apply-log 操作,这点是十分重要的

当前参考文件 /backup/2013-12-23_14-09-34/xtrabackup_checkpoints

cat /backup/2013-12-23_14-09-34/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 85727497
last_lsn = 85727497
compact = 0

执行 --apply-log 时,必须要指定之前的备份目录(因为需要获得正确的 xtrabackup_checkpoints 文件)

cd /backup/2013-12-23_14-09-34
innobackupex --apply-log --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --password=123 --socket=/var/run/mysqld/mysql5.socket  ./

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
131223 16:23:40  InnoDB: Starting shutdown...
131223 16:23:44  InnoDB: Shutdown completed; log sequence number 85728268
131223 16:23:44  innobackupex: completed OK!

参见最新后的 xtrabackup_checkpoints 文件信息

backup_type = full-prepared
from_lsn = 0
to_lsn = 85727826
last_lsn = 85727826
compact = 0

默认情况下,--apply-log 参数,只调用系统 100M 内存,如果当前 innodb buffer pool 比较大,则同步内存中数据时间可能会比较长,可以通过定义内存大小加快备份速度, 如参数 --use-memory=4G

恢复方法

要进行全库恢复,可调用参数 --copy-back

注: 当前全库恢复为离线恢复模式
需保证 datadir (/mdb) 数据库目录当前为空
需保证数据库处于关闭状态
数据恢复后,需对 datadir (/mdb) 目录重新修改文件所有者为 mysql 用户

innobackupex --copy-back --user=root --password=123 --socket=/var/run/mysqld/mysql5.socket /backup/2013-12-23_16-22-34

innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2013-12-23_16-22-34'
innobackupex: back to original InnoDB log directory '/mdb'
innobackupex: Copying '/backup/2013-12-23_16-22-34/ib_logfile1' to '/mdb/ib_logfile1'
innobackupex: Copying '/backup/2013-12-23_16-22-34/ib_logfile0' to '/mdb/ib_logfile0'
innobackupex: Finished copying back files.

131223 16:39:06  innobackupex: completed OK!

备份完成后需要对数据库文件目录授权 mysql 用户属性

[root@db2 /]# chown mysql:mysql /mdb -R

增量备份

注: 增量备份只支持 innodb 引擎, MyISAM 引擎无法实现增量,只会进行全表备份

innobackupex --incremental /data/backups --incremental-basedir=BASEDIR

备份恢复过程,先参考之前文档,执行一次全备份。(增量备份需建立在全备份之上)

全备

innobackupex --user=root --password=123 --socket=/var/run/mysqld/mysql5.socket  /backup 

apply-log 备份

innobackupex --user=root --password=123 --apply-log --socket=/var/run/mysqld/mysql5.socket  /backup/2013-12-24_14-58-26/

检查当前 check-point 位置

cat 2013-12-24_14-58-26/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 85760880
l