2025年6月6日 星期五 乙巳(蛇)年 三月初十 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

针对Linux环境对Mysql数据库进行自动备份

时间:04-16来源:作者:点击数:12

本文主要针对于一些技术小白的经验分享,由于本人也不是什么技术大佬,所以也是讲实际工作中,觉得比较好且实用的一些技巧分享出来,大佬可以直接略过,当然也欢迎大佬对不足之处进行指点以及完善。感谢!

对于需要修改的参数我会用绿色字体进行标准说明。

首先脚本的内容为Start开始(不包括Start),End结束(不包括End)

需要在服务器上编辑一个.sh后缀的脚本文件,并且赋予可执行权限。这里举例赋予权限的命令

chmod +x  mysql_backup.sh    #mysql_backup.sh   为备份的脚本文件

将Start-End的内容填充到上述的mysql_backup.sh文件中

Start

#!/bin/sh

# 数据库账号信息

DB_USER="root"

DB_PWD="your_mysql_passwd"

DB_HOST="127.0.0.1"

DB_PORT="3306"

# MYSQL所在目录

MYSQL_DIR="/home/docker/overlay2/151b22c1a8980d2f889e86a1e07acdd506525a99b484393435c3040af97da3e5/diff/usr/bin/mysql"

# 备份文件存放目录

BAK_DIR="/home/backup/mysql_bak"

# 时间格式化,如 20250401

DATE=`date +%Y%m%d`

# 备份脚本保存的天数

DEL_DAY=7

# 要备份的数据库,空格分隔

DATABASES=("your_backup_database")

# 创建日期目录

mkdir $BAK_DIR/$DATE

echo "-------------------$(date +%F_%T) start ---------------" >>${BAK_DIR}/db_backup.log

for database in "${DATABASES[@]}"

do

  # 备份指定数据库中数据 //注意这里是-i,如果是-it,用定时器文件就会为空

  docker exec -i mysql mysqldump --skip-lock-tables --opt -u$DB_USER -p$DB_PWD -h$DB_HOST -P$DB_PORT ${database} > $BAK_DIR/$DATE/${database}.sql

done

echo "--- backup file created: $BAK_DIR/db_backup_$DATE.tar.gz" >>${BAK_DIR}/db_backup.log

# 将备份好的sql脚本压缩到db_backup_yyyyMMdd.tar.gz

tar -czf $BAK_DIR/db_backup_$DATE.tar.gz $BAK_DIR/$DATE

# 压缩后,删除压缩前的备份文件和目录

rm -f $BAK_DIR/$DATE/*

rmdir $BAK_DIR/$DATE

# 遍历备份目录下的压缩文件

LIST=$(ls ${BAK_DIR}/db_backup_*)

# 获取截止时间,早于该时间的文件将删除

SECONDS=$(date -d "$(date +%F) -${DEL_DAY} days" +%s)

for index in ${LIST}

do

  # 对文件名进行格式化,取命名末尾的时间,格式如 20250401

  timeString=$(echo ${index} | egrep -o "?[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]")

  if [ -n "$timeString" ]

  then

    indexDate=${timeString//./-}

    indexSecond=$( date -d ${indexDate} +%s )

    # 与当天的时间做对比,把早于7天的备份文件删除

    if [ $(( $SECONDS- $indexSecond )) -gt 0 ]

    then

      rm -f $index

      echo "---- deleted old backup file : $index " >>${BAK_DIR}/db_backup.log

    fi

  fi

done

echo "-------------------$(date +%F_%T) end ---------------" >>${BAK_DIR}/db_backup.log

End

参数解释说明:

第一处参数DB_USER,即数据库的用户,且此用户需要有对数据库操作的权限,例如增删改的权限,推荐为管理员用户root

第二处参数DB_PWD,即改用户的登录密码

第三处参数DB_HOST,备份数据库所在的服务器IP

第四处参数DB_PORT,数据库的服务端口号,默认的为3306,根据你的数据库服务端口号来

第五处参数MYSQL_DIR,mysql所在的目录路径,且为绝对路径,离线安装的MySQL,即为可执行文件mysql所在的绝对路径,若是docker部署的MySQL,参考diff/usr/bin/mysql后缀,可以利用"find / -name mysql"的查询命令,找到后缀为此处描述的后缀,复制完全的绝对路径目录粘贴即可

第六处参数BAK_DIR,备份文件存放的目录,这里可以自行定义,但是要确保填充的目录实际存在

第七处参数DATABASES,你所要备份的数据库名称,例如备份名为mysql_prod的数据库,将数据库名称填入其中即可

补充:这里的数据库备份文件保存的时间期限为7天,可以对DEL_DAY参数进行修改以自定义文件保存的时间

至此,对MySQL数据库进行备份的目标已经完成,以下对于自动备份进行讲解

这里需要结合到Linux服务器自带的一个定时任务执行功能crontab,利用”crontab -e“ 命令对定时任务进行编辑

以下是每天凌晨0点进行备份的方案示例

0 0 * * * /home/backup/mysql_bak.sh

0 0 * * * 每个参数分别对应 分 时 日 月 周,根据您的需要自行修改。

综上所述,在Linux环境下MySQL数据库的自动备份的功能已实现。

欢迎大家对其中不足之处进行指出,一起交流将方法完善。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐