#!/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 "🎉 所有数据库导出并导入完成。"