percona-xtrabackup实现备份与恢复mysql

Percona-XtraBackup

 

下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/

文档地址:

https://learn.percona.com/hubfs/Manuals/Percona_Xtra_Backup/Percona_XtraBackup_2.4/Percona-XtraBackup-2.4.9.pdf?t=1519310144623

 

1、   percona-xtrabackup安装

rpm -ivh percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm

需要先安装libev库,yum installlibev

 

2、           创建执行备份的用户并赋予最小权限

mysql> createuser 'bkpuser'@'localhost' identified by '123';

mysql> grantreload,lock tables,process,replication client on *.* to 'bkpuser'@'localhost';

mysql> flushprivileges;

 

 

3、   xtrabackup备份与恢复

    Xtrabackup常用参数

常用参数:

--user=USER                     指定备份用户,不指定的话为当前系统用户

--password=PASSWD               指定备份用户密码

--port=PORT                     指定数据库端口

--defaults-group=GROUP-NAME     在多实例的时候使用

--host=HOST                     指定备份的主机,可以为远程数据库服务器

--apply-log                     回滚日志

--database                      指定需要备份的数据库,多个数据库之间以空格分开

--defaults-file                 指定mysql的配置文件

--copy-back                     将备份数据复制回原始位置

--incremental                   增量备份,后面跟要增量备份的路径

--incremental-basedir=DIRECTORY 增量备份时使用指向上一次的增量备份所在的目录

--incremental-dir=DIRECTORY     增量备份还原的时候用来合并增量备份到全量,用来指定全备路径

--redo-only                     对增量备份进行合并

--rsync                         加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用

--no-timestamp                  生成的备份文件不以时间戳为目录.

 

--slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlogpos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份启动一个从库。

--safe-slave-backup:该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。

 

--defaults-file                 如果使用–defaults-file选项,则必须在第一位

--parallel

此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份)。可以加快备份速度。但是在服务器资源不足时,谨慎使用。

--throttle

此参数用于限制备份过程中每秒的IO次数。

3.1 普通全量备份

innobackupex --no-timestamp --user=bkpuser--password='123' --parallel=4 /root/xtrabackup

(/root/xtrabackup 为存放全量备份文件的目录)

执行结束后输出:

percona-xtrabackup实现备份与恢复mysql_第1张图片

备份目录下生成的文件如下:

percona-xtrabackup实现备份与恢复mysql_第2张图片

 

备份完成后,还不能用于恢复,一些未提交的事物需要恢复,需要恢复redo logo的数据,确保数据一致

创建备份后并不能直接用于恢复.需要先prepare。prepare的目的是跑一下redo,将未提交的rollback,回滚的回滚,跑出一个一致性的备份。

innobackupex --apply-log /root/xtrabackup/

 

prepare后:

percona-xtrabackup实现备份与恢复mysql_第3张图片

Iblogfile0和ib_logfile1是prepare新生成的。

3.2 普通全量恢复

本机恢复:

1、  清空mysql的data目录下文件,包括ibdata、各个数据库文件,注意,若binlog目录在data目录下,不能删除binlog!

删除data数据是因为copy-back时不会覆盖原来的数据。

2、  copy-back时MYSQL应该是关闭的。

3、  执行恢复:

      innobackupex--copy-back /root/xtrabackup

恢复过程中输出:

注意恢复过程中有无报错

percona-xtrabackup实现备份与恢复mysql_第4张图片

 

4、  如果创建备份时使用的是其他OS用户,那么在copy-back后要修改mysql数据目录的权限。

     (其实copy-back就是讲备份拷贝回了datadir下)

      因为我是用root用户备份和恢复的,所以恢复后的数据文件是root权限,需要修改为mysql:mysql 。

chown –R mysql:mysql /datadir/

percona-xtrabackup实现备份与恢复mysql_第5张图片

5、  启动mysql

/usr/bin/mysqld_safe--defaults-file=/mysqldata/mysql3309/my.cnf --user=mysql &

 

异机恢复:

1、  将备份生成的xtrabackup打包,传输到异机mysql服务器的某一目录下,并解压

         

2、  清空mysql的data目录下文件,包括ibdata、各个数据库文件,注意,若binlog目录在data目录下,不能删除binlog!

删除data数据是因为copy-back时不会覆盖原来的数据。

3、  copy-back时MYSQL应该是关闭的。

Kill -9mysql-pid

 

4、  执行恢复:

      innobackupex--copy-back /root/xtrabackup

(此处目录是存放备份文件的目录)

注意恢复过程中有无报错

percona-xtrabackup实现备份与恢复mysql_第6张图片

 

5、  如果创建备份时使用的是其他OS用户,那么在copy-back后要修改mysql数据目录的权限。

     (其实copy-back就是将备份拷贝回了datadir下)

     因为我是用root用户备份和恢复的,所以恢复后的数据文件是root权限,需要修改为mysql:mysql 。

chown –R mysql:mysql /datadir/

percona-xtrabackup实现备份与恢复mysql_第7张图片

6、 启动mysql

多实例:

/usr/bin/mysqld_safe--defaults-file=/mysqldata/mysql3309/my.cnf --user=mysql &

     单实例:

       Service mysqld start

     或/usr/local/mysql/support_files/mysql.server start

3.3 普通增量备份

增量备份目录1/root/xtrabackup_inc1

增量备份目录2/root/xtrabackup_inc2

 

# 第一次增量备份

innobackupex --defaults-file=/etc/my.cnf --user=bkpuser --password='123' --incremental /root/xtrabackup_inc1--incremental-basedir=/root/xtrabackup

注意:

# --incremental-basedir  第一次增量备份时指的是完全备份所在的目录

# 此命令执行结束后,innobackupex命令会在/data/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。

# 另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

# 需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

 percona-xtrabackup实现备份与恢复mysql_第8张图片

# 第二次增量备份

innobackupex  --defaults-file=/etc/my.cnf  --user=bkpuser --password='123' --incremental/root/xtrabackup_inc2  --incremental-basedir=/root/xtrabackup_inc1

 

3.4 普通增量恢复

 只有一次增量备份:

      1、合并增量备份到全量,并处理备份集

  # 如果需要恢复的话需要先执行如下操作,将第一次增量备份数据合并到全量备份

innobackupex --apply-log --redo-only /root/xtrabackup

innobackupex --apply-log --redo-only /root/xtrabackup--incremental-dir=/root/xtrabackup_inc1

 

     2、执行恢复

 #执行恢复,删除数据文件以及停掉mysql,参考全量恢复

innobackupex --defaults-file=/etc/my.cnf--user=bkpuser --password=’123’ --copy-back /root/xtrabackup

 

-incremental-dir=DIRECTORY     增量备份还原的时候用来合并增量备份到全量,用来指定全备路径

--redo-only                     对增量备份进行合并

--apply-log            处理未提交事物,回滚日志

 

3、  修改数据文件权限

4、  启动mysql

percona-xtrabackup实现备份与恢复mysql_第9张图片

 两次增量备份:

      1、合并增量备份到全量,并处理备份集

  # 如果需要恢复的话需要先执行如下操作,将第一次增量备份数据合并到全量备份

innobackupex --apply-log --redo-only /root/xtrabackup

innobackupex --apply-log --redo-only /root/xtrabackup--incremental-dir=/root/xtrabackup_inc1

 

# 如果存在多次增量备份的话,就多次执行如下命令。此处执行针对的是第二次增量备份,将第二次增量备份数据合并到全量备份

innobackupex --apply-log --redo-only /root/xtrabackup--incremental-dir= /root/xtrabackup_inc2

 

     2、执行恢复

 #执行恢复命令,删除数据文件以及停掉mysql,参考全量恢复

innobackupex --defaults-file=/etc/my.cnf--user=bkpuser --password=’123’ --copy-back /root/xtrabackup

 

3、  修改数据文件权限

4、 启动mysql

/usr/bin/mysqld_safe--defaults-file=/mysqldata/mysql3309/my.cnf --user=mysql &

 

3.5 复制环境全量备份

生产环境都是主从模式,主提供服务,从提供备份。

#全量备份,此处设定4个线程同时备份

innobackupex --no-timestamp --user=bkpuser--password='123' --parallel=4 --slave-info --safe-slave-backup /root/xtrabackup

 

--slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlogpos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份新启动一个从库。

--safe-slave-backup:该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。

 

3.6 复制环境全量恢复

1、将3.5中的备份文件拷贝到新的从服务器,并解压。

2、恢复之前先prepare

备份完成后,还不能用于恢复,一些未提交的事物需要恢复,需要恢复redo logo的数据,确保数据一致

 innobackupex --apply-log/root/xtrabackup

3、执行恢复命令

       innobackupex–copy-back /root/xtrabackup

4、  启动mysql

5、  配置同步

查看主库的binlog位置:

[root@osboxes~]# cat xtrabackup_slave_info

CHANGE MASTER TOMASTER_LOG_FILE='mysql-bin.000569', MASTER_LOG_POS=272132389

开启同步:

mysql> CHANGEMASTER TO

-> MASTER_HOST='10.133.143.66',

->MASTER_USER='repl',

->MASTER_PASSWORD='repl',

->MASTER_PORT=3306,

->MASTER_LOG_FILE=' mysql-bin.000569',

->MASTER_LOG_POS=272132389,

->MASTER_CONNECT_RETRY=10;

14:33:00(none)> start slave;

 

6、  检查同步状态是否正常

Mysql> shwo slave status\G

3.7 复制环境增量备份

#基于3.5的全量备份,下的第一次增量备份

innobackupex --no-timestamp --user=bkpuser--password='123' --parallel=4 --incremental --slave-info --safe-slave-backup

 --incremental-basedir=/root/xtrabackup/root/xtrabackup_inc

3.8 复制环境增量恢复

1、将3.5和3.7中的全量备份和增量备份文件拷贝到新的从服务器,并解压。

2、恢复之前先prepare

备份完成后,还不能用于恢复,一些未提交的事物需要恢复,需要恢复redo logo的数据,确保数据一致

innobackupex --apply-log –redo-only /root/xtrabackup

 innobackupex--apply-log --redo-only /root/xtrabackup --incremental-dir=/root/xtrabackup_inc1

 

注:若有多次增量备份,请参考3.3

 

  2、执行恢复

 #执行恢复,删除数据文件以及停掉mysql,参考全量恢复

innobackupex --defaults-file=/etc/my.cnf--user=bkpuser --password=’123’ --copy-back /root/xtrabackup

 

3、  启动mysql

4、配置同步

查看主库的binlog位置:

[root@osboxes~]# cat xtrabackup_slave_info

CHANGE MASTER TOMASTER_LOG_FILE='mysql-bin.000569', MASTER_LOG_POS=272132389

开启同步:

mysql> CHANGEMASTER TO

-> MASTER_HOST='10.133.143.66',

->MASTER_USER='repl',

->MASTER_PASSWORD='repl',

->MASTER_PORT=3306,

->MASTER_LOG_FILE=' mysql-bin.000569',

->MASTER_LOG_POS=272132389,

->MASTER_CONNECT_RETRY=10;

mysql> start slave;

 

 

 

注:

以上方法只能将数据恢复到备份的时间点,且生产目前是周日凌晨全备,周一到周六增备。

如果数据要恢复到当天下午2点,凌晨到下午两点这个时间段的数据还要借助到binlog。

 

Binlog恢复到某个时间点的方法……后面再总结

 

 

参考:

https://www.cnblogs.com/zhoujinyi/p/5893333.html

https://www.cnblogs.com/wangxin37/p/6398764.html

http://blog.csdn.net/rudygao/article/details/47042523

http://blog.csdn.net/ashic/article/details/52256539

 

xtrabackup+binlog异机增量恢复到某个时间点实验

先xtrabackup全量恢复到17号某个时间点,找到完成恢复的binlog和position

然后,使用binlog恢复全量恢复时间点到18号这段时间的数据

http://blog.csdn.net/zengxuewen2045/article/details/51454396

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(mysql)