MySQL备份恢复--Xtrabackup

MySQL备份恢复--Xtrabackup_第1张图片

Percona XtraBackup是一个免费的,开源的,完整的在线备份解决方案,适用于所有版本的Percona Server for MySQL,MySQL和MariaDB。 Percona XtraBackup具有超过2,100,000次的下载量,可以在事务处理系统上执行在线非阻塞,紧密压缩,高度安全的备份,以便在计划维护期间应用程序保持完全可用状态。据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。其具有以下几大特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
(6)支持部分备份(MyISAM),支持备份到远程服务器
(7)实现的是物理复制
下面我们就运用Xtrabackup进行数据库的备份恢复

一.全量备份

1.下载安装软件

软件现在可以通过官方网站https://www.percona.com进行下载,软件是可以直接下载的,但用户手册需要进行信息注册后才可下载
这里采用的环境为两台CentOS7.3主机
数据库为base源Mariadb5.5.56
软件为percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
yum install -y mariadb-server
yum install -y percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm

2.创建专用MySQL账户

使用root权限登录备份缺乏安全性,所以穿件最小权限账户进行备份恢复操作
MariaDB> CREATE USER ‘bkpuser’@’localhost’ IDENTIFIED BY ‘123123’; #穿件帐号
MariaDB> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘bkpuser’@’localhost’; #先撤销所有权限
MariaDB> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON . TO ‘bkpuser’@’localhost’; #赋予最小权限
MariaDB> FLUSH PRIVILEGES; #刷新权限

3.开启二进制日志文件记录

vim /etc/my.cnf.d/server.cnf
log-bin=master-log
因为全量备份过后不能保证数据库不变动且时间点也不同,所以需要使用二进制日志重写来同步

4.生成全量备份文件

innobackupex –user=bkpuser –password=123123 –host=localhost /backup
171112 17:29:02 completed OK!
[root@CentOS7 ~]$cd /backup/
[root@CentOS7 /backup]$ls
2017-11-12_17-28-56 fullbackup-201715:44:54.sql
[root@CentOS7 /backup]$cd 2017-11-12_17-28-56/
[root@CentOS7 /backup/2017-11-12_17-28-56]$ls
xtrabackup_checkpoints
xtrabackup_binlog_info
backup-my.cnf
xtrabackup_logfile
performance_schema
ibdata1
mysql
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(5)backup-my.cnf —— 备份命令用到的配置选项信息;
(6)xtrabackup_logfile——包含运行:xtrabackup –prepare所需的数据。 这个文件越大,xtrabackup –prepare过程将花费更长的时间完成。

5.准备备份文件

“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
innobackupex –apply-log /backup/2017-11-12_17-28-56/
171112 17:33:14 completed OK!
scp /backup/2017-11-12_17-28-56/ [email protected]:/backup/
cat /backup/2017-11-12_17-28-56/xtrabackup_binlog_info
master-log.000001 714
mysqlbinlog -j 714 master-log.000001 > /backup/binlog.sql
scp /backup/binlog.sql [email protected]:/tmp/

6.同步数据

systemctl stop mariadb.service
rm -rf /var/lib/mysql/*
innobackupex –copy-back /backup/2017-11-12_17-28-56
171112 17:37:24 completed OK!
chown -R mysql:mysql /var/lib/mysql/
systemctl start mariadb.service
MariaDB>source /tmp/master-log.000001;

二.准备增量/差异备份

增量备份与差异备份的性质差不多,只是备份时的目标文件区别,第二次生成备份文件如果是以第一次增量文件为基准,便是增量备份,如果仍然以全量备份为基准,那便是差异备份
innobackupex –user=bkpuser –password=123123 –host=localhost /mydata/backups/
#生成全量备份
innobackupex –incremental /backup –incremental-basedir=BASEDIR1
innobackupex –incremental /backup –incremental-basedir=BASEDIR2
innobackupex –apply-log –redo-only BASE-DIR
#准备恢复文件
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
#顺序叠加准备
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
#准备完成后通过查看lsn序列码确定是否备份完全
cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 1597945
last_lsn = 1597945
compact = 0
recover_binlog_info = 0

之后的恢复工作以及二进制重写于全量备份一致,这里不再进行赘述

下面提出几个注意项:

(1)恢复时MySQL服务坚决不能启动
(2)软件复制与被复制服务器都要安装,实现的是物理复制
(3)非最后一次增量备份恢复没完成事务不要动,最后一次回滚未完成事务

(4)本机宕机恢复之后要做全量备份,旧的全量备份已经进行回滚回滚,不再适用

(5)恢复时合理关闭二进制日志记录,可以避免不必要的I/O压力和磁盘占用

你可能感兴趣的:(linux)