xtrabackup安装部署配置 备份恢复

11 篇文章 0 订阅
3 篇文章 0 订阅

[root@001 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

[root@001 ~]# yum list | grep percona

[root@001 ~]# yum install percona-xtrabackup-24 -y # 卸载命令:yum remove percona-xtrabackup

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[root@001 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/tarball/percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz

[root@001 ~]# tar xf percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz -C /usr/local/

[root@001 ~]# mv /usr/local/percona-xtrabackup-2.4.8-Linux-x86_64/ /usr/local/xtrabackup

[root@001 local]# echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile

[root@001 local]# source /etc/profile

[root@001 ~]# yum install numactl -y   #安装依赖

----全量备份

备份数据存放在/data/backup/下面,innobackupex会自动创建一个文件夹+当前系统的时间戳

创建测试数据库,表

mysql> create database test;

mysql> use test;

mysql> create table t1;

mysql> create table t1(id int auto_increment primary key);

mysql> insert into t1 values(null);

mysql> insert into t1 values(null);

mysql> insert into t1 values(null);

数据库备份

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456'  --socket=/var/lib/mysql/mysql.sock  /data/backup/full  

 

full日期下的文件各文件说明:

(1) backup-my.cnf —— 备份命令用到的配置选项信息;

(2) ibdata1 —— 备份的表空间文件;

(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

(5) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

6) xtrabackup_logfile —— 备份的重做日志文件。

 

二、数据库恢复

 

1、测试

 

关闭数据库,更改datadir目录


[mysql@rh64 ~]$ service mysql stop
Shutting down MySQL (Percona Server)...[  OK  ]
rm: cannot remove `/var/lock/subsys/mysql': Permission denied

[root@rh64 ~]# mv /var/lib/mysql /var/lib/mysql.bak
[root@rh64 ~]# cd /var/lib/mysql.bak
[root@rh64 mysql.bak]# ls
auto.cnf  ibdata2      ib_logfile1    mysql               prod      RPM_UPGRADE_HISTORY      test
ibdata1   ib_logfile0  ib_logfile101  performance_schema  rh64.pid  RPM_UPGRADE_MARKER-LAST

 

创建新的datadir:
[root@rh64 mysql.bak]# mkdir /var/lib/mysql


数据库恢复:备注xx--xx是备份的日期,恢复目录一定为空
[root@rh64 backup]# innobackupex --defaults-file=/etc/my.cnf  --copy-back --rsync /data/backup/full/xx--xx--xx  

......
151028 14:35:22 [01] Copying ./performance_schema/events_waits_history.frm to /data/mysql/backup/full/performance_schema/events_waits_history.frm
151028 14:35:22 [01]        ...done
151028 14:35:22 [01] Copying ./performance_schema/host_cache.frm to /data/mysql/backup/full/performance_schema/host_cache.frm
151028 14:35:22 [01]        ...done
151028 14:35:22 [01] Copying ./performance
......
151028 14:41:53 [01]        ...done
151028 14:41:53 [01] Copying ./performance_schema/events_stages_history_long.frm to /var/lib/mysql/performance_schema/events_stages_history_long.frm
151028 14:41:53 [01]        ...done
151028 14:41:53 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
151028 14:41:53 [01]        ...done
151028 14:41:54 completed OK!

修改数据文件夹权限

chown -R mysql.mysql /var/lib/mysql

chmod 755 -R /var/lib/mysql

systemctl start mysqld

问题一这时候我是远程登录阿里云的,mysql -u root -p输入正确的密码也可能登录不进报错28000

解决方法用mysql无密码进入或者初始mysql -u -root 不用密码直接登录

登录后,两行密码设置再设置一下密码会报错已经设置,没关系不用理会,退出重新就可以密码登录了

set password for 'root'@'localhost' =password('123456');

set password for 'root'@'%' =password('123456');

第二行因为我是远程连接阿里云服务器的创建远程用户名如下:

--------------------------------------------------------------------------------------------------------------------

【把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户。

mysql> grant all privileges on *.* to root@'%'identified by 'password';

如果是新用户而不是root,则要先新建用户

mysql>create user 'username'@'%' identified by 'password';  

mysql>flush privileges;更新MySQL数据】

-----------------------------------------------------------------------------------------------------------------------------------

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --use-memory=4G --apply-log  /data/2017-08-05_11-44-06/   #第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录就准备就绪

170805 16:49:32 completed OK!    #成功

 

 

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2017-08-05_11-33-06/     #第2步是copy-back,即把备份文件拷贝至原数据目录下。注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备

170805 16:49:32 completed OK!    #成功

 

增量备份

在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份是基于上一次的增量备份,以此类推。

全备份放在/data/backup/full,增量备份放在/data/backup/incremental

先来全量备份

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock /data/backup/full

为了测试效果,我们在t1表中插入数据

mysql> insert into t1 values(null);

再来增量备份

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2017-08-05_11-59-39/ --parallel=2

我们看看增量备份的大小以及文件内容

在test种创建t2,并插入数据然后创建增量备份2

mysql> use test;

mysql> create table t2(name varchar(20));

mysql> insert into t2 values('will');

mysql> insert into t2 values('tom');

mysql> insert into t2 values('jim');

创建增量备份2(这次是基于上次的增量备份)

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/incremental/2017-08-05_12-13-27/ --parallel=2

增量备份恢复

增量备份的恢复大体为3个步骤

*恢复完全备份

*恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数)

*对整体的完全备份进行恢复,回滚那些未提交的数据

恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)

[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39

将增量备份1应用到完全备份

[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-04-59

将增量备份2应用到完全备份(注意恢复最后一个增量备份时需要去掉--redo-only参数,回滚xtrabackup日志中那些还未提交的数据)

[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-13-27

把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据:

[root@001 ~]# innobackupex --apply-log /data/backup/full/2014-04-07_23-37-20/

把恢复完的备份复制到数据库目录文件中,赋权,然后启动mysql数据库,检测数据正确性

[root@001 ~]# systemctl start mysqld

 

 

 

[root@001 ~]# mv /var/lib/mysql /var/lib/mysql.bak

[root@001 ~]# mkdir /var/lib/mysql

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/2017-08-05_11-59-39/

chown -R mysql.mysql /var/lib/mysql

chmod 755 -R /var/lib/mysql

systemctl start mysqld

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值