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次数。
innobackupex --no-timestamp --user=bkpuser--password='123' --parallel=4 /root/xtrabackup
(/root/xtrabackup 为存放全量备份文件的目录)
执行结束后输出:
备份目录下生成的文件如下:
备份完成后,还不能用于恢复,一些未提交的事物需要恢复,需要恢复redo logo的数据,确保数据一致
创建备份后并不能直接用于恢复.需要先prepare。prepare的目的是跑一下redo,将未提交的rollback,回滚的回滚,跑出一个一致性的备份。
innobackupex --apply-log /root/xtrabackup/
prepare后:
Iblogfile0和ib_logfile1是prepare新生成的。
1、 清空mysql的data目录下文件,包括ibdata、各个数据库文件,注意,若binlog目录在data目录下,不能删除binlog!
删除data数据是因为copy-back时不会覆盖原来的数据。
2、 copy-back时MYSQL应该是关闭的。
3、 执行恢复:
innobackupex--copy-back /root/xtrabackup
恢复过程中输出:
注意恢复过程中有无报错
4、 如果创建备份时使用的是其他OS用户,那么在copy-back后要修改mysql数据目录的权限。
(其实copy-back就是讲备份拷贝回了datadir下)
因为我是用root用户备份和恢复的,所以恢复后的数据文件是root权限,需要修改为mysql:mysql 。
chown –R mysql:mysql /datadir/
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
(此处目录是存放备份文件的目录)
注意恢复过程中有无报错
5、 如果创建备份时使用的是其他OS用户,那么在copy-back后要修改mysql数据目录的权限。
(其实copy-back就是将备份拷贝回了datadir下)
因为我是用root用户备份和恢复的,所以恢复后的数据文件是root权限,需要修改为mysql:mysql 。
chown –R mysql:mysql /datadir/
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
增量备份目录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表而言,执行增量备份时其实进行的是完全备份。
innobackupex --defaults-file=/etc/my.cnf --user=bkpuser --password='123' --incremental/root/xtrabackup_inc2 --incremental-basedir=/root/xtrabackup_inc1
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
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 &
生产环境都是主从模式,主提供服务,从提供备份。
#全量备份,此处设定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线程会在备份完成的时候重启。
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.5的全量备份,下的第一次增量备份
innobackupex --no-timestamp --user=bkpuser--password='123' --parallel=4 --incremental --slave-info --safe-slave-backup
--incremental-basedir=/root/xtrabackup/root/xtrabackup_inc
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