shell定時備份docker容器的mysql數(shù)據(jù)庫

1)設(shè)置Docker Mysql的volumes

mariadb:

? ? container_name: mariadb

? ? image: mariadb

? ? environment:

? ? ? - MYSQL_ROOT_PASSWORD=dbpassword

? ? ? - MYSQL_DATABASE=dbback

? ? ? - MYSQL_USER=dbuser

? ? ? - MYSQL_PASSWORD=dbpassword

? ? ? - "TZ=Asia/Shanghai"

? ? volumes:

? ? ? - /home/xldev/docker/mysqldata:/var/lib/mysql

? ? ? - /home/xldev/docker/config:/etc/mysql/conf.d

? ? ports:

? ? ? - 3306:3306


2)編寫備份腳本

#!/bin/bash

:<

此為參考shell示例代碼

根據(jù)每個服務(wù)器配置的不同進(jìn)行相應(yīng)的修改

賦值權(quán)限:

? ? Step-One :修改所有BACKUP用戶權(quán)限 sudo chown -R [用戶] back

????Step-Two :修改所有BACKUP組權(quán)限 sudo chgrp -R [用戶組] back

????Step-Three :賦予腳本執(zhí)行權(quán)限 sudo chmod 744 [腳本]

添加定時任務(wù):

? ? Step-One :查看定時任務(wù) crontab -l

????Step-Two :刪除定時任務(wù) crontab -r

????Step-Three :

????????crontab -e

????????#每天凌晨兩點十分執(zhí)行腳本 /data/tmp/mysqldata/backup/kstreamdb.sh

????????10 2 * * * /data/tmp/mysqldata/backup/kstreamdb.sh

????????Step-Four :重啟定時任務(wù) service crond restart

!

#當(dāng)前的時間作為備份的文件名

DATETIME=$(date +%Y_%m_%d_%H%M%S)

#服務(wù)器存放路徑

BACKUP=/data/tmp/mysqldata/backup

#docker容器備份存放路徑

DOCKER_BACKUP=/var/lib/mysql/backup

#docker容器名稱

DOCKER_NAME=mariadb

#docker數(shù)據(jù)庫用戶名

DOCKER_DB_USER=dbuser

#docker數(shù)據(jù)庫密碼

DOCKER_DB_PWD=dbpassword

#docker數(shù)據(jù)庫名

DOCKER_DATABASE=dbback

echo "=======開始備份========"

echo "=======備份的路徑是 $BACKUP/$DATETIME.tar.gz"

#進(jìn)入 docker mariadb鏡像

docker exec -i mariadb bash <<-DOF

????????#如果備份的路徑文件夾存在,就使用,否則就創(chuàng)建

? ? ? ? [ ! -d "$DOCKER_BACKUP/$DATETIME" ] && mkdir -p "$DOCKER_BACKUP/$DATETIME"

????????#執(zhí)行mysql的備份數(shù)據(jù)庫的指令

? ? ? ? mysqldump -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD}? $DOCKER_DATABASE | gzip > $DOCKER_BACKUP/$DATETIME/$DATETIME.sql.gz

????????#打包備份文件

? ? ? ? cd $DOCKER_BACKUP

????????tar -zcvf $DATETIME.tar.gz $DATETIME

????????#刪除臨時目錄

? ? ? ? rm -rf $DOCKER_BACKUP/$DATETIME

????????#刪除10天前的備份文件

? ? ? ? find $DOCKER_BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;

????????#進(jìn)入數(shù)據(jù)庫

? ? ? ? mysql -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD} <<-MOF

????????????????#指定數(shù)據(jù)庫

? ? ? ? ? ? ? ? use ${DOCKER_DATABASE};

????????????????#開啟事務(wù)

? ? ? ? ? ? ? ? BEGIN;

????????????????????#清理 history_record表30天前的數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? DELETE FROM history_record? WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH));

????????????????????#釋放表空間(會鎖定表)

? ? ? ? ? ? ? ? ? ? OPTIMIZE TABLE history_record;

????????????????#提交事務(wù)

? ? ? ? ? ? ? ? COMMIT;

exit

MOF

exit

DOF

echo "=======備份文件成功========"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容