定时备份数据库实现方案
需求
定时对数据库进行备份
实现
定时功能可以用linux自带的定时器,备份需要通过shell脚本实现
主要流程
执行mysqldump将数据库内的表和数据生成到一个文件中
将文件通过scp命令发送到目标服务器
远程命令执行目标服务器清理备份数据库文件的脚本,仅仅保留最近7次的备份,防止备份文件堆积浪费硬盘空间
执行本地的清理备份文件的脚本
脚本
1)清理数据库备份文件的脚本clearBackupFile.sh
#!/bin/bash
APP_HOME=$(readlink -f "$(dirname "$0")")
PREFIX=groupmanage
cd ${APP_HOME}
ls -t | grep ${PREFIX} | sed -n '8,$p' | xargs -I {} rm -rf {}
2)备份数据库的脚本
#!/bin/bash
APP_HOME=$(readlink -f "$(dirname "$0")")
DATE=`date +%Y%m%d%H%M%S`
#docker容器名
CONTAINER_NAME=mysql_group
#用户名
USERNAME=root
#密码
PASSWORD=Aa12345678
#数据库名
DATABASE=groupmanage
#保存的sql文件前缀名
SQLFILENAMEPREFIX=groupmanage
#保存的sql文件
SQLFILENAME=${SQLFILENAMEPREFIX}${DATE}.sql
docker exec ${CONTAINER_NAME} mysqldump -u${USERNAME} -p${PASSWORD} --databases ${DATABASE} > ${APP_HOME}/${SQLFILENAME}
################ 发送到服务器 ################
#服务器ip
SERVER_IP=10.0.1.171
#服务器用户名
SERVER_USERNAME=4abackup
#服务器密码
SERVER_PASSWORD=4a@backup@1234
#服务器路径
SERVER_DIR=/home/4abackup/redmine-group-tools
sshpass -p ${SERVER_PASSWORD} scp ${APP_HOME}/${SQLFILENAME} ${SERVER_USERNAME}@${SERVER_IP}:${SERVER_DIR}
################ 清理 ################
#本地清理路径
LOCAL_CLEAR_DIR=/root/databasebackup
sshpass -p "4a@backup@1234" ssh ${SERVER_USERNAME}@${SERVER_IP} ./redmine-group-tools/clearBackupFile.sh
${LOCAL_CLEAR_DIR}/clearBackupFile.sh
定时任务
1)安装定时器(一般不用安装,系统自带)
yum install contabs
2)启动定时器
systemctl start crond
3)配置定时任务
crontab -e
4)查看定时任务
crontab -l
4)查看日志
tail -f /var/log/cron还没有评论,来说两句吧
