定期備份Docker下的mysql資料庫

2021-10-07 10:49:31 字數 3332 閱讀 8396

話不多說直接進入主題

vi /usr/mysqlbackup.sh
#!/bin/bash

# 設定mysql的登入使用者名稱和密碼(根據實際情況填寫)

mysql_user="root" #mysql備份使用者

mysql_password="root" #mysql備份使用者密碼

mysql_host="localhost"

mysql_port="3306" #mysql埠號

mysql_charset="utf8mb4" #mysql編碼方式

# 備份檔案存放位址(根據實際情況填寫)

backup_location=/usr/mysql #備份資料存放位置,末尾請不要帶"/",此項可以保持預設,程式會自動建立資料夾

# 是否刪除過期資料

expire_backup_delete="on" #是否開啟過期備份刪除 on為開啟 off為關閉

expire_days=7 #過期時間天數 預設為三天,此項只有在expire_backup_delete開啟時有效

backup_time=`date +%y%m%d%h%m` #定義備份詳細時間

backup_dir=$backup_location

welcome_msg="welcome to use mysql backup tools!" #歡迎語

# 備份指定資料庫中資料(此處假設資料庫是test)

docker exec -it 容器名/容器id mysqldump -h$mysql_host -p$mysql_port -u$mysql_user -p$mysql_password -b test1 > $backup_dir/test-$backup_time.sql

# 刪除過期資料

if [ "$expire_backup_delete" == "on" -a "$backup_location" != "" ];then

`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`

echo "expired backup data delete complete!"

fi

編寫完畢後,儲存退出

接下來我們測試一下編寫的指令碼是否可用(直接進入檔案目錄)

. mysqlbackup.sh
執行之後,發現報如下錯誤

報錯:the input device is not a tty

執行docker命令的指令碼的時候報錯如上標題,tty(終端裝置的統稱): tty一詞源於teletypes,或teletypewriters。這個的意思是說後台linux執行的時候沒有終端裝置。我們一般執行docker裡的命令時候都喜歡加上-it 這個引數,這裡的-it 就是表示終端裝置。所以我們在指令碼的命令中去掉t

docker exec -i 容器名/容器id mysqldump -h$mysql_host -p$mysql_port -u$mysql_user -p$mysql_password -b test1 > $backup_dir/test-$backup_time.sql
改寫完畢之後,儲存退出vi,重新執行一下指令碼檔案,進入備份檔案存放位址,我們就會發現已經有乙份資料庫備份檔案存在。

接下來我們需要做的就是定時備份

這時候需要使用crontab命令來定時執行備份任務

執行之前我們先來了解一下 crontab的檔案

前四行是用來配置crontab任務執行的環境變數

第一行shell變數指定了系統要使用哪個shell,這裡是bash

第二行path變數指定了系統執行命令的路徑

第三行mailto變數指定了crontab的任務執行資訊將通過電子郵件傳送給root使用者

如果mailto變數的值為空,則表示不傳送任務執行資訊給使用者

第四行的home變數指定了在執行命令或者指令碼時使用的主目錄。

星號(*):代表所有可能的值,如month欄位為星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。

逗號(,):可以用逗號隔開的值指定乙個列表範圍,例如,「1,2,5,7,8,9」

中槓(-):可以用整數之間的中槓表示乙個整數範圍,例如「2-6」表示「2,3,4,5,6」

正斜線(/):可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。

再使用crontab時需注意一下問題:

數字的表示最好用2為阿拉伯數字顯示

周和日最好不要同時用

定時任務要加註解

可以定向到日誌檔案或者空檔案

定時任務一定是絕對路徑,且目錄必須存在才能出結果

crontab 服務一定要開啟執行

網上練習參考

##每月每天凌晨3點30分和中午12點20分執行test.sh指令碼

30 3,12 * * * /home/test.sh

##每月每天每隔6小時的每30分鐘執行test.sh指令碼

30 */6 * * * /home/test.sh

##每月每天早上8點到下午18點每隔2小時的每30分鐘執行test.sh指令碼

30 8-18/2 * * * /etc/init.d/network restart

##每月每天晚上21點30分執行test.sh指令碼

30 21 * * * /etc/init.d/network restart

##每月1號、10號、22號凌晨4點45分執行test.sh指令碼

45 4 1,10,22 * * /etc/init.d/network restart

##8月份周

一、週日凌晨1點10分執行test.sh指令碼

10 1 * 8 6,0 /etc/init.d/network restart

##每月每天每小時整點執行test.sh指令碼

00 */1 * * * /etc/init.d/network restart

#新建定時任務命令

crontab -e
編寫任務檔案(每隔六小時備份一次)

1 */6 * * * cd /usr;sh mysqlbackupsh >> log.txt 2>>log.txt
#檢視定時任務命令

crontab -l
#刪除所有定時任務命令

crontab -r

linux 下利用 crontab 備份mysql

vi mysql bak dbbackup.sh 目錄自定義 在指令碼中編輯 mysqldump uusername ppassword default character set utf8 dbname gzip mysql bak bak date y m d h m s sql.gz 將其中的...

CentOS下使用docker安裝mysql

查詢mysql映象 docker search mysqldocker pull mysql新建資料夾data conf和檔案my.cnf mkdir root mysql data mkdir root mysql conf vi root mysql conf my.cnf編寫配置 client...

docker上定期備份mysql資料庫

container name 容器名稱,此處也可填容器id。db user 資料庫賬號。db password 資料庫密碼。database 要備份的資料庫。file path 備份出來的檔名。docker exec it mysqldump u p 1.能指定要備份的資料庫 2.將備份出來的sql...