您的位置:首页 > 其它

xtrabackup 联机备份

2015-12-25 19:17 267 查看
1、安装xtrabackup
[root@CentOS tmp]# cd /tmp/
[root@CentOS tmp]# ll percona-xtrabackup-2.3.2-Linux-i686.tar.gz
-rw-r--r--. 1 root root 26387491 12月 21 22:24 percona-xtrabackup-2.3.2-Linux-i686.tar.gz
[root@CentOS tmp]# tar zxf percona-xtrabackup-2.3.2-Linux-i686.tar.gz -C /usr/local/
[root@CentOS tmp]# cd /usr/local/
[root@CentOS local]# mv percona-xtrabackup-2.3.2-Linux-i686/ xtrabackup
[root@CentOS local]# chown -R mysql:mysql xtrabackup
[root@CentOS local]# cd xtrabackup/bin/
[root@CentOS bin]# ll
总用量 64064
lrwxrwxrwx. 1 mysql mysql       10 12月 21 22:33 innobackupex -> xtrabackup   ##能够备份所有使用MyISAM、InnoDB及XtraDB引擎的表对象。
-rwxr-xr-x. 1 mysql mysql  4144096 10月 17 02:47 xbcloud
-rwxr-xr-x. 1 mysql mysql     3020 10月 17 02:46 xbcloud_osenv
-rwxr-xr-x. 1 mysql mysql  4029390 10月 17 02:47 xbcrypt
-rwxr-xr-x. 1 mysql mysql  4073236 10月 17 02:47 xbstream                     ##可以压缩xtrabackup输出的信息,相当于linux中tar命令的增强版。
-rwxr-xr-x. 1 mysql mysql 53340808 10月 17 02:49 xtrabackup                   ##专用于备份innoDB及XtraDB引擎对象。
[root@CentOS bin]# vi /etc/profile
export PATH=/usr/local/xtrabackup/bin:$PATH
[root@CentOS bin]# source /etc/profile

2、xtrabackup命令全备
##xtrabackup必须在mysql的服务端执行。
xtrabackup命令有两种模式:
--backup  创建备份集。
--prepare 准备备份集。
##这里没有指定数据库,默认就是全备。
# xtrabackup \
--defaults-file=/mydata/data/3306/my.cnf \
--backup \
--target-dir=/mydata/data/3306/xtrabackup/bak_20151221 \
--user=root \
--password=123 \
--socket=/mydata/data/3306/mysql_3306.sock

[root@CentOS xtrabackup]# ll bak_20151221/           ##指定的bak_20151221,最后生成的其实是一个目录。
总用量 77864
-rw-r-----. 1 root root      386 12月 21 23:15 backup-my.cnf
-rw-r-----. 1 root root 79691776 12月 21 23:15 ibdata1
drwx------. 2 root root     4096 12月 21 23:15 mysql
drwx------. 2 root root     4096 12月 21 23:15 performance_schema
drwx------. 2 root root     4096 12月 21 23:15 test
drwx------. 2 root root     4096 12月 21 23:15 xtrabackup
-rw-r-----. 1 root root       21 12月 21 23:15 xtrabackup_binlog_info
-rw-r-----. 1 root root      117 12月 21 23:15 xtrabackup_checkpoints
-rw-r-----. 1 root root      603 12月 21 23:15 xtrabackup_info
-rw-r-----. 1 root root     2560 12月 21 23:15 xtrabackup_logfile
##xtrabackup命令创建的是一个有限的备份集(仅包含于InnoDB引擎相关的内容),而非完成备份集,如果要创建数据库的完整备份集,那就得用innobackupex命令。

3、innobackupex命令全备
##使用innobackupex创建一份完整的全量备份:
##xtrabackup要求用户明确指定目标路径,二对于innobackupex并不需要特别明确,只要指定父目录即可。
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock /mydata/data/3306/xtrabackup
[root@CentOS xtrabackup]# ll 2015-12-21_23-57-52/         ##innobackupex自动创建了以[日期_时间]组合命名的目录
总用量 77860
-rw-r-----. 1 root root      386 12月 21 23:57 backup-my.cnf
-rw-r-----. 1 root root 79691776 12月 21 23:57 ibdata1
drwx------. 2 root root     4096 12月 21 23:57 mysql
drwx------. 2 root root     4096 12月 21 23:57 performance_schema
drwx------. 2 root root     4096 12月 21 23:57 test
drwx------. 2 root root     4096 12月 21 23:57 xtrabackup
-rw-r-----. 1 root root       21 12月 21 23:57 xtrabackup_binlog_info
-rw-r-----. 1 root root      117 12月 21 23:57 xtrabackup_checkpoints
-rw-r-----. 1 root root      570 12月 21 23:57 xtrabackup_info
-rw-r-----. 1 root root     2560 12月 21 23:57 xtrabackup_logfile

4、innobackupex命令增量备份
##使用innobackupex创建增量备份:
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock --incremental --incremental-basedir=/mydata/data/3306/xtrabackup/2015-12-21_23-57-52 /mydata/data/3306/xtrabackup
##--incremental 告诉innobackupex这次是增量
##--incremental-basedir 指定一个全量备份的路径,作为增量的基础。
##--incremental-lsn  如果知道了备份开始时的LSN,就不需要全量备份作为基础了,指定参数--incremental-lsn即可。
[root@CentOS xtrabackup]# cd 2015-12-22_00-05-48
[root@CentOS 2015-12-22_00-05-48]# ll
总用量 328
-rw-r-----. 1 root root    386 12月 22 00:05 backup-my.cnf
-rw-r-----. 1 root root 294912 12月 22 00:05 ibdata1.delta
-rw-r-----. 1 root root     44 12月 22 00:05 ibdata1.meta
drwx------. 2 root root   4096 12月 22 00:05 mysql
drwx------. 2 root root   4096 12月 22 00:05 performance_schema
drwx------. 2 root root   4096 12月 22 00:05 test
drwx------. 2 root root   4096 12月 22 00:05 xtrabackup
-rw-r-----. 1 root root     21 12月 22 00:05 xtrabackup_binlog_info
-rw-r-----. 1 root root    123 12月 22 00:05 xtrabackup_checkpoints
-rw-r-----. 1 root root    663 12月 22 00:05 xtrabackup_info
-rw-r-----. 1 root root   2560 12月 22 00:05 xtrabackup_logfile
##对于MyISAM引擎表对象来说,其实也是全量备份,而对于InnoDB引擎的表对象来说,多个两个扩展名为<table_name>.delta和<table_name>.meta的文件。
[root@CentOS 2015-12-22_00-05-48]# cd test/
[root@CentOS test]# ll t3.*
-rw-r-----. 1 root root  8586 12月 22 00:05 t3.frm
-rw-r-----. 1 root root 32768 12月 22 00:05 t3.ibd.delta
-rw-r-----. 1 root root    45 12月 22 00:05 t3.ibd.meta

5、innobackupex命令执行恢复
恢复操作分为两个步骤:
准备恢复(prepare):对于xtrabackup名利就是参数--prepare;对于innobackupex命令来说,对应的参数是--apply-log
执行恢复(copy-back):xtrabackup命令没有执行恢复相关的参数,只能手动恢复。对于innobackupex命令来说,对应的参数就是--copy-back,它的功能就是将指定的备份集,恢复到datadir目录。
##首先对全量备份做恢复的准备工作:
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --apply-log --redo-only /mydata/data/3306/xtrabackup/2015-12-21_23-57-52
##--apply-log  代表对备份集做恢复准备工作
##--redo-only  如果进行准备工作的备份集操作完成后,还有其他增量备份集待准备,那么就必须指定本参数。

##继续应用增量备份集
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --apply-log /mydata/data/3306/xtrabackup/2015-12-21_23-57-52 --incremental-dir=/mydata/data/3306/xtrabackup/2015-12-22_00-05-48
##--incremental-dir  指定要处理的增量备份机路径

##执行copy-back
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --copy-back /mydata/data/3306/xtrabackup/2015-12-21_23-57-52

6、备份恢复的例子:
##首先全备3306数据库:(需要注意,如果准备恢复失败,备份集是不能回退的,所以备份集也是需要备份的。)
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock /mydata/data/backup
##然后再数据库中做一些变更,再增量备份3306数据库:
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock --incremental --incremental-basedir=/mydata/data/backup/2015-12-22_19-05-59 /mydata/data/backup
##全备准备恢复:
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --apply-log /mydata/data/backup/2015-12-22_19-05-59
##现假设3307库只剩下my.cnf配置文件,把3306恢复到3307:
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --copy-back /mydata/data/backup/2015-12-22_19-05-59
# cp /mydata/data/3307.bak/* /mydata/data/3307/
# chown -R mysql:mysql *

7、备份恢复的例子:
##首先全备3306数据库:
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock /mydata/data/backup
##然后再数据库中做一些变更,再增量备份3306数据库:
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock --incremental --incremental-basedir=/mydata/data/backup/2015-12-22_19-05-59 /mydata/data/backup
##全备准备恢复:
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --apply-log --redo-only /mydata/data/backup/2015-12-22_19-05-59
##增量准备恢复:
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --apply-log /mydata/data/backup/2015-12-22_19-05-59 --incremental-dir=/mydata/data/backup/2015-12-22_19-08-22
##有时候“全备准备恢复”需要重复执行了两遍,因为第一遍没有生成日志文件,第二遍才会生成。注意第二遍执行“全备准备恢复”就不要加参数:--redo-only
##再次全备准备恢复:(其实也可以不用执行第二遍“全备准备恢复”来生成日志文件,在mysql启动的时候会自动生成)
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --apply-log /mydata/data/backup/2015-12-22_19-05-59
##现假设3307库只剩下my.cnf配置文件,把3306恢复到3307:
# innobackupex --defaults-file=/mydata/data/3307.bak/my.cnf --copy-back /mydata/data/backup/2015-12-22_19-05-59
# cp /mydata/data/3307.bak/* /mydata/data/3307/
# chown -R mysql:mysql *

8、打包和压缩备份集
# innobackupex --defaults-file=/mydata/data/3306/my.cnf --user=root --password=123 --socket=/mydata/data/3306/mysql_3306.sock --stream=tar /tmp | gzip -> /mydata/data/backup/xtra_fullbackup.tar.gz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: