自动化安装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 "$@"

 

posted @ 2025-03-03 18:06  枫叶流华  阅读(40)  评论(0)    收藏  举报