centos8 Mysql数据库自动备份脚本

mysql · xingqi · 于 3年前 发布 · 2466 次阅读

概述

每天定时本地备份mysql数据库,并且保存最新30天的备份内容。 本脚本采用全量逻辑备份,因此备份的数据,需要定期删除用于减少服务器空间占用

根据存储路径创建文件夹

  • 数据库每日备份脚本路径 /root/mysql_bak/bin
  • 数据库自动备份数据文件位置 /root/mysql_bak/mysql_full
  • 数据库自动备份执行日志文件位置 /root/mysql_bak/log
mkdir -p /root/mysql_bak/bin
mkdir -p /root/mysql_bak/mysql_full
mkdir -p /root/mysql_bak/log

创建脚本文件

vim /root/mysql_bak/bin/mysql_bakcup.sh

#!/bin/bash
#环境变量防止脚本因为环境变量问题不执行
source /etc/profile
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#远程地址
dbhost='localhost'
#端口
dbport='3306'
#需要备份的数据库,多个数据库用空格分开
dbname='test'
#用户名
username='test'
#密码
password='test2021'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/root/mysql_bak/log'
#数据备份路径
datapath='/root/mysql_bak/mysql_full'
#日志记录头部
echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}开始" >> ${logpath}/mysqllog.log
#正式备份数据库
for table in $dbname; do
    source=`/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${dbname}_${backtime}.sql` 2>> ${logpath}/mysqllog.log;
    #备份成功以下操作
    if [ "$?" == 0 ];then
        cd $datapath
        #删除30天前备份,也就是只保存30天内的备份
        find $datapath -name "*.sql" -type f -mtime +30 -exec rm -rf {} \;
        echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}成功" >> ${logpath}/mysql_bak_succ_log.log
    else
        #备份失败则进行以下操作
        echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}失败" >> ${logpath}/mysql_bak_fail_log.log
    fi
done

使用 :wq 保存脚本

使用 ./root/mysql_bak/bin/mysql_bakcup.sh 手动执行一次脚本 查看是否按照预期生成文件

定时任务 crontab

添加脚本到定时任务crontab 执行 crontab -e

新增定时任务 每天凌晨一点执行备份

00 01 * * * bash /root/mysql_bak/bin/mysql_bakcup.sh

本文由 xingqi 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 4 条回复
qingqing#12年前 0 个赞

source=/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${dbname}_${backtime}.sql 2>> ${logpath}/mysqllog.log;在多数据库备份时候有问题,需要修改成这样:source=/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${table}_${backtime}.sql 2>> ${logpath}/mysqllog.log;

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册