[教學][Ubuntu 架站] 如何使用 Linux 命令行備份 MySQL 數據庫並使用 Cron 自動化

如果你不小心更改資料或遭受駭客攻擊,對 MySQL 資料庫進行頻繁的自動備份非常重要。在本教學中,我們將學習如何使用 mysqldump 導出資料庫並使用 crontab 來自動化整個過程。

1. 準備 MySQL 備份資料夾

在本教學中,我們將備份保存到 /var/www_backups/。理想情況下,你會將這儲存在異地服務器上,但在本教學中,我們將專注於在本地創建備份。

首先創建備份資料夾。

$ sudo mkdir /var/www_backups/

如果你當前沒有以 root 身份登錄 Linux,你應該更改備份資料夾的所有者,否則你的 mysqldump 將失敗並出現權限錯誤。 $(whoami) 將獲取當前登錄的用戶。 完成測試命令後,您始終可以將所有者更改回 root。

$ sudo chown $(whoami):$(whoami) /var/www_backups

2. mysqldump Client Utility

mysqldump 是 mysql 用於轉存儲資料庫的實用程式。它主要產生一個 SQL 腳本,其中包含從頭重新創建資料庫所必需的命令 CREATE TABLE INSERT 等。

這是典型的 mysqldump 命令的語法。

$ mysqldump -u [username] –p[password] [database_name] > /path/to/[database_name].sql
  • -u [username]:具有執行資料庫轉存所需權限的 MySQL 用戶。
  • –p[password]:用戶密碼。注意 -p 和密碼之間沒有空格。
  • [database_name]:資料庫名稱
  • >:輸出轉存到
  • /path/to/[database_name].sql:轉存文件的路徑和名稱。 [database_name] 可以是任何你想要的名稱。

3. MySQL 備份範例

備份所有資料庫

我們可以使用 –all-databases 選項轉存所有 MySQL 資料庫。在以下範例中,我們使用 root 用戶將所有資料庫轉存到 /var/www_backups/。轉存文件名為 all-databases.sql,但你可以將其更改為您想要的任何內容。通常你需要使用 MySQL root 帳戶來訪問所有資料庫。

$ mysqldump -u root -p[password] --all-databases > /var/www_backups/all-databases.sql

備份單個資料庫

要備份單個 MySQL 資料庫,只需將 [database_name] 替換為你自己的名稱。此範例中的轉存文件名為 [database_name].sql,但你可以將其更改為你想要的名稱。在此範例中,我們使用的是 root 用戶,你也可以使用任何有權訪問該特定資料庫的用戶。

$ mysqldump -u root -p[password] [database_name] > /var/www_backups/[database_name].sql

備份多個資料庫

要備份多個 MySQL 資料庫,請使用 –databases 選項後跟資料庫名稱,以空格分隔。此範例中的轉存文件名為 [database_names].sql,但你可以將其更改為你想要的名稱。

$ mysqldump -u root -p[password] [database_1_name] [database_2_name] > /var/www_backups/[database_names].sql

備份遠端資料庫

要備份遠端 MySQL 資料庫,只需使用 -h 選項後跟遠端 IP 地址或主機名。

$ mysqldump -h [ip_or_hostname] -u root -p[password] [database_name] > /var/www_backups/[database_name].sql

使用壓縮備份資料庫

要使用壓縮備份 MySQL 資料庫,我們可以使用 | gzip -c > 將輸出存為 gzip

$ mysqldump -u root -p[password] [database_name] | gzip -c > /var/www_backups/[database_name].sql.gz

4. 還原(Restore) MySQL

使用 mysql 語法將 .sql 文件恢復到資料庫。這是典型 MySQL 恢復的語法。

$ mysql -u [username] –p[password] [database_name] < /path/to/[database_name].sql
  • -u [username]:具有執行資料庫轉存所需權限的 MySQL 用戶。通常是 root,具有執行所需的權限。
  • –p[password]:用戶密碼。注意 -p 和密碼之間沒有空格。
  • [database_name]:資料庫名稱
  • <:導入轉存到
  • /path/to/[database_name].sql:轉存文件的路徑和名稱。

5. 自動 MySQL 備份

cron 是 Linux 中用於安排自動命令的服務。這些儲存在一個名為 crontab 的 cron 表中。

要打開 crontab,請運行:

$ sudo crontab -e

如果系統提示你選擇編輯器,請選擇 nano。

滾動到文件底部並增加你的 cron 計劃和 mysqldump 命令。在下面的範例中,我們每天使用 gzip 壓縮備份資料庫。

00 01 * * * mysqldump -u root -p[password] [database_name] | gzip -c > /var/www_backups/[database_name].sql.gz

00 01 * * * 將每 24 小時在凌晨 1 點運行命令並覆蓋所有當前的 .sql.gz 文件。

保存並關閉 crontab 以啟動 cron。 (如果使用 nano,請按 CTRL + X,按 Y,然後按 Enter)

等待 cron 運行並列出備份文件夾,直到看到 .sql.gz 文件。

$ ls -l /var/www_backups/

如果 .sql.gz 文件在一段時間後沒有出現,請確保命令和 crontab 時間正確。還可以使用以下命令檢查 cron 日誌:

$ sudo grep CRON /var/log/syslog

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。