#!/bin/bash # 源库配置(宿主机) SRC_HOST="192.168.1.128" SRC_PORT=9000 # 目标库配置(Docker容器) DEST_HOST="192.168.1.128" DEST_PORT=9001 echo "开始迁移:" # 获取迁移表清单 tables=$(clickhouse-client --host $SRC_HOST --port $SRC_PORT -q " SELECT DISTINCT concat(database, '.', name) FROM system.tables WHERE database NOT IN ('system','information_schema') ") # 优化参数配置 max_retries=3 # 单表最大重试次数 timeout=3600 # 单表超时时间(秒) for table in $tables; do echo "正在迁移表: $table" # 带重试机制的迁移命令 for ((i=1; i<=$max_retries; i++)); do timeout $timeout \ clickhouse-client --host $SRC_HOST --port $SRC_PORT \ --query "SELECT * FROM $table FORMAT Native" \ | clickhouse-client --host $DEST_HOST --port $DEST_PORT \ --query "INSERT INTO $table FORMAT Native" if [ $? -eq 0 ]; then echo "$table 迁移成功" break else echo "$table 第$i次迁移失败,等待重试..." sleep 10 fi done done