首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 下 MySQL 自動備份 Shell 腳本完整範例

     編輯:MySQL 資料庫相關知識

腳本部署與排程設定

將備份腳本儲存為 /home/user/mysql_backup.sh,並透過 crontab 設定每天固定時間執行:

# crontab -l
# m h  dom mon dow   command
28 16 * * * /home/user/mysql_backup.sh

完整備份腳本內容

#!/bin/sh
# mysql_backup.sh: 備份 MySQL 資料庫並保留最新 5 天備份
# Last updated: 20 March 2006
# GNU GPL v2.0+, Copyright (C) 2006 Sam Tang

# MySQL 連線資訊
db_user="root"
db_passwd="password"
db_host="localhost"

# 備份儲存目錄
backup_dir="/home/mybackup"

# 日期格式 (dd-mm-yyyy)
time="$(date +\"%d-%m-%Y\")"

# 執行檔路徑
MYSQL="/usr/local/mysql/bin/mysql"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
MKDIR="/bin/mkdir"
RM="/bin/rm"
MV="/bin/mv"
GZIP="/bin/gzip"

# 檢查備份目錄是否可寫入
test ! -w $backup_dir && echo \"Error: $backup_dir is un-writeable.\" && exit 0

# 建立最新備份目錄
test ! -d \"$backup_dir/backup.0/\" && $MKDIR \"$backup_dir/backup.0/\"

# 取得所有資料庫名稱
all_db=\"$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')\"

# 逐一備份並壓縮
for db in $all_db
do
    $MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > \"$backup_dir/backup.0/$time.$db.gz\"
done

# 刪除最舊的備份 (第 5 天)
test -d \"$backup_dir/backup.5/\" && $RM -rf \"$backup_dir/backup.5\"

# 輪轉備份目錄 (0→1, 1→2, ...)
for int in 4 3 2 1 0
do
    if test -d \"$backup_dir/backup.$int\"
    then
        next_int=`expr $int + 1`
        $MV \"$backup_dir/backup.$int\" \"$backup_dir/backup.$next_int\"
    fi
done

exit 0

重要補充說明

  • MySQL 以 mysql 使用者身份執行,若 /home/mybackup 不可寫入會導致備份失敗。
  • 可透過 chmod 777 /home/mybackup 解決權限問題(生產環境建議使用更安全的權限設定)。
  • 腳本採用輪轉機制,自動保留最近 5 天備份,舊備份會被刪除。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved