14
2024
08
09:27:47

定时备份数据库并上传七牛云存储

前言

数据库异地备份,想必大家都知道,如果有时候服务器上不去了,那么你在服务器本机中备份再多的数据库也是白搭;

或者服务器被黑客给勒索了,那么他会加密你所有的sql以及其他类型的文件,所以备份还是没有用几个;

所以,我们还是得异地备份,双保险打开,遇到突发情况,也不会那么被动。

脚本文件

那么,如何实现将linux服务器中的数据库备份,并且上传到别的地方呢,我这边以上传到七牛云为例,其他的也都差不多。

下面是我们整个最全的脚本,

#!/bin/bash# 数据库备份脚本# ******配置部分*****# 数据库用户名DB_USER=""            # 数据库密码,请替换为您的密码 DB_PASSWORD="" # 备份文件存放目录BACKUP_DIR="/home/project/dbBackUp/sql" # gzip压缩等级COMPRESSION_LEVEL=9   
# 保留备份的天数     KEEP_DAYS=7         
# 获取当前时间戳       DATE=$(date +"%Y%m%d%H%M%S") 
# 日志文件路径LOG_FILE="$BACKUP_DIR/backup.log" #当前时间datetime1=$(date +"%Y%m%d")# qshell的安装路径,根据实际情况调整 ,安装命令如下# $ wget https://github.com/qiniu/qshell/releases/download/v2.12.0/qshell-v2.12.0-linux-386.tar.gz# $ tar -xvf qshell-v2.12.0-linux-386.tar.gz# $ mv qshell /usr/bin/# $ chmod +x /usr/bin/qshellQSHELL_DIR="/usr/bin"# 替换为您的AccessKeyACCESS_KEY=""   # 替换为您的SecretKey SECRET_KEY=""# 替换为您的存储桶名称    BUCKET_NAME="mxx"# 存储桶所在的区域,例如: z0, z1, z2, asiaz0等  BUCKET_ZONE="cn-east-2"  # 创建备份目录如果它不存在mkdir -p "$BACKUP_DIR"# 指定要备份的数据库列表DATABASES="blog_new wechatbot wewe-rss" # 请替换为您的数据库名称,多个数据库之间用空格分隔# 开始备份for DB in $DATABASES; do
    # 备份单个数据库
    mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --databases "$DB" --single-transaction --quick --lock-tables=false --routines --triggers > "$BACKUP_DIR/${DB}_$DATE.sql"
    # 压缩备份文件
    gzip -$COMPRESSION_LEVEL "$BACKUP_DIR/${DB}_$DATE.sql"
    # 记录备份日志
    echo "备份 $DB 数据库 $DATE" >> "$LOG_FILE"
	#文件路径
	FILE_PATH="$BACKUP_DIR/${DB}_$DATE.sql.gz"
	# 文件名称
	FILE_NAME="${DB}_$DATE.sql.gz"
    echo "开始上传文件:$FILE_PATH下的$FILE_NAME文件 到七牛云存储桶: $BUCKET_NAME"
    
    # 使用qshell进行认证
    "$QSHELL_DIR/qshell" account "$ACCESS_KEY" "$SECRET_KEY" muxiongxiong > /dev/null    
    # 上传文件到七牛云,参数分别是(桶的名称、备份的文件名、文件全路径)
    "$QSHELL_DIR/qshell" rput "$BUCKET_NAME" "dbBackUpYeCaoYun/$datetime1/$FILE_NAME" "$FILE_PATH" >> "$LOG_FILE" 2>&1    
    if [ $? -eq 0 ]; then
        echo "$FILE_PATH 上传成功" >> "$LOG_FILE"
		echo "上传成功"
    else
        echo "$FILE_PATH 上传失败" >> "$LOG_FILE"
		echo "上传失败"
    fidoneecho "删除$keepDay天前的备份文件" >> "$logFile"# 删除旧备份,保留最近$KEEP_DAYS天的备份find "$BACKUP_DIR" -name "*.gz" -type f -mtime +$KEEP_DAYS -exec rm {} \;# 脚本执行结束echo "备份完成" >> "$LOG_FILE"echo "备份完成"sh

shell脚本文件说明

针对上面的shell脚本文件,我有必要将关键部分说明一下:

  1. DB_USER:你的本机数据库的用户名,得要有权限,一般为root

  2. DB_PASSWORD:数据库的密码

  3. BACKUP_DIR:数据库文件的备份目录,随便找个目录就可以

  4. ACCESS_KEY:你七牛云的ak

  5. SECRET_KEY:你七牛云的sk

  6. BUCKET_NAME:你存储空间名称

  7. BUCKET_ZONE:存储桶所在的区域,例如: z0, z1, z2, asiaz0等

剩下的默认即可,然后我们就可以直接把脚本放在服务器上,设置个定时执行即可。

定时执行也很简单,请看下面的命令:

crontab -esh

如果是第一次执行,系统会让你选择一个编辑器,大家自行选择就行。

image.png

然后进入添加定时任务就行:

例如,如果你想每天的上午 9 点执行 /path/to/script.sh,则可以添加以下内容到 crontab 文件中:

0 9 * * * /path/to/script.shsh

##green## ? 至此,就over啦!




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/7570.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: