xtrabackup对MySQL数据库的备份及恢复

xtrabackup 是 percona 的一个开源项目,能够热备份innodb ,XtraDB,和MyISAM(会锁表)
对MyISAM存储引擎会锁表,也是很郁闷的由于线上使用的是Innodb和MyISAM两种存储引擎,比较头疼!!
Xtrabackup是一个对InnoDB作数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品
Percona? 
MySqL的衍生版 Percona Server
Percona 为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提高。该版本提高了在高负载状况下的 InnoDB 的性能、为 DBA 提供一些很是有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
Percona Server 只包含 MySQL 的服务器版,并无提供相应对 MySQL 的 Connector 和 GUI 工具进行改进。
Percona Server 使用了一些 google-mysql-tools, Proven Scaling, Open Query 对 MySQL 进行改造。
官站:http://www.percona.com/ 这个站点有详细的文档介绍,不过是E文,


下面就来看一下Xtrbackup这个工具的使用吧。


首先安装这个xtrbackup工具,安装方法官网上有yum和rpm包安装两种方式的详细的介绍就再也不写了,朋友们本身看。在这里我使用的yum的安装方式比较便捷。
yum源设置方法:

http://www.percona.com/doc/percona-xtrabackup/2.1/installation/yum_repo.html php

vim /etc/yum.repos.d/Percona.repo
添加如下内容:
[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 1
下载key文件写到<span style=\"\\\\"\\\\\\\\"font-family:consolas,\\\\"\">yum install percona-xtrabackup-2.0.1-446.rhel6.x86_64 -y
固然也能够下载源码包编译安装

下载地址: http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/binary/Linux html

主要来讲一下xtrbackup对MySqL数据库的备份和恢复。


Xtrabackup有两个主要的工具:xtrabackup、innobackupex
  (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
  (2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,因此能同时备份处理innodb和myisam,但在处理myisam时须要加一个读锁
  (3)使用帮助:http://www.percona.com/docs/wiki/percona-xtrabackup:start
下面来使用这个工具:
必定要肯定mysql配置文件my.cnf中必须有datadir=/data/mysql/这项。下面有说明。
先来一次全量备份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat /data/bak_data/full_bak
这个目录里面就是备份的内容了,能够看一下都有什么东西:
数据库的主配置文件:backup-my.cnf
Innodb日志文件:ibdata1
数据库中的全部数据库目录:innobackup、mysql、performance_schema、phpmyadmin、test、wordpress
最后就是innobackupex备份的二进制日志和日志信息,备份的标志点:
xtrabackup_binary
xtrabackup_binlog_info
xtrabackup_checkpoints
xtrabackup_logfile
下面来使用innobackupex增量备份:
第一次增量备份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/full_bak /data/bak_data/one_backup
第二次增量备份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/one_backup /data/bak_data/two_backup
第三次增量备份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/two_backup /data/bak_data/three_backup

以上是把每次增量备份为一个目录,也能够备份为一个压缩包

压缩备份的方式:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --stream=tar /data/bak_data/ 2>/data/back_data/2.log | gzip - > /data/bak_data/full_bak.tar.gz
(测试了不下10次,压缩包里只一个backup-my.cnf文件,很是郁闷!)
仍是用普通的吧,比较妥当!


下面来看一下如何恢复数据,这里有两方式来恢复。要恢复数据要先停mysql数据库服务,要不停下也是能够的,我的感受停下比较好一点。
两种方式共同的部分:
一、进行一次基础恢复也就是:
innobackupex-1.5.1 /data/bak_data/full_bak --apply-log
二、进行增量恢复:
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/one_backup --apply-log   #恢复的是第一次增量备份的,
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/two_backup --apply-log    #恢复的是第二次增量备份的,
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/three_backup --apply-log    #恢复的是第三次增量备份的,
以次类推,有多少增量就恢复多少,最后数据库所有数据会在/data/bak_data/full_bak这个目录下,

下面就分两方式来恢复数据到正式的数据库中
第一种比较简单的方式,直接把/data/bak_data/full_bak这个目录下的文件所有复制到数据库的存放数据的目录中:
cp -r /data/bak_data/full_bak/* /data/mysql/data/
为了能正常启动服务,修改数据目录的用户权限,
chown mysql:mysq -R /data/mysql
如不出意外,重启以后数据库服务就是正常。一般状况下能正常启动。
这种方式会使数据库的数据目录有其余的文件,cp以后会有xtrabackup_binary、xtrabackup_binlog_info、xtrabackup_checkpoints、xtrabackup_logfile、backup-my.cnf、ibdata一、ib_logfile0、ib_logfile1 文件,若是innodb日志文件:ibdata一、ib_logfile0、ib_logfile1以前就是放在这个目录中能够不用清理掉,建议其余除数据库目录以外的文件要清理一下。或者复制到相应的目录中去。

第二方式,使用innobackupex-1.5.1 --copy-back这个选项来把数据获得数据库存储的目录中去,在这以前要清空数据库数据存放目录/data/mysql/data目录的文件和innodb日志目录/data/mysql/mysql_innodb目录的文件,而后执行下面的命令便可。若是不清空,下面命令在执行过程会报错,提示你要清空那些目录。
innobackupex-1.5.1 --copy-back /data/bak_data/full_bak
执行完后,上面来个目录中的文件属主和属组都发生了变化,不是mysql用户了,若是直接重启mysql服务会报错,修改成mysql用户就能够了
执行:
chown mysql:mysql /data/mysql -R

关于Xtrbackup工具的使用先就写到这里,在这里还有一个问题没获得解决,但愿看到的朋友们若是也遇到相同的问题能够一块儿讨论下。
问题文章前面也提到过,就是使用压缩备份里老是不成功。即:
压缩备份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --stream=tar /data/bak_data/  2>/data/back_data/2.log | gzip - > /data/bak_data/full_bak.tar.gz
(测试了不下10次,压缩包里只一个backup-my.cnf文件,很是郁闷!)


但愿看到的朋友们能指点下,谢谢。 mysql


上面的那个问题已经解决了,多谢跛腿的狐狸 的指点 sql

缘由以下,我备份完以后解压时少用了一个参数。我用的是:tar zxvf full_bak.tar.gz 因此解压出来后就一个backup-my.cnf文件,多谢跛腿的狐狸 的指点,使用-i这个参数,即:tar -izxvf full_bak.tar.gz解压出来后就是全是备份的文件和目录了。这个参数的解释以下:-i, --ignore-zeros  忽略归档中的零字节块(即文件结尾) shell

相关文章
相关标签/搜索