备份过程中终止日志线程,并以上一次 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