前置条件:已安装docker,mariadb
命令
使用方法:将下面命令中的 $… 按照以下说明替换
$username:用户名
$password:密码
$databsename:数据库名称
$path:备份文件路径(包含文件名)
(例如: /home/test-backup/backup/20231122/CasualInspectionModule.sql)
1 备份单个数据库
docker exec -i 014 mysqldump -u$username -p$password --databases $databsename > $path
2 备份全部数据库至一个文件
docker exec -i 014 mysqldump -u$username -p$password --all-databases> $path
区别在于 --databases $databsename 替换为 --all-databases
3 还原备份
单个数据库:
docker exec -i 014 mariadb -u$username -p$password $databsename < $path
整体还原:
docker exec -i 014 mariadb -u$username -p$password < $path
4 定时备份
mariadb_backup.sh
#!bin/bash
# 最多备份数量
MAX_COUNT=31
# 数据库docker容器id
DOCKER_ID=$1
# 定义备份文件名
BACKUP_NAME="mariadb_backup_$(date +%Y%m%d_%H%M%S).sql"
# 定义备份路径
BACKUP_DIR="/home/backup"
# sql文件存储路径
BACKUP_SAVE="$BACKUP_DIR/timing"
if [ -z $DOCKER_ID ]; then
echo '缺少 docker id'
echo '缺少 docker id' >> $BACKUP_DIR/log.txt
else
# 没有文件夹就创建
if [ ! -d $BACKUP_SAVE ]; then
mkdir -p $BACKUP_SAVE
fi
# 定义Mariadb登录信息
DB_USER="root"
DB_PASS="123456"
# 控制台输出信息
echo "[info][$(date +'%Y-%m-%d %H:%M:%S')] 开始备份,请稍等..."
# 写日志
echo "[info][$(date +'%Y-%m-%d %H:%M:%S')] docker exec -i $DOCKER_ID mysqldump -u$DB_USER -p$DB_PASS --all-databases > $BACKUP_SAVE/$BACKUP_NAME" >> $BACKUP_DIR/log.txt
# 备份Mariadb数据库
docker exec -i "$DOCKER_ID" mysqldump -u$DB_USER -p$DB_PASS --all-databases > $BACKUP_SAVE/$BACKUP_NAME
# 找出需要删除的备份
DEL_FILE=`ls -l -crt $BACKUP_SAVE/*.sql | awk '{print $9 }' | head -1`
# 判断现在的备份数量是否大于MAX_COUNT
SQL_COUNT=`ls -l -crt $BACKUP_SAVE/*.sql | awk '{print $9 }' | wc -l`
if [ $SQL_COUNT -gt $MAX_COUNT ]; then
# 控制台输出信息
echo "[info][$(date +'%Y-%m-%d %H:%M:%S')] 当前备份数量已大于$MAX_COUNT,正在删除[$DEL_FILE]"
# 删除最早生成的备份
rm $DEL_FILE
echo "[info][$(date +'%Y-%m-%d %H:%M:%S')] rm $DEL_FILE" >> $BACKUP_DIR/log.txt
fi
fi
5 定时任务
查看
crontab -l
编辑
crontab -e
编辑文档
每周一凌晨0:05进行备份(014是mariadb数据库的docker容器id前三位)
0 0 * * 1 sudo sh /home/backup/mariadb_backup.sh 014
编辑完成后wq保存退出即可