ITPub博客

首页 > 数据库 > 数据库开发技术 > 如何通过Binlog快速恢复数据库

如何通过Binlog快速恢复数据库

原创 数据库开发技术 作者:步步运维步步坑 时间:2023-11-09 11:01:00 0 删除 编辑

XtraceBackup是由知名数据库软件服务企业Percona提供的一款热备工具,除了能够支持最为常见的MyISAM,INNODB引擎对象外,还支持XtraDB引擎。

安装

 yum install percona-xtrabackup -y

优点

  • 备份 高效 完整  可用

  • 备份任务执行过程中不会有阻塞任务

  • 节省磁盘空间,降低网络带宽占用

  • 自动验证机制

  • 恢复更快xtrabackup必须在MySQL服务端执行(但是创建的备份集不一定是保存在本地),特别是通过innobackupex命令创建备份集时,由于操作需要连接数据库获取信息,因此还要指定的连接参数(用户名,密码),而且连接所使用的的用户,必须拥有正确的操作权限。

percona官方在文档中说要在之后的版本中放弃innobackupex工具,推荐使用xtracebackupex工具

innobackupex的备份与恢复

innobackupex的参数有很多,仅通过实例说明经常使用的,若需要某些参数可以查看官方文档!


备份

备份很简单,/data/backup/为备份的目录innobackupex --user=root --password=123456  /data/backup/  

如果开启了binlog 文件会有对应的二进制日志文件备份和position 位置,做PIT恢复时使用PIT恢复cat xtrabackup_info

uuid = d60d5b36-2dff-11eb-b1f7-000c29d7c710  # 当前数据库UUID
name =
tool_name = innobackupex   #包含备份的工具,备份的命令,备份工具的版本,MySQL的版本
tool_command = /data/backup/ # 备份目录
tool_version = 2.3.6
ibbackup_version = 2.3.6
server_version = 5.5.68-MariaDB
start_time = 2020-11-23 21:50:34 #备份开始时间
end_time = 2020-11-23 21:50:39     # 备份结束时间
lock_time = 0
binlog_pos =
innodb_from_lsn = 0
innodb_to_lsn = 340415510   # 刷新到lsn(https://www.cnblogs.com/drizzle-xu/p/9713378.html)的位置
partial = N  
incremental = N             # 增量备份
format = file
compact = N
compressed = N
encrypted = N

恢复

此处我已经对当前数据库进行了删除操作

准备恢复:

所谓准备恢复,就是要为恢复做准备。就是说备份集没办法直接拿来用,因为这中间可能存在未提交或未回滚的事务,数据文件不一致,所以需要一个队备份集的准备过程。innobackupex --apply-log /data/backup/2020-11-23_21-50-34/

执行恢复:

innobackupex提供了--copy-back参数,就是将指定的备份集,恢复到指定的路径下面(这个指定的路径是配置文件中datadir指定的路径)!停止数据库systemctl stop mariadbrm -rf /var/lib/mysql # 线上环境先备份 原数据目录innobackupex --copy-back /data/backup/2020-11-23_21-50-34/complete 完成后 会发现新建了一个mysql 权限修改chown -R mysql.mysql /var/lib/mysql启动数据库 发现数据已经恢复了

其他参数

有时候因为socket文件不在默认位置,可以使用--socket指定位置:

增量备份

先做个全备

innobackupex --user=root --password=123456 --no-timestamp /data/backup/full_backup创建一个张表后插入几条数据

create table tb3(a varchar(5), sysTime datetime);
insert into tb3 select "aa", now();
insert into tb3 select "bb", now();
select * from tb3;


然后做增量备份

innobackupex --user=root --password=123456 --no-timestamp --incremental /data/backup/incre1 --incremental-basedir=/data/backup/full_backup

--no-timestamp: 上面已经说过,自己定义备份集的名字
--incremental /data/backup/incre1 :参数说明这次备份时一个增量备份,后面的路径指定增量备份的目录
--incremental-basedir=/data/backup/full_backup :增量备份时基于全备的,这个参数就是说明本次的增量备份时基于那次的全备,指向全备的目录文件

恢复

准备恢复

备份全库备份cp -r 2020-11-23_22-26-38 2020-11-23_22-26-38.bakll

准备数据

cd  incre1  mv 2020-11_22-55-29/* .


innobackupex --apply-log --redo-only --use-memory=1G /data/backup/2020-11-23_22-26-38

--use-memory=1G #表示使用的内存大小把增量备份在全备上面回放,也就是把增量备份附加到全备上。innobackupex --apply-log --redo-only /data/backup/2020-11-23_22-26-38 --incremental-dir=/data/backup/incre1整个恢复操作分为两步:

  • 1:准备全部备份,保证文件的一致性。

  • 2:把所有的增量备份附加到全备备份上。如果有多个增量备份,则每一个增量备份文件都要执行附加操作。但是要注意顺序,可以查看增量备份的xtrabackup_checkpoints文件根据lsn来确定文件的顺序

开始恢复

drop database fiberstore_cnsystemctl stop mariadbrm -rf /var/lib/mysqlinnobackupex --copy-back /data/backup/2020-11-23_22-26-38chown -R mysql.mysql /var/lib/mysqlsystemctl start mairadbmysql fiberstore_cn -e "select * from tb3"

发现数据已经恢复



原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51728