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點之間,每隔一小時重啟伺服器