常用备份:
目前较新的:percona-xtrabackup-2.4.11-1.el6.x86_64.rpm
配置percona的yum源。
yum install epel-release
yum install libev qpress
yum install perl-DBD-MySQL
yum install percona-xtrabackup-2.4.11-1.el6.x86_64.rpm
innobackupex备份需要的权限:
操作系统层:
需要有对data目录有读,写及可执行权限。
数据库层:
RELOAD 和 LOCK TABLES:为了在开始拷贝文件前,执行FLUSH TABLES WITH
READ LOCK操作。
REPLICATION CLIENT:为了获得binlog日志位置。
CREATE TABLESPACE:为了导入表,用户表级别的恢复。
SUPER:为了在复制环境下能够start/stop slave复制线程。
create user 'xtrbak'@'localhost' identified by '[{ehE!)w:0xpL8';
grant select,reload,lock tables,process,replication slave,replication client on *.* to 'xtrbak'@'localhost';
flush privileges;
一旦使用xtrabackup进行备份,也就意味着数据量较大了,如果很小,备份时间很短,直接使用mysqldump或者mydumper。
因此,xtrabackup备份较大数据量,无论是本地还是异地,都压缩,较小空间。默认使用自带的压缩方式。
================================全备以及恢复(默认压缩compress)==============================
将实例A进行全备(使用默认压缩qpress):
innobackupex \
--defaults-file=/usr/local/mysql_3307/my.cnf \
--host=localhost \
--user=xtrbak \
--password=aq0VR251xj \
--parallel=4 \
--no-timestamp \
--compress \
--compress-threads=8 \
--tmpdir=/tmp \
--socket=/usr/local/mysql_3307/mysql.sock \
/data/backup/3307/full/
全备份恢复:
前提:已经创建了一个实例B,用于恢复刚刚A实例的备份。
(1).解压qpress文件
cd /data/backup/3307/full/2016-04-13_14-20-27
for bf in `find . -iname "*/.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
如果是版本大于2.1.4,可以使用以下方式:
innobackupex --decompress /data/backup/3307/full/2016-04-13_14-20-27
(2).应用日志,将已经提交的刷新到数据文件中:
innobackupex \
--defaults-file=/usr/local/mysql_3307/my.cnf
--apply-log /data/backup/3307/full/2016-04-13_14-20-27
(3).关闭需要恢复的实例 /etc/init.d/mysql_3306 stop
(4).删除或者迁移实例B的数据目录文件 rm -rf /usr/local/mysql_3307/data/* 或者 mv /usr/local/mysql_3307/data/* /opt/tmp/
(5).将一致性的数据文件,cp回实例B的数据目录中(一定要指定my.cnf,因为实例A和B的数据路径不一定一样.它会根据my.cnf中的位置cp回去):
innobackupex \
--defaults-file=/usr/local/mysql_3307/my.cnf
--copy-back /data/backup/3307/full/2016-04-13_14-20-27
(
xtrabackup --prepare --target-dir=/data/backup/3307/full/2016-04-13_14-20-27
数据文件在准备好之前并不一致,因为它们在程序运行时被复制在不同的时间,并且在发生这些情况时可能会被更改。 如果您尝试使用这些数据文件启动InnoDB,它将检测到损坏并自动崩溃,以防止在损坏的数据上运行。 xtrabackup --prepare步骤使得文件在一段时间内完美地保持一致,所以您可以在其上运行InnoDB。
)
(6).给数据目录权限设置。ls /usr/local/mysql_3307/data 是否已经有数据文件,并权限设置:
chown -R mysql:mysql /usr/local/mysql_3307/data
(7).启动实例B: /etc/init.d/mysql_3306 start
(8).如果想做一个slave.
查看/data/backup/3307/full/2016-04-13_14-20-27目录下xtrabackup_binlog_info文件,记录了备份时的binlog或是gtid信息。
bin.000005 16933082
(9).配置同步
CHANGE MASTER TO MASTER_HOST='192.168.1.101',MASTER_USER='repl', MASTER_PASSWORD='mysql',MASTER_LOG_FILE='bin.000005',MASTER_LOG_POS=16933082;
start slave;
show slave status\G
====================================增量备份以及恢复=======================================
(1).将实例A进行全备:
innobackupex \
--defaults-file=/db/mysql_3306/my.cnf \
--host=localhost \
--user=root \
--password='mysql' \
--parallel=4 \
--no-timestamp \
--socket=/db/mysql_3306/mysql.sock \
/data/backup/3307/full/
(中间间隔一些操作....)
(2).对实例A增量备份
innobackupex \
--defaults-file=/usr/local/mysql/3307/my.cnf
--user=innobk
--password=aq0VR251xj
--socket=/usr/local/mysql/3307/mysql.sock
--incremental
--incremental-basedir=/data/backup/3307/full/2016-05-23_17-37-10 \
/data/backup/3307/incr/
增量备份-恢复
前提:已经创建了一个实例B,用于恢复刚刚A实例的备份。
(1).应用日志,将已经提交的刷新到数据文件中:
innobackupex \
--apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10/
--redo-only 指的是把备份时commit的,但还在事务日志中的应用到时数据,但是还没提交的不撤消,因为这个事务可能在增量备份中提交
假如的撤消了增量备份中就提交不了,因为事务已经不完整。
(2).将增量备份全并到完整备份中去
innobackupex \
--apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10 \
--incremental-dir=/data/backup/3307/incr/2016-05-23_17-39-12/
/data/backup/3307/full/2016-05-23_17-37-10这个是完整备份的目录。
--incremental-dir 后跟的是增量备份的目录
这个会使增量备份中的的数据合并到完整备份中,如果还有增量备份,继续(4)步骤合并.按照备份顺序依次合并。
如下,只能在合并了/2016-05-23_17-39-12/这个增量备份之后,才能再合并/2016-05-23_19-06-05/这第二次增量。
示例:
innobackupex \
--apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10 \
--incremental-dir=/data/backup/3307/incr/2016-05-23_19-06-05/
(3).关闭需要恢复的实例 /etc/init.d/mysql_3306 stop
(4).删除或者迁移实例B的数据目录文件 rm -rf /usr/local/mysql_3307/data/* 或者 mv /usr/local/mysql_3307/data/* /opt/tmp/
(5).一致性恢复(指定的是(4)步骤合并的全备目录)。
innobackupex \
--defaults-file=/usr/local/mysql/3307/my.cnf \
--copy-back /data/backup/3307/full/2016-05-23_17-37-10/
(6).给数据目录权限设置。ls /usr/local/mysql_3307/data 是否已经有数据文件,并权限设置:
chown -R mysql:mysql /usr/local/mysql_3307/data
(7).启动实例B: /etc/init.d/mysql_3306 start
OK,结束。
============流备份(tar,xbstream)以及压缩(qpress,gzip,pigz,lz4)===============
# innobackupex --stream=xbstream /tmp >/backup/bak.xbstream ###非压缩方式
# innobackupex --stream=xbstream --compress /tmp >/backup/bak_compress.xbstream ###压缩方式
total 43M
-r