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

相关推荐
科技小花3 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56614 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全5 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717216 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi6 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai7 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw07 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209257 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256738 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑