写点什么

两种 TiDB 备份方案任你选择:NFS or S3(内含操作实践 / 备份 / 恢复)

作者: HZL_0-0 原文来源:https://tidb.net/blog/90ef741a

备份

概述

备份方式

TiDB 支持两种类型的备份,全量备份包含集群某个时间点的全量数据,日志备份包含业务写入在 TiDB 产生的数据变更记录。推荐这两种备份方式一起使用:


  • 开启日志备份:运行 tiup br log start 命令来启动日志备份任务,任务会在每个 TiKV 节点上持续运行,以小批量的形式定期将 TiDB 变更数据备份到指定存储中。

  • 定期执行快照(全量)备份:运行 tiup br backup full 命令来备份集群快照到备份存储,例如在每天零点进行集群快照备份。

备份存储

TiDB 集群部署在自建机房中,则推荐以下方式:


  • 搭建 MinIO 作为备份存储系统,使用 S3 协议将数据备份到 MinIO 中。

  • 挂载 NFS(如 NAS)盘到 br 工具和所有的 TiKV 实例,使用 POSIX file system 接口将备份数据写入对应的 NFS 目录中。


注意:


如果没有挂载 NFS 到 br 工具或 TiKV 节点,或者使用了支持 S3、GCS 或 Azure Blob Storage 协议的远端存储,那么 br 工具备份的数据会在各个 TiKV 节点生成。注意这不是推荐的 br 工具使用方式,因为备份数据会分散在各个节点的本地文件系统中,聚集这些备份数据可能会造成数据冗余和运维上的麻烦,而且在不聚集这些数据便直接恢复的时候会遇到 SST file not found 报错。

NFS 方式(不推荐)

NFS 快照备份实践

备份存储配置

集群环境中 TiKV 部署在 87、88、89,为了使得备份不分散 3 台服务器上,这里使用 NFS 将 3 台 TiKV 的备份数据聚集到 87 这一台服务器的一个目录中。


暂时无法在飞书文档外展示此内容


  1. 在 87、88、89 上安装 nfs 并启动



  1. 在 87 上执行以下命令:



  1. 将 88 和 89 的备份目录挂载到 87 的共享目录上,在 88、89 上分别执行以下命令:


备份工具 br 安装

  1. 在 87 上使用 tidb 用户执行:

执行全量备份

  1. 在 87 上使用 tidb 用户执行:



NFS 快照备份恢复实践

模拟删除 test 库

drop database test
复制代码

恢复全量备份数据

  1. 在 87 上使用 tidb 用户执行:



NFS 定时快照备份

准备备份脚本

  1. 在 87 上创建定时备份脚本:

添加定时任务

  1. 添加定时任务


使用 crontab -e 命令添加定时任务


# 添加 br 备份任务0 2 * * * sh /opt/scripts/fulldbbak.sh
复制代码


0 2 * * *表示每天凌晨 2 点进行备份, sh /opt/scripts/fulldbbak.sh表示执行备份脚本。

Minio 方式(推荐)

Minio 快照备份实践

离线部署 Minio

这里远程备份文件对象存储选择 minio,先使用 docker 在 172.23.57.233 上部署 minio


  1. 下载 minio 镜像


  1. 加载镜像

  2. 编写 docker-compose 文件

  3. 运行 minio

  4. 测试 minio


访问 http://172.23.57.233:9090/login 页面,使用设定的账户密码登录来测试是否部署成功



创建一个 bucket。



创建一个 Region,名称为 us-east-1



重启 minio 容器。

备份工具 br 安装

  1. 在 87 上使用 tidb 用户执行:

执行全量备份

  1. 在 87 上使用 tidb 用户执行:



Minio 快照备份恢复实践

模拟删除 test 库

drop database test
复制代码

恢复全量备份数据

  1. 在 87 上使用 tidb 用户执行:



Minio 定时快照备份

准备备份脚本

  1. 172.23.57.87 上创建定时备份脚本,执行日志存在 /tidb/minio_backup_log 目录下:

添加定时任务

  1. 添加定时任务


使用 crontab -e 命令添加定时任务


# 每天凌晨2点执行 br 备份任务   【0 3 1 * *   表示每个月1号凌晨3点的cron表达式】0 2 * * * sh /opt/scripts/minio_fulldbback.sh
复制代码

Python 脚本定时清理 minio 备份文件

在服务器 172.23.57.87/opt/scripts 目录下创建执行脚本。

Python 脚本准备

要求只保留 minio 中 TiDB 5 天的备份数据。


  1. 编写脚本,修改对应的 Minio 配置目标配置

  2. 脚本首行添加 Python 路径(通过 which python3 查看)

  3. 增加可执行权限:chmod +x /opt/scripts/clean_minio_backup.py

使用 Linux 中 Crontab (定时任务)进行清理

crontab -e
复制代码


添加下面命令后保存退出:


# 每天凌晨 3 点执行清理命令 0 3 * * * /opt/scripts/clean_minio_backup.py >> /opt/scripts/clean.log 2>&1


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
两种 TiDB 备份方案任你选择:NFS or S3(内含操作实践/备份/恢复)_TiDB第四届征文-运维开发之旅_TiDB 社区干货传送门_InfoQ写作社区