xtrabackup全库备份与恢复

xtrabackup全库备份与恢复

上传软件包及依赖库安装

rpm -ivh libev-4.15-3.el7.x86_64.rpm
安装xtrabackup软件
yum install percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm -y
rpm -ql percona-xtrabackup-24

备份核心思路:

① 使用innobackupex对数据库中的所有库进行全量备份,备份完成后,其不能立即进行数据恢复(数据不完整,缺少12:00 ~ 12:30这个过程中的数据)
② 预备阶段,备份过程中产生的xtrabackup_log应用到全量备份集
③ 模拟故障(删除数据) => rm -rf data/*
④ 动员运维工程师进行全库恢复
⑤ 测试验证

第一步:准备数据

mysql> create database db_itheima default charset=utf8;
mysql> use db_itheima;
mysql> create table t1(id int,name varchar(10)) engine=myisam;
mysql> insert into t1 values (1,'吕布');
mysql> create table t2(id int,name varchar(10)) engine=innodb;
mysql> insert into t2 values (1,'貂蝉');

第二步:专门准备一个数据库备份账号,开通相应权限

创建备份用户admin,并授予相应权限

mysql> grant reload,process,lock tables,replication client on *.* to 'admin'@'localhost' identified by '123';
mysql> flush privileges;

说明:
在数据库中需要以下权限:
RELOAD和LOCK TABLES权限:为了执行FLUSH TABLES WITH READ LOCK
REPLICATION CLIENT权限:为了获取binary log位置
PROCESS权限:显示有关在服务器中执行的线程的信息(即有关会话执行的语句的信息),允许使用SHOW ENGINE

第三步:使用innobackupex工具进行全库备份

innobackupex --user=admin --password=123 /full_xtrabackup
  • 说明:备份目录默认会自动创建,也可以手动创建
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

第一次运行报错:

200829 15:48:59  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'admin'  (using password: YES).
Failed to connect to MySQL server: DBI connect(';mysql_read_default_group=xtrabackup','admin',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at - line 1314.
200829 15:48:59 Connecting to MySQL server host: localhost, user: admin, password: set, port: not set, socket: not set
Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).

出现以上问题的主要原因在于我们的mysql.sock并不在/var/lib/mysql目录下。为什么其会自动连接/var/lib/mysql目录下的mysql.sock呢?

原因1:可能在/etc目录下还有my.cnf文件,影响了innobackupex的执行。

原因2:innobackupex拥有自己的默认配置,默认读取了/var/lib/mysql/mysql.sock文件

  • 解决方案:

方案1:把你的套接字文件创建一个软链接,放置于/var/lib/mysql/mysql.sock文件中

mkdir /var/lib/mysql
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

方案2:在innobackupex中添加一个-S选项,执行套接字

innobackupex -S /tmp/mysql.sock --user=admin --password=123 /full_xtrabackup

第四步:预备阶段,把备份这段时间内产生的日志整合到全量备份中

innobackupex --user=admin --password=123 --apply-log /full_xtrabackup/2020-08-29_15-59-22

第五步:模拟数据库故障

rm -rf /mysql_3306/data/*
pkill mysqld

第六步:快速的恢复数据库中的数据

rm -rf /mysql_3306/data/*
innobackupex --copy-back /full_xtrabackup/2020-08-29_15-59-22

第一次恢复报错:

innobackupex version 2.4.7 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 05f1fcf)
Error: datadir must be specified.

出现以上问题的主要原因在于,innobackupex工具无法找到MySQL中的数据目录。

  • 解决方案:
    把my.cnf配置文件传递给innobackupex,让其自动识别这个文件中的datadir
    innobackupex --defaults-file=/mysql_3306/my.cnf --copy-back /full_xtrabackup/2020-08-29_15-59-22

第七步:恢复数据时,一定要记得更改/mysql_3306/data目录下的文件拥有者以及所属组权限,否则mysql无法启动

chown -R mysql.mysql /mysql_3306/data

第八步:启动MySQL,测试其是否正常

service mysql_3306 start
mysql -p
Enter password:123

第9步:其它

  • 全备:
innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 /home/backup/full
  • 全备恢复:
innobackupex --apply-log /home/backup/full/2017-06-14_21-26-56
 
innobackupex --copy-back /home/backup/full/2017-06-14_21-26-56
  • 增备:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/home/backup/full/2017-06-14_21-26-56 --incremental /home/backup/incremental
  • 增备恢复:
第一步是在所有备份目录下重做已提交的日志:
innobackupex --apply-log --redo-only /home/backup/full/2017-06-14_21-26-56
innobackupex --apply-log --redo-only /home/backup/full/2017-06-14_21-26-56 --incremental-dir=/home/backup/incremental/2017-06-14_21-35-43
第二步回滚未完成的日志:
innobackupex --apply-log /home/backup/full/2017-06-14_21-26-56
第三步拷贝:
service mysql stop
执行copy-back之前需要清空mysql的data目录
innobackupex --copy-back /home/backup/full/2017-06-14_21-26-56
启动之前注意data目录的权限问题
service mysql start
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值