mysql迁移备份脚本,并自动传输到另一台服务器

备份脚本

#!/bin/bash

# 设置数据库连接信息
DB_HOST="localhost"
DB_USER="root"
DB_PASS="password"

# 远程服务器信息
REMOTE_HOST="192.168.1.2"
REMOTE_USER="root"
REMOTE_DIR="/root/database"

# 获取所有数据库列表
DATABASES=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" -Nse "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA;")

# 循环处理每个数据库
for DB_NAME in $DATABASES; do
  # 跳过系统数据库
  if [[ "$DB_NAME" == "information_schema" || "$DB_NAME" == "mysql" || "$DB_NAME" == "performance_schema" || "$DB_NAME" == "sys" ]]; then
    echo "跳过系统数据库: $DB_NAME"
    continue
  fi


  # 构建导出文件名
  OUTPUT_FILE="${DB_NAME}.sql"

  # 使用 mysqldump 导出整个数据库,包括视图,函数和定时任务
  mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" \
    --routines --events \
    "$DB_NAME" > "$OUTPUT_FILE"

  echo "已导出数据库 '$DB_NAME' 到文件 '$OUTPUT_FILE'"

  # 使用 scp 传输文件到远程服务器
  scp "$OUTPUT_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
  echo "已传输 '$OUTPUT_FILE' 到 '$REMOTE_HOST:$REMOTE_DIR'"
done

恢复脚本

#!/bin/bash

# 数据库连接信息
DB_HOST="localhost"
DB_USER="root"
DB_PASS="password"

# 循环处理当前目录下的所有 .sql 文件
for file in *.sql; do
  # 获取文件名作为数据库名
  DB_NAME="${file%.sql}"

  echo "正在导入数据库: $DB_NAME"

  # 创建数据库,指定字符集和排序规则
  mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

  # 导入 SQL 文件到数据库
  mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < "$file"

  echo "数据库 '$DB_NAME' 导入完成."
done
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容