mysql dump 拉取遠端資料同步到本地庫的shell 指令碼

_Phoenix發表於2024-06-17
#!/bin/bash

# 遠端MySQL連線資訊
REMOTE_HOST="8.8.11.100"
REMOTE_USERNAME="root"
REMOTE_PASSWORD="Yaya@1972"

# 本地MySQL連線資訊
LOCAL_HOST="8.8.9.248"  # 或者 "localhost"
LOCAL_USERNAME="root"
LOCAL_PASSWORD="root"

# 要備份並同步的資料庫列表
DATABASES=("alpha_erp""bamboo""bi_system""open_api""pdm""public_service""seata""ums""wms""xxl_job")

# 備份目錄
BACKUP_DIR="/usr/backup/mysql"

# 同步目錄(可選,用於儲存臨時SQL檔案)
SYNC_DIR="/tmp/mysql_sync"
mkdir -p "$SYNC_DIR"

# 迴圈備份並同步每個資料庫
for DB_NAME in "${DATABASES[@]}"
do
    # 建立備份檔名
    TIMESTAMP=$(date "+%Y%m%d_%H%M%S")
    REMOTE_BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$TIMESTAMP.sql"
    LOCAL_SYNC_FILE="$SYNC_DIR/$DB_NAME.sql"

    # 使用 mysqldump 命令備份遠端資料庫
    mysqldump -h $REMOTE_HOST -u $REMOTE_USERNAME -p$REMOTE_PASSWORD $DB_NAME > $REMOTE_BACKUP_FILE

    # 檢查備份是否成功
    if [ $? -eq 0 ]; then
        echo "備份 $DB_NAME 成功: $REMOTE_BACKUP_FILE"

        # 複製備份檔案到同步目錄(可選,如果備份和同步在同一臺機器上)
        cp $REMOTE_BACKUP_FILE $LOCAL_SYNC_FILE

        # 檢查本地資料庫是否存在,如果不存在則建立
        mysql -h $LOCAL_HOST -u $LOCAL_USERNAME -p$LOCAL_PASSWORD -e "SHOW DATABASES LIKE '$DB_NAME';" | grep -q "$DB_NAME"
        if [ $? -ne 0 ]; then
            echo "資料庫 $DB_NAME 在本地不存在,正在建立..."
            mysql -h $LOCAL_HOST -u $LOCAL_USERNAME -p$LOCAL_PASSWORD -e "CREATE DATABASE $DB_NAME;"
        fi

        # 匯入備份到本地資料庫
        mysql -h $LOCAL_HOST -u $LOCAL_USERNAME -p$LOCAL_PASSWORD $DB_NAME < $LOCAL_SYNC_FILE

        if [ $? -eq 0 ]; then
            echo "同步 $DB_NAME 到本地成功"
        else
            echo "同步 $DB_NAME 到本地失敗"
        fi
    else
        echo "備份 $DB_NAME 失敗"
    fi
done

相關文章