使用qshell备份MySQL到七牛云保留7天数据

本文主要介绍一下Linux下如何对MySql数据库进行自动备份,并使用qshell将备份文件上传至七牛云存储上,并保留7天的备份数据。

qshell介绍

qshell 是利用 七牛文档上公开的 API 实现的一个方便开发者测试和使用七牛 API 服务的命令行工具。该工具设计和开发的主要目的就是帮助开发者快速解决问题。目前该工具融合了七牛存储、CDN、以及其他的一些七牛服务中经常使用到的方法对应的便捷命令。

一、下载qshell

wget https://github.com/qiniu/qshell/releases/download/v2.14.0/qshell-v2.14.0-linux-amd64.tar.gz
tar -xvf qshell-v2.14.0-linux-amd64.tar.gz
mv qshell /usr/bin/
chmod +x /usr/bin/qshell

此时执行 qshell ,如果输出了帮助信息,说明你安装和设置都已经完成。

二、编写shell脚本

#!/bin/bash

username="数据库账户"
password="数据库密码"
backup_dir="/data/backup/mysql"
log_file="/data/backup/mysqlbak.log"
keep_day=7
access_key="七牛AccessKey"
secret_key="七牛SecretKey"
qiniu_name="自定义账户名"
bucket_name="空间名"

# 清除并初始化日志文件
> "$log_file"
echo "-------------------------------------------" >> "$log_file"
echo "$(date) 开始备份数据库" >> "$log_file"
echo "--------------------------" >> "$log_file"

# 创建备份目录
mkdir -p "$backup_dir"

# 指定要备份的数据库列表
databases="mydb1 mydb2"

for db in $databases; do
    echo "开始备份数据库 [$db]" >> "$log_file"
    backup_path="$backup_dir/$db-$(date +%Y%m%d%H%M%S)"
    mkdir -p "$backup_path"

    tables=$(mysql -u "$username" -p"$password" "$db" -e "SHOW TABLES;" | grep -v "Tables_in_$db")
    for table in $tables; do
        backup_file="$backup_path/$table.sql"
        # linux的crond服务不会将mysqldump的脚本在mysql安装路径bin下执行的。故需要在脚本前面手动指定mysql的bin路径
        /usr/local/mysql/bin/mysqldump -u "$username" -p"$password" --skip-lock-tables --single-transaction --compatible=ansi "$db" "$table" > "$backup_file"
        if [ $? -ne 0 ]; then
            echo "备份表 [$db.$table] 失败" >> "$log_file"
            continue
        fi
    done

    # 压缩备份目录
    tar -czf "$backup_path.tar.gz" -C "$backup_path" .
    if [ $? -ne 0 ]; then
        echo "压缩备份目录失败" >> "$log_file"
        rm -rf "$backup_path"
        continue
    fi

    # 上传备份文件至七牛云存储
    qshell account "$access_key" "$secret_key" "$qiniu_name" > /dev/null
    qshell rput "$bucket_name" "database/$(basename "$backup_path.tar.gz")" "$backup_path.tar.gz" true >> "$log_file" 2>&1
    if [ $? -ne 0 ]; then
        echo "上传备份文件失败" >> "$log_file"
    else
        echo "上传完成" >> "$log_file"
    fi

    # 删除原始备份目录
    rm -rf "$backup_path"

    echo "数据库 [$db] 备份完成" >> "$log_file"
    echo "-------------------------------------------" >> "$log_file"
done

# 删除7天前的备份文件
find "$backup_dir" -type f -name '*.tar.gz' -mtime +$keep_day -exec rm -f {} \; >> "$log_file" 2>&1

echo "$(date) 所有数据库备份完成" >> "$log_file"

如果脚本是在windows下编写的脚本可能会报/bin/bash^M: bad interpreter: No such file or directory错误,这个错误通常发生在尝试在Unix-like系统上运行脚本文件时,该文件是在Windows环境下编辑的。Windows使用回车换行符(CRLF,即\r\n),而Unix使用换行符(LF,即\n)。在这种情况下,文件中的换行符被错误地转换成了回车符(Carriage Return,即\r),这就导致了脚本解释器路径的错误。执行dos2unix baksql.sh命令转换文件格式即可。

三、创建定时任务

输入命令crontab -e进入定时任务编辑器。

# 每天凌晨2点执行备份脚本
0 2 * * * /data/backup/baksql.sh
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值