Varidata 新聞資訊
知識庫 | 問答 | 最新技術 | IDC 行業新聞
Varidata 知識文檔

如何在日本伺服器上自動匯出資料庫並透過腳本寄送郵件

發布日期:2026-08-19
日本伺服器腳本自動每日匯出並寄送資料庫備份

透過位於東京的 Linux 日本伺服器實例,搭配輕量級腳本與 Cron,你可以自動化每日遠端備份。腳本可以匯出資料庫、壓縮 SQL 檔案,並將封存檔寄送到你的收件匣,全程無需人工干預。相關產品可參考 日本伺服器

#!/bin/bash
mysqldump -u root -p'Password' my_db | gzip > /tmp/backup.sql.gz
echo "Backup attached" | mailx -s "Daily Backup" -a /tmp/backup.sql.gz user@example.com

將上述程式碼儲存為伺服器上的 backup.sh。使用 chmod +x backup.sh 讓腳本具備可執行權限。接著執行 crontab -e 打開 crontab 編輯器,新增 0 2 * * * /bin/bash /path/to/backup.sh,即可在每天日本標準時間(JST)凌晨 2:00 執行排程工作。透過此設定,你可以快速、全自動地匯出資料庫。

關鍵重點

  • 自動化命令列腳本可以穩定匯出遠端資料庫,避免人工作業錯誤。

  • 安全的設定檔能保護資料庫密碼,防止遭未授權系統使用者取得。

  • 檔案壓縮可縮小資料庫體積,加快郵件附件傳輸速度。

  • Cron 排程工作會在低流量時段自動執行每日資料庫備份。

撰寫腳本匯出資料庫

若要從位於東京的雲端實例持續、穩定地匯出資料庫,你需要一份可靠的腳本。手動匯出既耗時,又容易引入多餘的人為錯誤。自動化備份腳本可以在無人值守的情況下,完成資料庫結構匯出、資料表格式化與檔案建立等工作。

執行原生匯出工具

各類資料庫引擎都提供專用命令列工具,用於建立完整的邏輯備份。你可以透過原生 Linux Shell 腳本、Python 腳本或自訂 PHP 腳本來執行這些工具。MySQL 與 MariaDB 使用命令列工具 mysqldump 來產生包含完整 SQL 陳述式的文字檔。PostgreSQL 資料庫系統則透過 pg_dump 匯出資料庫快照,可產生自訂封存檔或一般 SQL 腳本。執行於 Linux 或 Windows 環境中的 Microsoft SQL Server 管理員,則可借助 PowerShell 模組 Export-DbaScript,乾淨地匯出結構與資料表物件。

資料庫引擎

原生命令列工具

輸出檔案類型

MySQL / MariaDB

mysqldump

SQL 文字檔

PostgreSQL

pg_dump

自訂二進位或 SQL 腳本

SQL Server

Export-DbaScript

T-SQL 腳本檔

你可以在遠端伺服器主機上撰寫一個簡單的 Bash 腳本,自動匯出資料庫。

#!/bin/bash
# Export MySQL and PostgreSQL databases automatically
mysqldump --defaults-file=~/.my.cnf my_app_db > /var/backups/db/mysql_backup.sql
pg_dump -U postgres_user app_db > /var/backups/db/pg_backup.sql

對於更複雜的資料庫備份作業,Python 腳本能提供額外的控制能力與彈性。你可以使用 Python 中的 subprocess 模組呼叫命令列工具、監控工作執行情況,並有條理地記錄錯誤日誌。PHP 腳本則可透過系統執行函式,在遠端 Web 主機上直接啟動匯出工具。在將指令寫入正式環境的自動化腳本之前,一定要先在伺服器終端機中手動測試這些匯出指令。此驗證步驟可確認伺服器環境已安裝所有必要的資料庫用戶端工具,且系統路徑設定正確。

管理憑證與儲存空間

切勿在可執行備份腳本中直接寫入明文資料庫密碼。一旦未授權使用者或受損服務存取到腳本檔案,硬編碼憑證就會構成嚴重安全風險。你必須將登入憑證儲存在安全的設定檔中,或透過受保護的環境變數傳入認證資訊。妥善隔離憑證,可以讓自動化腳本在匯出資料庫時既方便又安全,避免敏感金鑰暴露於系統行程表或工作日誌之中。

MySQL 會使用位於 Linux 使用者家目錄中的設定檔 .my.cnf。你可以在這個隱藏檔案中指定資料庫使用者憑證,讓用戶端工具在不暴露命令列密碼參數的前提下,自動完成身分驗證。PostgreSQL 則依賴儲存在使用者家目錄的 .pgpass 檔案,安全管理登入憑證。你需要使用 chmod 600 ~/.my.cnfchmod 600 ~/.pgpass 為這些設定檔設定嚴格的權限。如此即可確保只有對應的 Linux 使用者帳號能讀取或修改憑證內容。

請將產生的匯出檔案儲存在專用備份目錄中,並確認該目錄位於網站公開根目錄之外。你可以在日本伺服器實例上建立類似 /var/backups/db 的本機備份目錄,同時收緊目錄存取權限,避免未授權系統帳號檢視原始資料庫檔案。你也應透過標準日期格式指令,為備份檔名加上動態時間戳,維持儲存目錄的整齊有序。憑證獨立存放與嚴格的目錄權限控管,可確保遠端資料庫匯出始終安全可靠。

壓縮並透過郵件傳送備份

原始資料庫匯出通常會產生體積龐大的文字檔,這些大檔案會很快佔滿伺服器磁碟空間。由於郵件服務商一般對附件大小有嚴格限制,你無法直接將未壓縮的大檔作為附件寄出,因此必須在傳輸前先壓縮資料庫檔案。

壓縮匯出檔案

封存工具可以將 SQL 文字檔壓縮成更小的二進位封存檔。常見工具如 gzipzip 都能大幅減少檔案大小。壓縮不僅能縮短網路傳輸時間,也能節省伺服器儲存空間。這些工具會移除 SQL 腳本中大量重複的文字模式,以達到高壓縮比。

當你對大體積資料庫檔案進行壓縮時,可以明顯感受到檔案大小的顯著變化。下表示範處理原始資料庫匯出時的典型輸出體積數據。

壓縮方式

壓縮後大小

體積縮減

gzip

1.2 GB

88%

你可以在建立資料庫匯出時就直接完成壓縮。透過標準 Linux 管線運算子,能將資料庫匯出的輸出直接傳給壓縮工具。如此一來,原始資料會從匯出指令串流進入壓縮程式,最後寫入封存檔,而無需在伺服器磁碟上產生龐大的中介 SQL 文字檔。

#!/bin/bash
# Compress database export directly to destination archive
mysqldump --defaults-file=~/.my.cnf app_db | gzip -9 > /var/backups/db/backup.sql.gz

若資料庫主機政策要求加密,你也可以使用具備密碼保護參數的 zip 工具。強式加密封存可以在檔案跨越公共網路傳輸時保護其中的敏感資料。

透過 SMTP 寄送郵件

在產生壓縮備份檔案之後,伺服器仍需要一套可靠的郵件傳輸方案。託管在日本資料中心的雲端伺服器,通常無法直接依賴本地郵件傳輸代理對外發信,因為許多國際郵件服務商為防堵垃圾信,會封鎖來自雲端 IP 網段的直接 SMTP 流量。你必須設定安全的外寄通道,確保郵件能順利送達目標收件匣。

命令列工具 mailx 能將產生的封存檔作為附件加到外寄郵件中。你可以將 mailx 與已驗證的外部 SMTP 服務串接,例如 Amazon SES、SendGrid 或 Google Workspace 等服務,都支援透過 587 等安全連接埠接收驗證郵件。

#!/bin/bash
# Dispatch backup email via mailx using authenticated SMTP relay
echo "Attached daily database backup file." | mailx -s "Japan Server Backup" \
  -S smtp="smtp.example.com:587" \
  -S smtp-auth=login \
  -S smtp-auth-user="smtp_username" \
  -S smtp-auth-password="smtp_password" \
  -S ssl-verify=ignore \
  -a /var/backups/db/backup.sql.gz \
  recipient@example.com

你也可以透過 HTTP Web API 在 443 連接埠上安全傳輸備份檔案。Web API 可完全繞過對外 SMTP 連接埠的封鎖。只需借助 curl 等命令列工具發送簡單的 API 請求,即可上傳備份封存檔。

#!/bin/bash
# Send backup file via transactional email REST API
curl -s --user 'api:key-your_api_key' \
  https://api.mailgun.net/v3/your-domain.com/messages \
  -F from='Backup Service <backup@your-domain.com>' \
  -F to=user@example.com \
  -F subject='Daily Database Backup' \
  -F text='Database export file attached successfully.' \
  -F attachment=@/var/backups/db/backup.sql.gz

自動化 API 傳輸可以大幅提升遠端實例的郵件投遞成功率。正確設定認證標頭有助於避開常見的垃圾信過濾規則。在正式將腳本用於自動化匯出資料庫之前,務必先手動驗證外寄路徑,確認備份郵件能順利抵達目標收件匣。

使用 Cron 自動化執行

在 Linux 伺服器上,你可以依靠內建的 Cron 服務來實現資料庫備份自動化。這個背景工具會依照預設時間間隔執行指定指令,無需人工監看。

設定 Cron 排程

你需要根據實際資料庫環境,選擇合適的備份執行頻率。企業通常會依據資料更新頻率來規劃備份週期。

頻率

說明

每日

每 24 小時在離峰時段執行一次,適合中等頻率的資料變更。

每週

適用於重要性較低的資料,或搭配每日增量備份的完整快照。

持續 / 即時

適用於對資料連續性要求極高的關鍵系統,於資料變更時即時備份。

依據 Splunk 與 Caasify 等最佳實務,先評估系統資源狀況,並將資料庫匯出安排在業務離峰時段。妥善錯開 cron 工作的執行時間,避免多個任務同時佔用伺服器資源。例如,可使用 0 3 * * 1 /usr/bin/backup.sh 在每週一凌晨 3 點執行備份腳本;再以 0 2 * * * /path/to/backup.sh 安排每日凌晨 2 點的資料庫備份工作,於系統負載較低時執行。

管理日誌與權限

當檔案存取權限設定不當時,自動化 Cron 工作往往會在無聲無息中失敗。因此,在執行自動備份之前,必須先正確配置檔案權限與使用者歸屬。

  • 腳本檔案必須透過 chmod +x 賦予可執行權限。

  • /var/spool/cron/ 中的使用者 crontab 檔案必須屬於對應的使用者帳號。

  • 使用者 crontab 檔案權限應設定為 600,確保只有檔案擁有者能讀取或修改。

若腳本或 crontab 檔案權限配置不正確,Cron 將會略過相關工作。

類似 /bin/bash: /dev/null: Permission denied 的錯誤訊息,代表 Cron 工作缺乏對輸出重新導向目標的寫入權限。若 /var/spool/cron/crontabs/ 目錄下的使用者 crontab 檔案擁有者錯誤,則需透過 sudo chown username /var/spool/cron/crontabs/username 進行修正。

建議將腳本的標準輸出與錯誤訊息一併重新導向到 /var/log/db_backup.log 這類專用日誌檔。定期檢視日誌,有助於你快速確認腳本是否正常執行,並在發生網路故障時迅速定位問題。

設定日本伺服器環境

部署在東京資料中心的遠端 Linux 伺服器,需要進行特定在地化與網路調校。完成這些設定後,才能確保工作排程時間精準、遠端檔案傳輸穩定可靠。

調整 JST 時區設定

日本標準時間(JST)採固定 UTC+9 時區偏移,日本不實施日光節約時間,因此全年偏移量皆維持不變。你必須讓系統時間與在地營運時段對齊,才能確保備份工作在正確時間執行。

sudo timedatectl set-timezone Asia/Tokyo

請使用 IANA 官方時區識別碼 Asia/Tokyo 設定系統時區,而非僅使用靜態 UTC 偏移值。如此可在系統內部時鐘更新或時間同步時維持正確行為。

timedatectl status

透過狀態指令確認時區變更是否生效。之後,本機 Cron 排程器將以東京當地時間解析所有備份工作的執行時間。

因應網路延遲

從日本向遙遠的國際目的地傳送資料庫封存檔時,難免會遇到明顯的網路延遲。跨洋光纖路徑的物理距離,會顯著拉高到海外郵件端點的網路 ping 延遲。

  • 通往北美地區的平均 ping 延遲通常落在 199.151 ms、200.303 ms 或 202.869 ms 左右。

  • 儘管延遲較高,這些連線的網路可靠性仍然很高,穩定度量測可達 99.996% 或 100.000%。

含有大型附件的郵件在傳送階段會耗費更多時間。

較高的延遲會拖慢資料傳輸期間的 TCP 連線速度。因此,在向國際 SMTP 伺服器傳輸封存檔時,你需要適度提高腳本中的網路逾時設定,建議將連線逾時設為至少 60 秒,以避免因附件上傳時間過長而過早中斷連線。

透過在東京 Linux 實例上建立穩健的備份流程,你可以有效保護遠端伺服器資料。自動化腳本會先匯出資料庫,再將原始 SQL 輸出壓縮為精簡封存檔,最後透過已驗證的 SMTP 中繼寄送到你的信箱。搭配排定好的 Cron 工作,即可在無需人工監控的情況下,持續且可靠地執行備份。

在正式於生產環境執行腳本之前,請逐項檢查下列安全清單:

  • 使用 chmod 600 限制腳本與設定檔的存取權限。

  • 將密碼儲存在安全的憑證檔中,而非腳本明文。

  • 先在命令列中手動執行腳本,確認封存檔建立與郵件傳送日誌皆正常無誤。

常見問題解答(FAQ)

如何在備份腳本中保護資料庫密碼?

可以將登入憑證儲存在使用者家目錄中的隱藏設定檔(例如 .my.cnf.pgpass),並透過 chmod 600 限制存取權限,確保只有當前帳號能讀取。切勿在腳本檔案中直接硬編碼明文密碼。

為什麼日本雲端伺服器通常需要外部 SMTP 中繼?

許多雲端服務供應商會封鎖直接對外的 SMTP 流量,以降低垃圾信風險。因此,你通常需要透過外部 SMTP 服務或 HTTP REST API,經由 587 或 443 等連接埠進行驗證傳輸,確保備份郵件能穩定送達收件匣。

若自動化 Cron 備份工作失敗,該如何排除?

首先檢查腳本檔是否具備可執行權限;接著檢視 /var/log/db_backup.log 中的 Cron 錯誤輸出,看是否有權限不足等訊息。然後確認憑證檔是否設定正確,並在伺服器終端機中手動執行備份指令,以便快速定位問題所在。

為什麼在寄送資料庫備份郵件前要先壓縮檔案?

未壓縮的 SQL 匯出檔案體積龐大,會很快佔滿磁碟空間,也容易觸及郵件服務商對附件大小的限制。使用 gzip 等壓縮工具可以大幅縮小檔案體積,明顯加快長距離網路傳輸。

您的免費試用從這裡開始!
聯繫我們的團隊申請實體主機服務!
註冊成為會員,尊享專屬禮遇!
您的免費試用從這裡開始!
聯繫我們的團隊申請實體主機服務!
註冊成為會員,尊享專屬禮遇!
Telegram Teams