写点什么

TiDB 备份存储选择指南

  • 2025-01-03
    北京
  • 本文字数:2040 字

    阅读完需:约 7 分钟

作者: cchouqiang 原文来源:https://tidb.net/blog/2633291a

背景

TiDB 数据库是一款开源、云原生、分布式的数据库系统,它兼容 MySQL 协议,支持弹性水平扩展和实时分析。TiDB 数据库基于 Raft 协议实现分布式事务的强一致性,每个 tikv 数据节点都可以提供读写能力,当对 TiDB 数据库进行物理备份时,通过访问 PD 节点,获取所有 TiKV 节点访问地址以及数据分布信息,并把每个 tikv 节点上的 leader region 数据写到备份存储上,因此,每个 TiKV 节点都要挂载共享的备份存储。TiDB 支持 Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage 和 NFS 作为备份恢复的存储。


备份存储选择

   TiDB 数据库支持 cloud 环境上部署、On-Premise 环境上部署。


当 TiDB 数据库部署在 cloud 环境上,推荐使用 Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage 等云存储服务;


如果 TiDB 集群部署在 On-Premise (自建机房)中,则推荐以下方式:


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

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


本文主要介绍 MinIO 和 NFS 两种方式作为备份存储,对数据库进行备份。

备份存储搭建

搭建 MinIO

1、下载 MinIO 安装包

wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio#赋执行权限chmod u+x minio
复制代码

2、编辑配置文件

# 该文件在路径 /opt/soft/minio/config 下,文件名为 minio


#配置如下:#定义root账户名称MINIO_ROOT_USER="minioadmin"#定义root密码MINIO_ROOT_PASSWORD="minioadmin"#定义工作目录MINIO_VOLUMES="/brdata"#定义文件服务地址和端口 MINIO_OPTS="--address IP:9000"#定义控制台的地址和端口 MINIO_OPTS1="--console-address IP:19001"
复制代码

3、添加 systemd 自启动服务

vim /etc/systemd/system/minio.service文件内容如下:[Unit]Description=MinIODocumentation=https://docs.min.ioWants=network-online.targetAfter=network-online.targetAssertFileIsExecutable=/opt/soft/minio/bin/minio
[Service]WorkingDirectory=/brdata#ProtectProc=invisible
EnvironmentFile=-/opt/soft/minio/config/minioExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /data/minio/data\"; exit 1; fi"ExecStart=/opt/soft/minio/bin/minio server --address IP:9000 $MINIO_OPTS $MINIO_OPTS1 $MINIO_VOLUMES
# Let systemd restart this service alwaysRestart=on-failureRestartSec=5
# Specifies the maximum file descriptor number that can be opened by this processLimitNOFILE=65536
# Specifies the maximum number of threads this process can createTasksMax=infinity
# Disable timeout logic and wait until process is stoppedTimeoutStopSec=infinitySendSIGKILL=no
[Install]WantedBy=multi-user.target
复制代码

4、启动服务

#加载配置systemctl daemon-reload#启动miniosystemctl start minio.service#开启开机自启systemctl enable minio.service
复制代码

5、登录服务

登录地址:IP:19001


账户:minioadmin


密码:minioadmin

6、创建 bucket

创建数据库使用的备份 bucket 为:brbucket


7、创建 serviceAccount

首先创建一个用户:用户名为 br123


然后在该用户下创建 serviceAccount


现在使用的秘钥是:


ACCESS_KEY:1hjBhmvm8eXWeSPa0bDy


SECRET_ACCESS_KEY:oxzXcazaCNSr5VgUmEZqlmdj7KJZJdH6FvnQtaKA



8、使用 br 备份到 MinIO 存储中

cat br_backup.sh
#!/bin/bash
export AWS_ACCESS_KEY_ID=nXl4EgFuVYk5jZjqexport AWS_SECRET_ACCESS_KEY=A1aeZwuynRX47TSe31d9SFlHq6H0d89J
######参数#########
#tidb的pd地址ip:port,多个端口用英文逗号分隔pdPath=PDIP1:2379,PDIP2:2379,PDIP3:2379#minio的bucketminioPath="brbucket"#日志保存地址 不需要/结尾logPath=/home/tidb#br执行文件的地址brPath=/home/tidb/tidb-toolkit-v8.5.0-linux-amd64/bin/#minio服务器地址http://ip:portminioServer="http://IP:9000"
#执行命令
commandStr0="${brPath}br backup full --pd \"${pdPath}\" --storage \"s3://${minioPath}/fullbackup\" --s3.endpoint ${minioServer}"
commandStr0
复制代码

挂载 NFS 盘

1、安装 nfs 软件包


sudo yum install nfs-utils
复制代码


2、编辑配置文件


vim /etc/exports/nfs_share *(rw,sync,no_root_squash,no_subtree_check)
复制代码


3、重启生效


systemctl restart nfs-kernel-server
复制代码


4、挂载到其他服务器上


#创建挂载目录mkdir /data_nfsmount -t nfs server_ip:/nfs_share /data_nfs
编辑/etc/fstab文件,实现自动挂载server_ip:/nfs_share /data_nfs nfs defaults 0 0
验证是否挂载成功df -h
复制代码


5、使用 br 备份到 nas 盘上


./br backup full --pd "${PD_IP}:2379" --storage "local:///data_nfs/backupfull"
复制代码


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

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

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

评论

发布
暂无评论
TiDB备份存储选择指南_实践案例_TiDB 社区干货传送门_InfoQ写作社区