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}"

相关推荐
betazhou15 小时前
电科金仓数据库V9 MySQL兼容版本搭建一主一从体验
数据库·mysql·oracle·主从·高可用·kingbase·v9 mysql兼容版本
python在学ing15 小时前
Django框架学习笔记:从零基础到项目实战
数据库·python·django·sqlite
duoduo_sing16 小时前
数据库备份终极方案:从脚本手动到自动化热备+异地同步实战
运维·数据库·自动化·用友
Lao A(zhou liang)的菜园16 小时前
Oracle 增量检查点 & FAST_START_MTTR_TARGET 核心总结
数据库·oracle
wbs_scy16 小时前
MySQL 多表连接查询实战:内连接 + 外连接
数据库·mysql
杨云龙UP17 小时前
ODA/Oracle RAC 节点 Load 100+ 排查:一个 lsof 残留进程引发的负载虚高问题 2026-05-27
linux·数据库·oracle·centos·误操作
凯瑟琳.奥古斯特17 小时前
选择题专练数据库原理精选30题
开发语言·数据库·职场和发展·数据库开发
BD_Marathon17 小时前
SQL学习指南——事务
数据库·sql·oracle
biter down17 小时前
15:YAML配置文件
服务器·数据库·python
IT龟苓膏18 小时前
MySQL 表设计与 SQL 优化:从字段类型、主键设计到深分页优化一篇讲清
数据库·sql·mysql