千家信息网

xtrabackup如何备份mysql数据库

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,参考:http://mingxiao.blog.51cto.com/8124243/1623634一 全备1.命令安装:yum install -y gnupgrpm -Uhv http://www.
千家信息网最后更新 2024年12月12日xtrabackup如何备份mysql数据库

参考:http://mingxiao.blog.51cto.com/8124243/1623634


一 全备

1.命令安装:

yum install -y gnupgrpm -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 整库备份。(一次性备份所有的数据库)

  1. 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是自动生成的以备份时间命名的文件夹,恢复时根据情况进行选择)

  1. # innobackupex --defaults-file=/etc/my.cnf --apply-log /var/backups/2010-04-17_22-19-30 (写日志)

  2. # 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)

可以看到所有数据都完好无损,至此,备份恢复操作都已完成。




0