定时备份数据库实现方案

2022-10-09 18:28:50阅读 16评论 0

需求

定时对数据库进行备份

实现

定时功能可以用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

还没有评论,来说两句吧