一、在實際生產環境中遇到需要備份數據庫,防止服務器或數據庫崩潰數據損壞時,無法挽救的情況,一種情況我們可以部署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/ -name sdadmin'*.sql*' -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點之間,每隔一小時重啟服務器
————————————————
版權聲明:本文為CSDN博主「咖啡那么濃」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ywd1992/article/details/81219091