#!/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}"
354

被折叠的 条评论
为什么被折叠?



