bash shell 寫的mysql備份定時任務

2021-10-06 23:01:17 字數 1839 閱讀 2165

linux centos 7.x

mysql 5.7.28

裝在另一台機器上的mysql 支援服務的資料訪問。運維人員已為其配置從資料庫,做主從備份。但是做資料從從庫恢復的時候,整個過程比較長。所以決定在伺服器上做mysql備份。

該備份使用mysqldump, 直接將這個資料庫都儲存到本地硬碟上。

備份策略: 每一小時備份一次,只保留24小時內的備份資料。

name=$(date +%y-%m-%d-%h-%m-%s)
構造輸出檔名:

fname=$base$name
dump這個資料庫:

/work/install/mysql-5.7.28/bin/mysqldump -h 173.30.40.140  -p3306 -uuser -ppassword   car_subsidy > $fname

timestamp=`date +%s`

獲得當前時間戳:

timestamp=`date +%s`
獲取當前目錄下,檔名中包含 car_subsidy 的檔案:

dir=$(ls -t | grep 'car_subsidy')
迴圈獲取每個檔案:

for file in $dir
獲取檔案建立的時間戳

filestamp=$(date +%s -r $file)
計算當前時間戳與檔案的建立時間戳差值,差值大於24小時,則刪除該檔案,並將該行為記錄到日誌中:

timediff=$[$timestamp-$filestamp]

if [ $timediff -gt `expr 3600 \* 24` ];

then

rm -rf $file

echo "delete $ $" >> log

fidone

定時任務

crontab -e

0 */1 * * * cd /home/digitalx/backup && sh bp.sh

bp.sh

cd /home/digitalx/backup

base="car_subsidy.sql"

name=$(date +%y-%m-%d-%h-%m-%s)

fname=$base$name

/work/install/mysql-5.7.28/bin/mysqldump -h 173.30.40.140 -p3306 -uuser -ppassword car_subsidy > $fname

timestamp=`date +%s`

d=$(date +%y-%m-%d-%h-%m-%s)

echo $timestamp

dir=$(ls -t | grep 'car_subsidy')

for file in $dir

dofilestamp=$(date +%s -r $file)

timediff=$[$timestamp-$filestamp]

if [ $timediff -gt `expr 3600 \* 24` ];

then

rm -rf $file

echo "delete $ $" >> log

# echo "finished at $" >> log

fidone

echo "finished at $" >> log

基本的bash shell 命令

linux man 頁面格式 name顯示命令的名稱和簡介 synopsis顯示命令的格式 description描述每個命令的選項 author 該命令開發人員資訊 reporting bugs提交bug報告途徑 see also推薦檢視相似命令 ps 命令 bsd風格的引數,前面不見破折線 gn...

bash shell 的變數處理

一次變數置換 變數沒有值 echo 若a沒有值,就送給a乙個abc,作為它的值,這時a的值就永久是abc了,直到下次修改。下面例子不常用 echo 若a沒有值,則提示 必須需要給變數乙個值 echo 若a沒有值,就借給a乙個值,次命令執行完後,a還是空值。變數有值 echo 臨時替換變數的值 a 1...

Bash Shell 的管道命令

1 cut 命令選取 cut d 分隔字元 f fields d 後面接分隔字元。用 f一起使用 f 根據 d的分隔字元將一段資訊分割成為數段 c 以字元的單位取出固定字元區間 eg echo path cut d f 5 以 作為分隔,取第五段字元 2 grep 上面cut命令是在一行資訊其中取出...