1. 程式人生 > >Linux利用定時任務自動備份資料庫

Linux利用定時任務自動備份資料庫

一、在實際生產環境中遇到需要備份資料庫,防止伺服器或資料庫崩潰資料損壞時,無法挽救的情況,一種情況我們可以部署MySQL主主互備來備份資料庫,在機器資源不足以我們部署MySQL主主互備,又不能採取以人工手動定時備份資料庫這種繁瑣的操作時,我們可以利用Linux的定時任務crontab來自動的備份資料庫

1、我們先來看我們的需求,比如現在需要在每天晚上的1點30分自動備份MySQL資料庫中的名字為mysql的庫到一個指定的目錄,比如root目錄下的mysql_backup資料夾,那麼備份命令就是下面這樣

/usr/bin/mysqldump -uUsername -pPassword mysql > /root/mysql_backup/mysql_$(date +%Y%m%d_%H%M%S).sql

“Username”是我們資料庫的使用者

“Password”是這個使用者的密碼

“mysql”為我們需要備份的資料庫中的某個資料庫

因為我們每天晚上都會備份一下資料庫,所以備份之後我們以當時的備份時間來命名備份檔案,即為“mysql_$(date +%Y%m%d_%H%M%S).sql”,比如我2019年1月30號晚上1點30分整備份的資料庫即為“mysql_20190130_013000.sql”。

2、我們的需求是在每天晚上都備份一下,那麼每天都會生成一個檔案,時間久了硬碟就會被塞滿,而且很早之前的資料也沒有太大的保留意義,那麼我們可以在每天備份時同時刪除一段時間之前的備份資料,比如我們需要刪除30天之前的備份

find /root/mysql_backup/ -mtime +30 -type f | xargs rm -f

“/root/mysql_backup/”為我們備份檔案的儲存目錄

“-mtime +30”是設定時間為30天前

“-type f”表明查詢的型別是檔案

這行命令完成的操作是:查詢/root/mysql_backup/目錄下30天之前的檔案並且刪除。

3、備份跟刪除的命令我們都寫好了,那麼我們可以通過crontab來讓系統每天自動的去執行這兩個任務

建立一個任務指令碼mysql_autobackup.sh,寫入我們剛才的兩條命令並給於檔案最高許可權

#!/bin/bash
/usr/bin/mysqldump -uUsername -pPassword mysql > /root/mysql_backup/mysql_$(date +%Y%m%d_%H%M%S).sql
find /root/mysql_backup/ -mtime +30 -type f | xargs rm -f

crontab -e 寫入計劃任務並儲存

30 01 * * * /root/mysql_autobackup.sh

表示每天晚上1點30分會執行root目錄下的mysql_autobackup.sh指令碼,就是我們上面編寫的備份跟刪除操作的指令碼,這樣就可以完成系統每天自動備份資料庫並且會自動的去查詢超過30天的備份並刪除

二、crontab 的格式

1、以我們剛才寫的計劃任務為例

30 01 * * * /root/mysql_autobackup.sh

格式簡化之後是下面這樣

* * * * * *

第一列的“*”為分鐘 從1~59

第二列的“*”為小時 從0~23,0代表午夜12點

第三列的“*”為日 從1~31

第四列的“*”為月 從1~12

第五列的“*”為星期 從0~6,0代表星期天

第六列的“*”為要執行的命令

綜合起來就是下面的格式

分 時 日 月 星期 要執行的命令

2、舉一些例子

30 21 * * * reboot
上面的例子表示每晚的21:30重啟伺服器。
45 4 1,10,22 * * reboot
上面的例子表示每月1、10、22號的4:45重啟伺服器
10 1 * * 6,0 reboot
上面的例子表示每週六、週日的1:10重啟伺服器
0,30 18-23 * * * reboot
上面的例子表示在每天18:00至23:00之間每隔30分鐘重啟伺服器。
0 23-7/1 * * * reboot
晚上11點到早上7點之間,每隔一小時重啟伺服器