xtrabackup如何备份mysql数据库
参考:http://mingxiao.blog.51cto.com/8124243/1623634
一 全备
1.命令安装:
yum install -y gnupg rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm(64位源) rpm -Uhv https://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.i386.rpm(32位源) yum install -y percona-xtrabackup
[root@aliyun-112 ~]# xtrabackup -v
xtrabackup version 2.3.3 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 525ca7d)
2.命令功能:
对InnoDB做数据备份的工具,支持在线热备份
3.命令参数:
--database=sundong 单独对hu数据库做备份 ,若是不添加此参数那就那就是对全库做备份
--stream =tar 打包格式 目前只支持 tar and xbstream
2>/var/backups/hu.log 输出信息写入日志中
1> /var/backups/hu.tar.gz 打包压缩存储到该文件中
--incremental-dir=/var/backups/plus/ 增量备份目录
--copy-back选项的命令从备份目录拷贝数据,索引,日志到my.cnf文 件里规定的初始位置
--apply-log选项的命令是准备在一个备份上启动mysql服务
--port=PORT
4.命令实例:
备份并打包压缩 (只备份hu这个数据库)
innobackupex --defaults-file=/home/DB/mysql/my.cnf --user=root --password=xxxxx --database=hu --stream=tar /var/backups/ 2>/var/backups/hu.log | gzip 1> /var/backups/hu.tar.gz
5 整库备份。(一次性备份所有的数据库)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=cdqd /var/backups/
(root为数据库用户名,cdqd为数据库密码,/etc/my.cnf为mysql配置文件所在位置,/var/backups/为备份文件存储目录)
6 恢复
首先停掉数据库,然后删除数据库目录下的所有数据库文件。
首先写日志文件,然后恢复,如下。(注:2010-04-17_22-19-30是自动生成的以备份时间命名的文件夹,恢复时根据情况进行选择)
# innobackupex --defaults-file=/etc/my.cnf --apply-log /var/backups/2010-04-17_22-19-30 (写日志)
# innobackupex --defaults-file=/etc/my.cnf --copy-back /var/backups/2010-04-17_22-19-30 (恢复)
然后去你的备份目录查看是否有备份的文件,然后还需要更改权限(这步我是cd到原数据库目录下进行的)
#chown -R mysql:mysql *
重启数据库,开恢复是否成功。
二 增量备份与恢复
在这里为了表述清楚我们做两次增量备份。
为student表插入数据,为增量备份做基础。
mysql>use hu; mysql>create table student (`id` int(4),`name` char(40),`values`char(40)) mysql> INSERT INTO student (Name) VALUES ('XiaoHei3'),('XiaoHei4');
完全备份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backup
备份完成之后产生这个
2015-03-23_23-19-24/ 文件夹,这是完全备份的目录
第一次增量备份,--incremental-basedir=指的是完全备份所在的目录。/backup是备份的目录
INSERT INTO student (Name) VALUES ('XiaoHei1'),('XiaoHei2');
[root@localhost /]#
innobackupex --incremental /backup --incremental-basedir=/backup/2015-03-23_23-19-24/
执行完这个之后会产生一个2015-03-23_23-21-49/ ,第二次增量备份指定它就可以
mysql>
INSERT INTO student (Name) VALUES ('XiaoHei5'),('XiaoHei6');
第二次增量备份,--incremental-basedir=指的是第上一次增量备份所在的目录,这里指第一次,以此类推。
[root@localhost /]# innobackupex --incremental /backup --incremental-basedir=/backup/2015-03-23_23-21-49/
步骤三:准备完全备份和增量备份
增量备份完成,下面要准备完全备份和增量备份。
--redo-only后面是完全备份所在目录。
--incremental-dir指增量备份所在目录,若有多个,按时间先后执行多次。
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/ --incremental-dir=/backup/2015-03-23_23-21-49/ --incremental-dir指向第一次增量备份目录
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/ --incremental-dir=/backup/2015-03-23_23-22-44/ --incremental-dir指向第二次增量备份目录
步骤四:模拟mysqld故障
[root@localhost /]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@localhost /]# rm -rf /mydata/data/*
步骤五:恢复数据
[root@localhost data]# innobackupex --copy-back /backup/2015-03-23_23-19-24/ (第一次全备份的目录)
然后进入到备份目录查看是否有备份文件存在
注意:恢复数据后,在重启mysqld前,需要修改数据目录权限,默认是root用户,root组,需要改为mysql用户,mysql组。
[root@localhost data]# chown -R mysql.mysql ./*
service mysqld start
mysql> use hu;
Database changed
mysql> select * from student;
+----+-------------------+---------------+
| ID | Name | Course |
+----+-------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 16 | XiaoHei1 | |
| 17 | XiaoHei2 | |
| 18 | XiaoHei3 | |
| 19 | XiaoHei4 | |
| 20 | XiaoHei5 | |
| 21 | XiaoHei6 | |
+----+-------------------+---------------+
9 rows in set (0.00 sec)
可以看到所有数据都完好无损,至此,备份恢复操作都已完成。