定时备份数据库并上传到OSS

定时备份数据库并上传到OSS

场景:开发/测试数据为自己安装,未使用RDS,且开发/测试环境安装操作频繁,为防止数据库出现问题,影响开发/测试进度,现需要将开发/测试数据库定时备份到oss上。

  • 下载oss工具ossutil

    # 下载ossutil
    wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64
    # 授权
    chmod 755 /usr/local/src/ossutil64/ossutil64
    # 软链接到bin目录下直接执行
    ln -s /usr/local/src/ossutil64/ossutil64 /usr/local/bin/ossutil64
    
  • 创建备份数据库及上传至oss脚本

    创建脚本文件:

    touch mysql_backup_test.sh
    

    vim 写入脚本内容:

    #!/bin/sh
    # mysql程序根目录
    base_mysql_path=/usr/share/mysql-8.0
    # 数据包临时目录
    mysql_dump_path=/temp/backup
    # 数据库配置
    mysql_user="root"  #真实数据库用户名
    mysql_pass="123456" #真实数据库密码
    # oss 配置 如果服务器跟oss是内网,记得使用内网地址
    oss_endpoint="***" #真实oss endpoint
    oss_bucket="***" #真实osss桶名
    oss_accesskeyid="***" #真实oss keyId
    oss_accesskeysecret="***" #真实oss keysecret
    # 需要备份的数据库名
    database="tour_console"
    random=`cat /proc/sys/kernel/random/uuid  | md5sum |cut -c 1-9`
    backup_name=${database}"_"`date +%Y%m%d`"_"${random}
    echo "备份到 "${backup_name}
    # 删除10天前的备份文件,修改10
    del_name=${database}"_"`date -d"10 day ago" +%Y%m%d`
    # 需要忽略的表
    excluded_tables=(test01)
    ignore_tables_string=""
    for table in "${excluded_tables[@]}"
    do :
       ignore_tables_string+=" --ignore-table=${database}.${table}"
    done
    echo "开始备份 "`date +%Y-%m-%d\ %H:%M:%S`
    cd ${mysql_dump_path}
    # mysqldump database -uroot -proot --tables table1 table2 > backup.sql
    mysqldump -u${mysql_user} -p${mysql_pass} ${database} ${ignore_tables_string} > ${backup_name}.sql
    # 压缩包
    tar zcf ${backup_name}.tar.gz ${backup_name}.sql
    rm -f ${backup_name}.sql
    # 上传到 oss
    echo "上传到oss中 "`date +%Y-%m-%d\ %H:%M:%S`
    /usr/local/bin/ossutil64 cp ${backup_name}.tar.gz oss://${oss_bucket}/backup/${backup_name}.tar.gz -f -e ${oss_endpoint} -i ${oss_accesskeyid} -k ${oss_accesskeysecret}
    echo "删除 "${del_name}
    /usr/local/bin/ossutil64 rm oss://${oss_bucket}/mysql/backup/${del_name} -r -f -e ${oss_endpoint} -i ${oss_accesskeyid} -k ${oss_accesskeysecret}
    rm -f ${backup_name}.tar.gz
    echo "备份完成 "`date +%Y-%m-%d\ %H:%M:%S`
    
    

    给脚本可执行权限

    chmod 777 mysql_backup_test.sh
    

    此时,可执行脚本 测试数据库是否有备份到oss

  • 创建定时任务crontab 定时执行脚本

    执行 crontab -e 命令,编辑设置定时执行备份脚本:

    #每天凌晨3:20执行mysql_backup_test.sh脚本
    20 3 * * * /usr/local/src/ossutil64/mysql_backup_test.sh >> /usr/local/src/ossutil64/mysql_backup_test.log 2>&1
    

    执行 service crond restart 重启cron服务即可。

参考:https://beltxman.com/3251.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值