zoukankan      html  css  js  c++  java
  • 定时备份 MySQL 并上传到七牛

    多数应用场景下,我们需要对重要数据进行备份、并放置到一个安全的地方,以备不时之需。

    常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份)、mysqldump 全量逻辑备份、xtrabackup 增量逻辑备份等。

    常见的数据存储方式有,本机存储、FTP 上传到远程服务器、云存储(如阿里云OSS、七牛云存储等)、甚至本地也行。

    我们可能不想每次都手动去备份,也不想每次都那么耗时间的去下载,也不想就放在服务器上丢了,因为我们需要异地备份。那我们可以尝试,写个脚本定时备份数据库,然后自动上传到指定服务器或云存储。

    这里,我们说说 Linux 服务器下备份 MySQL 并上传到七牛云存储的方式。

    准备工作

    • Linux 系统

    • crontab 服务

      需保证 crond 服务处于启动&自启动状态。

    • gzip 命令

      需系统能正常执行 gzip 命令,用于压缩文件。

    • mysqldump 命令

      需系统能正常执行 mysqldump 命令,用于逻辑备份数据。mysqldump 备份的数据,系由可执行的 SQL 组成,不存在版本不兼容的问题。

    • qshell 工具

      qshell 是七牛云官方利用七牛文档上公开的 API 实现的一个方便开发者测试和使用七牛 API 服务的命令行工具。

      具体文档和下载地址: https://developer.qiniu.com/kodo/tools/1302/qshell

    • 七牛云账号

      存储数据的前提当然是先有一个七牛的账号,七牛对个人提供10G的免费存储空间,可供我们个人使用。注册地址:
      https://portal.qiniu.com/signup?code=3looatwobaxci

    • 七牛存储空间

      有了七牛云的账号后,还需在控制台手动创建一个空间(bucket)来存放数据。

    qshell 配置

    我们从官方地址中下载的 qshell 是个包含支持多个系统平台的压缩包,选择我们对应系统的那个二进制文件,赋予其可执行权限。也可以放置到 /usr/local/bin/ 等目录下,方便直接调用 qshell 命令。

    配置七牛账号,aksk 在七牛云控制台 > 个人中心 > 密钥管理内。

    qshell account ak sk
    

    该命令会将 ak/sk 账号写入 ~/.qshell/account.json,此后就不用再配置了。

    我们这里用的 qshell 命令是 rput,即以分片上传的方式上传一个文件,使用文档: https://github.com/qiniu/qshell/blob/master/docs/rput.md

    qshell rput <Bucket> <Key> <LocalFile> true
    

    qshell 的其他详细功能使用,可自行参考其文档

    脚本内容

    #!/bin/sh
    # mysql data backup script
    #
    # use mysqldump --help,get more detail.
    
    dbname=your_dbname
    user=your_db_username
    password=your_db_password
    bakDir=/opt/backup/sql
    logFile=/opt/backup/mysqlbak.log
    datetime=`date +%Y%m%d%H%M%S`
    keepDay=7
    
    echo "-------------------------------------------" >> $logFile
    echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile
    echo "--------------------------" >> $logFile
    cd $bakDir
    bakFile=$dbname.$datetime.sql.gz
    mysqldump -u$user -p$password $dbname | gzip > $bakFile
    echo "数据库 [$dbname] 备份完成" >> $logFile
    echo "$bakDir/$bakFile" >> $logFile
    echo "开始上传备份文件至七牛云存储" >> $logFile
    /usr/local/bin/qshell rput <Bucket> database/$bakFile $bakFile true | sed -r "s/x1B[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>&1
    echo "删除${keepDay}天前的备份文件" >> $logFile
    find $bakDir -ctime +$keepDay >> $logFile
    find $bakDir -ctime +$keepDay -exec rm -rf {} ;
    echo " " >> $logFile
    echo " " >> $logFile
    

    脚本中的数据库配置、日志文件、存放路径、<Bucket>等需自行修改,并存在。database/$bakFile,表示的是 <Key>,即在七牛存储中的路径&文件名,可自定义。

    脚本文件需可执行权限,然后可以执行脚本进行测试。

    定时任务

    # 每天凌晨2点执行备份脚本
    0 2 * * * /opt/backup/baksql.sh
    

    如果定时任务未执行,可查看日志 /var/log/cron 排查问题,或者查看 crond 是否处于运行状态。


    原文地址: https://shockerli.net/post/mysqldump-put-qiniu/

  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/shockerli/p/mysqldump-put-qiniu.html
Copyright © 2011-2022 走看看