定时备份数据库#

新建一个backup.sh用于备份成sql文件

#! /bin/bash

BACKUP_DIR="<备份sql保存位置>"
LOG_FILE="<LOG文件位置>"
DATE=`date +%Y-%m-%d_%H-%M`
USER="数据库用户名"
PASSWORD="数据库密码"
DATABASE="数据库名"
SQL_FILE="mysql_$DATE.sql"
DOCKER_TAG="数据库docker name"

if [! -d $BACKUP_DIR];
then
mkdir -p "$BACKUP_DIR"
fi

echo -e "\n" >> $LOG_FILE
cd $BACKUP_DIR

docker exec -i $DOCKER_TAG mysqldump -u$USER -p$PASSWORD $DATABASE > $SQL_FILE
if [[ $? == 0 ]]; then
tar czvf $SQL_FILE.gz $SQL_FILE >> $LOG_FILE 2>&1
echo "$DATE----- $SQL_FILE.gz backup success!" >> $LOG_FILE
rm -f $SQL_FILE
else
echo "$DATE----- $SQL_FILE.gz backup fail!" >> $LOG_FILE
fi

定时删除超过规定时间的备份文件 新建一个clear_backup.sh

#! /bin/bash
BACKUP_DIR="<备份sql的文件目录位置>"
LOG_FILE="<LOG文件位置>"
DATE=`date +%Y-%m-%d_%H-%M`
KEEP_TIME=<删除超过多少天的文件>                                                       
# DEL_FILE=`find $BACKUP_DIR -type f -mmin +$KEEP_TIME -exec ls {} \;`
DEL_FILE=`find $BACKUP_DIR -type f -mtime +$KEEP_TIME -exec ls {} \;` 
for delfile in ${DEL_FILE}                                             
do
rm -f $delfile
done
echo "$DATE----- clear cache backup mysql file" >> $LOG_FILE

写完这两个文件就可以使用crontab创建定时任务 执行 crontab -e 进行添加任务计划(例如每天2点0分开始执行任务) 0 2 * * * /*.sh

导入sql文件到docker mysql容器#

docker cp <sql文件位置> <容器name>:/
docker exec my-mysql sh -c 'exec mysql -u<用户名> -p<密码> -D<数据库> < <sql文件>'