ETCD 备份脚本

#!/bin/bash

etcd 备份脚本

用途:备份现有的单节点 etcd 数据

set -e

配置参数

BACKUP_DIR="/etcd-cluster/backup"

BACKUP_DATE=$(date +%Y%m%d_%H%M%S)

BACKUP_FILE="{BACKUP_DIR}/etcd_backup_{BACKUP_DATE}.db"

CONTAINER_NAME="etcd-old"

颜色输出

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

NC='\033[0m' # No Color

echo -e "{GREEN}========================================{NC}"

echo -e "{GREEN}etcd 数据备份脚本{NC}"

echo -e "{GREEN}========================================{NC}"

检查容器是否运行

echo -e "{YELLOW}\[1/5\] 检查 etcd 容器状态...{NC}"

if ! docker ps | grep -q "${CONTAINER_NAME}"; then

echo -e "{RED}错误: 容器 {CONTAINER_NAME} 未运行${NC}"

exit 1

fi

echo -e "{GREEN}✓ 容器运行正常{NC}"

创建备份目录

echo -e "{YELLOW}\[2/5\] 创建备份目录...{NC}"

mkdir -p "${BACKUP_DIR}"

echo -e "{GREEN}✓ 备份目录: {BACKUP_DIR}${NC}"

执行快照备份

echo -e "{YELLOW}\[3/5\] 创建 etcd 快照...{NC}"

docker exec ${CONTAINER_NAME} etcdctl snapshot save /tmp/etcd_snapshot.db

echo -e "{GREEN}✓ 快照创建成功{NC}"

复制快照到宿主机

echo -e "{YELLOW}\[4/5\] 复制快照到宿主机...{NC}"

docker cp {CONTAINER_NAME}:/tmp/etcd_snapshot.db "{BACKUP_FILE}"

echo -e "{GREEN}✓ 快照已保存到: {BACKUP_FILE}${NC}"

验证快照

echo -e "{YELLOW}\[5/5\] 验证快照完整性...{NC}"

docker exec ${CONTAINER_NAME} etcdctl snapshot status /tmp/etcd_snapshot.db --write-out=table

echo -e "{GREEN}✓ 快照验证通过{NC}"

导出所有数据(可选,用于检查)

echo -e "{YELLOW}\[额外\] 导出所有 key-value 数据...{NC}"

docker exec {CONTAINER_NAME} etcdctl get "" --prefix --keys-only \> "{BACKUP_DIR}/all_keys_${BACKUP_DATE}.txt"

docker exec {CONTAINER_NAME} etcdctl get "" --prefix \> "{BACKUP_DIR}/all_data_${BACKUP_DATE}.txt"

echo -e "{GREEN}✓ 数据已导出{NC}"

显示统计信息

echo -e "{GREEN}========================================{NC}"

echo -e "{GREEN}备份完成!{NC}"

echo -e "{GREEN}========================================{NC}"

echo -e "备份文件: ${BACKUP_FILE}"

echo -e "文件大小: (du -h {BACKUP_FILE} | cut -f1)"

echo -e "备份时间: ${BACKUP_DATE}"

echo -e "{GREEN}========================================{NC}"

清理容器内临时文件

docker exec ${CONTAINER_NAME} rm -f /tmp/etcd_snapshot.db

echo -e "{GREEN}备份脚本执行完成!{NC}"

相关推荐
q***87602 小时前
yum安装redis
数据库·redis·缓存
煎蛋学姐2 小时前
SSM旅游资讯信息服务系统的实现04s3n(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·旅游·ssm 框架·旅游资讯系统·会员管理
3***31212 小时前
初识MySQL · 库的操作
数据库·mysql
合作小小程序员小小店2 小时前
网页开发,在线%新版本旅游管理%系统,基于eclipse,html,css,jquery,servlet,jsp,mysql数据库
java·数据库·eclipse·html·intellij-idea·旅游·jsp
anod2 小时前
奇怪的mysql时区问题
数据库·mysql·eclipse
鲸说MySQL2 小时前
MySQL表文件损坏
数据库·mysql
a***59262 小时前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
0***v7773 小时前
使用Dify访问数据库(mysql)
数据库·mysql
愚戏师3 小时前
MySQL 数据导出
数据库·笔记·mysql
倔强的石头_3 小时前
openGauss向量数据库:引领AI时代数据智能新纪元
数据库