使用xtrabackup实现MySQL物理全量备份

10 篇文章 0 订阅

xtrabackup优缺点

优点:
1、备份快速、可靠
2、支持增量备份,更加灵活
3、备份过程不会打断正在执行的事务
4、能够基于压缩等命令节约磁盘空间
5、自动实现备份的检验
6、还原速度块

缺点:
1、只能针对innodb表增量备份,myisam表只能做全备
2、innobackupex备份myisam表之前要对库进行锁表,如果备份是在从库上进行会影响主从同步,造成延迟,对inndb表备份不会堵塞读写

xtrabackup备份原理

1、innobackupex先会开启一个xtrabackup_log后台检测进程,实时监测mysql的redo log的变化,发现redo有新的日志写入,立即将日志写入到日志文件xtrabackup_log中
2、物理拷贝innodb的数据文件和系统表空间idbdata1到以默认时间戳为备份目录的地方
3、复制结束后,执行flush table with read lock 进行全库的锁表,并备份非inndb文件
4、物理复制.frm .myd .myi等非inndb引擎文件到备份目录
5、查看二进制日志的位置
6、解锁表unlock tables
7、结束xtrabackup_log进程
在这里插入图片描述

xtrabackup备份恢复原理

1、启动xtrabackup_log进程检测mysql的redo log日志,将变化写入到自己的xtrabackup_log日志中
2、拷贝物理文件到备份目录
3、拷贝完后结束xtrabackup_log进程
4、预备阶段,将备份这段时间的事务写入到全量备份中
5、可以恢复数据到预备阶段这段数据

获取xtrabackup

https://mirrors.tuna.tsinghua.edu.cn/percona/centos/7/os/x86_64/
安装

安装依赖
[root@localhost ~]# yum -y install libev
安装xtrabackup
[root@localhost ~]# rpm -ivh --nodeps percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm

全库备份和恢复

实验准备
创建一个账号并授予相关的权限,这个账号用于备份
mysql> grant reload,process,lock tables,replication client on *.* to 'admin'@'llocalhost' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

reload和process,lock tables权限:为了执行flush tables with read lock
replication client权限:获取binary log位置
process,lock权限:显示服务器执行的线程信息(有关会话的语句信息)。允许使用show engines

使用innodackupex进行全库备份
[root@localhost ~]# innobackupex --user=admin --password=admin /tmp/xtrabackup/

在这里插入图片描述出现以上错误时因为innobackupex拥有一个自己的默认配置,默认读取了/var/lib/mysql/mysql.sock套接字文件,只用创建一个软连接

[root@localhost ~]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
再次执行(在执行之前要删除tmp/xtraback中的文件,因为不管成功与否,都会保存到该目录下)
[root@localhost ~]# innobackupex --user=admin --password=admin /tmp/xtrabackup/

当最后一行出现==completed OK!==表示已经成功

预备阶段,将备份这段时间产生的日志整合到全量备份中
[root@localhost ~]# innobackupex --user=admin --password=admin --apply-log /tmp/xtrabackup/2021-11-12_07-21-38/

当最后一行出现==completed OK!==表示已经成功

模拟故障
删除数据目录
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
利用备份恢复数据
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /tmp/xtrabackup/2021-11-12_07-21-38/

当最后一行出现==completed OK!==表示已经成功

修改文件的属性
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/data
查询数据是否已经恢复
mysql> select *from tmp1;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | jack |   11 |
+----+------+------+
1 row in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值