首页 > 数据库 > MySQL > INNOBACKUPEX的全备和增量备份恢复学习笔记
INNOBACKUPEX 的全备和增量备份恢复学习笔记
说到备份MySQL数据库,不少人可能会先想到其自带的命令行工具mysqldump,要说这个工具确实不错,操作简单调用灵活,不过mysqldump属于逻辑备份工具,类似ORACLE数据库中的export,小数据量时效率尚可,当数据量达到一定规模时,使用mysqldump执行备份的时间也许还可接受,但恢复时间基本就不能忍受了。
这种情况下就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。
Xtrabackup提供了两种命令行工具:
?1)xtrabackup:专用于备份InnoDB引擎的数据;
?2)innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令,这样
用该命令即可以实现备份InnoDB,也可以备份MyISAM引擎的对象。
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDBHotbackup的一个很好的替代品。
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
xtrabackup软件可以到http://www.percona.com/downloads/xtrabackup/免费下载。
关于对xtrabackup安装方法,可以参见:http://blog.itpub.net/28916011/viewspace-1753483/
[root@drbd-01 backup]# innobackupex --defaults-file=/etc/my.cnf --host 10.72.16.116 --port=3306 --user=root --password=123 --socket=/tmp/mysql.scok /data/backup/full
执行完全备份后,可以对数据库建几张表,插入点数据,模拟数据库完全备份后数据的增长,然后再执行增量备份。
这时候可以在数据库做点操作,模拟数据库的数据有更新。
增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备了。
[root@drbd-01 backup]# innobackupex
--defaults-file=/etc/my.cnf -no-timestamp --incremental
--incremental-basedir=/data/backup/full/2015-07-28_12-10-45/ --user=root
--password=123 /data/backup/001
--incremental 说明是什么备份 ,后面跟要增量备份的路径
--incremental-basedir 指向上一次的增量备份所在的目录
--no-timestamp innobackupex--defaults-file=/etc/my.cnf --user=root --no-timestamp /data/backup/001使用--no-timestamp时,后面的这个011目录必须跟上且不能提前自己建立,它由innobackupex自动建立,否则会报innobackupex: Error: Failed to create backup directory/data/backup/001: File exists at /usr/bin/innobackupex line 3899.)
这时候可以再对数据库做点操作,模拟数据又进行增长,然后再做第二次增量备份。
[root@drbd-01 backup]# innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf -no-timestamp --incremental --incremental-basedir=/data/backup/001 /data/backup/002
可以通过以下文件查看备份信息。
[root@drbd-01 backup]# cat /data/backup/full/2015-07-28_12-10-45/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 3194902
last_lsn = 3194902
compact = 0
[root@drbd-01 backup]# cat /data/backup/001/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 3194902
to_lsn = 3198776
last_lsn = 3198776
compact = 0
[root@drbd-01 backup]# cat /data/backup/002/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 3198776
to_lsn = 3202726
last_lsn = 3202726
compact = 0
上面看到,可以通过lsn看到这3个备份集关系。
小知识:
也可以通过此命令来进行指定lsn的方式进行备份
[root@drbd-01 backup]# innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --no-timestamp --incremental --incremental-lsn=3198776 /data/backup/003
删除原来的mysql数据目录/data/mysql,创建新的数据库目录,用来模拟数据库损坏。
[root@drbd-01 data]#rm –rf /data/mysql
[root@drbd-01 data]# cd /data/
[root@drbd-01 data]# mkdir mysql
[root@drbd-01 data]# chown mysql.mysql mysql
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”即prepare的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态,innobakupex命令的--apply-log选项可用于实现上述功能。
[root@drbd-01 mysql]# innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /data/backup/full/2015-07-28_12-10-45/
--apply-log 在数据库备份好后,这些备份的数据并不能立即用于恢复,因为这些刚备份的数据里包含了未提交的数据,需要回滚,oracle里称undo数据!也包括的已完成的事务在重做日志文件中并没有写入数据文件中,这些数据需要重做!oracle里称redo! 这个参数正是用于做这些事情,以保证数据文件的一致性!在数据库恢复之前,须先对备份的数据文件应用此参数!(innobackup会重现重做日志文件(redo log file)中的事务条目,重做已经提交的事务和回滚未提交的事务!)
--redo-only 该选项表示在应用完成redo日志之后,针对未提交的事务不执行回滚操作,因为前一个没有提交的事务有可能在下一个备份中提交了,否则后续的增量备份无法进行恢复了。该选项需要结合--apply-log选项一起使用用。 但是最后一个增量备份的数据文件恢复时不要加--redo-only了。
[root@drbd-01 mysql]# innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /data/backup/full/2015-07-28_12-10-45/ --incremental-dir=/data/backup/001/
为什么这次不用 —redo-only 了呢?这是因为除了最后的一个增量备份外,前面的事务都不应该进行回滚因为有可能前一个没有提交的事物在下一个备份中提交了,如果进行了回滚则有可能导致数据不一致从而无法进行还原。
[root@drbd-01 data]# innobackupex --defaults-file=/etc/my.cnf --apply-log /data/backup/full/2015-07-28_12-10-45/ --incremental-dir=/data/backup/002
[root@drbd-01 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/2015-07-28_12-10-45/
上述恢复时,只指定完全恢复的目录就行,因为前面已经做过把其他增量备份的数据合并到全备份目录里面了。
--copy-back 把备份数据拷贝回server的datadir,它决定于my.cnf中的datadir参数,另外在恢复时datadir目录必须是空的,并且mysql数据库必须是shudown的!
修改权限及属主:
chown -R mysql:mysql /data/mysql
servce mysql start
此脚本出自:
http://blog.csdn.net/yangzhawen/article/details/30282993
#cat backup.sh
点击( 此处)折叠或打开
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-1754640/ ,如需转载,请注明出处,否则将追究法律责任。