把MySQLMySQL 服务器1 数据库 复制 到 MySQL 服务器2 脚本 | 一见知得 | Mr J Blog

把MySQLMySQL 服务器1 数据库 复制 到 MySQL 服务器2 脚本

Mr J 62 0
#!/bin/bash

# === MySQL 源配置 ===
MYSQL_HOST="localhost"
MYSQL_PORT=3306
MYSQL_USER="x-x-x"
MYSQL_PASSWORD="xxxxx"

# === TiDB Cloud 配置 ===
TIDB_USER="xxx"
TIDB_HOST="xxx"
TIDB_PORT=4000
TIDB_PASSWORD="xxxx"
TIDB_CA="/etc/ssl/certs/ca-certificates.crt"
SSL_MODE="VERIFY_IDENTITY"

# === 目录配置 ===
DUMP_DIR="./mysql_dumps"
mkdir -p "$DUMP_DIR"

# === 要排除的系统数据库 ===
EXCLUDE_DBS=("information_schema" "performance_schema" "mysql" "sys")

# === 获取数据库列表 ===
echo "获取 MySQL 数据库列表..."
DATABASES=$(mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SHOW DATABASES;" -s --skip-column-names)

# === 逐个处理数据库 ===
for DB in $DATABASES; do
    if [[ " ${EXCLUDE_DBS[*]} " =~ " $DB " ]]; then
        echo "跳过系统数据库:$DB"
        continue
    fi

    echo "正在导出数据库:$DB"
    DUMP_FILE="$DUMP_DIR/$DB.sql"
    mysqldump -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
        --single-transaction --default-character-set=utf8mb4 "$DB" > "$DUMP_FILE"

    echo "正在在 TiDB 中创建数据库(如果不存在):$DB"
    mysql --comments -u "$TIDB_USER" -h "$TIDB_HOST" -P "$TIDB_PORT" \
        --ssl-mode="$SSL_MODE" --ssl-ca="$TIDB_CA" -p"$TIDB_PASSWORD" \
        -e "CREATE DATABASE IF NOT EXISTS \`$DB\` DEFAULT CHARACTER SET utf8mb4;"

    echo "正在导入数据库到 TiDB:$DB"
    mysql --comments -u "$TIDB_USER" -h "$TIDB_HOST" -P "$TIDB_PORT" \
        --ssl-mode="$SSL_MODE" --ssl-ca="$TIDB_CA" -p"$TIDB_PASSWORD" "$DB" < "$DUMP_FILE"

    echo "✅ 已完成:$DB"
done

echo "🎉 所有数据库导出并导入完成。"
发表评论
表情 图片 链接 代码

分享
微信
微博
QQ