自动化安装clickhouse-back
#!/bin/bash export PATH=$PATH:/usr/local/bin set -euo pipefail # 配置参数(可根据需要修改) CLICKHOUSE_USER="**" CLICKHOUSE_PASSWORD="**" # ClickHouse密码 BACKUP_PATH="/var/lib/clickhouse/backup" # 备份存储路径 ARCH="linux-amd64" # 系统架构(linux-amd64/linux-arm64) BINARY_TAR_PATH="/soft/clickhouse-backup-linux-amd64.tar.gz" # 二进制包路径 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # 依赖检查函数 check_dependencies() { local deps=("tar" "clickhouse-client" "") for dep in "${deps[@]}"; do if ! command -v $dep &> /dev/null; then echo -e "${RED}错误:未找到依赖 $dep${NC}" exit 1 fi done } # 配置ClickHouse用户权限 #configure_clickhouse_user() { # local users_xml="/etc/clickhouse-server/users.xml" # if [ ! -f "$users_xml" ]; then # echo -e "${RED}错误:ClickHouse配置文件不存在于 $users_xml${NC}" # exit 1 # fi # # echo -e "${YELLOW}[1/7] 配置ClickHouse用户权限...${NC}" # sed -i \ # -e '/<default>/a <allow_ddl>1</allow_ddl>' \ # -e '/<default>/a <allow_backup>1</allow_backup>' \ # "$users_xml" # # # 重启ClickHouse服务 # if ! systemctl restart clickhouse-server; then # echo -e "${RED}错误:ClickHouse服务重启失败${NC}" # exit 1 # fi #} # 安装二进制文件 install_binary() { echo -e "${YELLOW}[2/7] 安装二进制程序...${NC}" # 验证压缩包存在 if [ ! -f "$BINARY_TAR_PATH" ]; then echo -e "${RED}错误:二进制包 $BINARY_TAR_PATH 不存在${NC}" exit 1 fi # 创建临时目录 local temp_dir=$(mktemp -d) trap 'rm -rf "$temp_dir"' EXIT # 解压文件 if ! tar -xzf "$BINARY_TAR_PATH" -C "$temp_dir"; then echo -e "${RED}错误:解压失败${NC}" exit 1 fi # 复制文件 cp "${temp_dir}/build/linux/amd64/clickhouse-backup" /usr/local/bin/ chmod +x /usr/local/bin/clickhouse-backup # 验证安装 if ! clickhouse-backup --version &> /dev/null; then echo -e "${RED}错误:二进制文件验证失败${NC}" exit 1 fi } # 配置备份工具 configure_backup() { echo -e "${YELLOW}[3/7] 生成配置文件...${NC}" mkdir -p /etc/clickhouse-backup echo "[DEBUG] Current PATH: $PATH" echo "[DEBUG] clickhouse-backup path: $(which clickhouse-backup 2>/dev/null)" sh -c "clickhouse-backup default-config > /etc/clickhouse-backup/config.yml" echo -e "${YELLOW}[4/7] 修改配置文件...${NC}" sed -i \ -e "s/username: \"default\"/username: '${CLICKHOUSE_USER}'/" \ -e "s/password: \"\"/password: '${CLICKHOUSE_PASSWORD}'/" \ -e "s|backup_path: \"\"|backup_path: '${BACKUP_PATH}'|" \ /etc/clickhouse-backup/config.yml } # 创建备份目录 create_backup_dir() { echo -e "${YELLOW}[5/7] 创建备份目录...${NC}" mkdir -p "$BACKUP_PATH" chown -R clickhouse:clickhouse "$BACKUP_PATH" } # 验证功能 verify_installation() { echo -e "${YELLOW}[6/7] 验证备份功能...${NC}" # 创建测试备份 if ! clickhouse-backup create test_backup; then echo -e "${RED}错误:备份创建失败${NC}" exit 1 fi # 列出备份 if ! clickhouse-backup list; then echo -e "${RED}错误:备份列表查看失败${NC}" exit 1 fi } # 系统服务集成(可选) setup_service() { read -p "是否配置系统服务?(y/n): " choice case "$choice" in y|Y ) echo -e "${YELLOW}[7/7] 配置系统服务...${NC}" # 创建服务文件 tee /etc/systemd/system/clickhouse-backup.service > /dev/null <<EOF [Unit] Description=ClickHouse Backup Service After=network.target clickhouse-server.service [Service] User=clickhouse Group=clickhouse ExecStart=/usr/local/bin/clickhouse-backup server Restart=on-failure [Install] WantedBy=multi-user.target EOF # 重载系统服务 systemctl daemon-reload systemctl enable --now clickhouse-backup ;; * ) echo -e "${YELLOW}跳过系统服务配置${NC}" ;; esac } # 主执行流程 main() { check_dependencies configure_clickhouse_user install_binary configure_backup create_backup_dir verify_installation setup_service echo -e "\n${GREEN}部署成功!${NC}" echo -e "使用命令管理备份:" echo -e " 创建备份: clickhouse-backup create <backup_name>" echo -e " 恢复备份: clickhouse-backup restore <backup_name>" } main "$@"