• 为Linux系统添加定时备份Mysql(Docker)指定数据库的方法


    引言
    使用Mysql的时候遇到需要定时备份数据库的问题,但苦于Mysql自身没有提供直接的工具。

    准备工作

    1. 一台Linux(Centos7为例)服务器。
    2. 安装Docker服务。
    3. 安装并启动Mysql容器服务。

    安装7z压缩工具(可选)

    安装7z的目的主要是用于对数据库备份后的文件的压缩和加密。如果不需要也可以跳过此步骤。

     yum -y install epel-release
     yum -y install p7zip p7zip-plugins
    

    安装完成后使用以下命令测试时候安装成功

     7za -h
    

    编写Shell文件

    给出一个备份的范例

    #!/bin/bash
    # 数据库参数
    backupDatabase=<数据库名称>
    password=<数据库密码>
    # 存放备份的目录,可以是任意位置,先创建并赋权
    baseDir=/data/databack/
    # 最终文件名,使用类似 mysql_database_20201231.sql
    fileName=mysql_${backupDatabase}_`date +%Y%m%d%H%M%S`
    # 备份数据库 其中mysql代表容器名称,如果没有名称可以用其他方法代替
    docker exec mysql mysqldump -uroot -p${password} ${backupDatabase} > ${baseDir}${fileName}.sql
    

    加密并压缩数据库文件并删除超过90天的备份文件(可选)

    如果需要对数据库加密并删除指定天数前的备份,可以在Shell文件中追加以下命令。

    # 必须先正确安装7z才能使用7za命令压缩文件
    # 加密压缩 使用7zip 密码123456
    7za a ${baseDir}${fileName}.7z ${baseDir}${fileName}.sql -p123456
    # 删除刚刚备份的sql文件,留下压缩的
    rm -f ${baseDir}${fileName}.sql;
    # 删除大于90天的备份数据
    find ${baseDir} -mtime +90 -name "mysql_${backupDatabase}_*.7z" -exec rm -rf {} \;
    

    在Linux添加定时任务

    添加定时任务需要使用到Linux的crontab服务。我们可以通过下列命令来检测并安装这个服务。

    # 检查crontab工具是否安装
    crontab -l
    # 检查crond服务是否启动
    service crond status
    
    # 如果未安装服务我们需要进行安装
    yum install vixie-cron
    yum install crontabs
    

    再确认安装完成后我们使用命令 crontab -e 打开crontab的编辑功能,添加如下示例:

    # 定时任务 每日0点备份
    # 注意别忘记 sh 命令
    0 0 * * * sh /root/databack/dockerMysqlBackup.sh
    

    添加完成后可以使用命令(systemctl restart crond),重启下crond服务确保服务能正常运行。

    crontab格式介绍

    参考生成工具 https://tool.lu/crontab/
    格式: * * * * * comand(*以空格或tab隔开)

    • 第一个* : 分钟(0--59)
    • 第二个* : 小时(0--23)
    • 第三个* : 日期(0--31)
    • 第四个* : 月份(1--12)
    • 第五个* : 星期0--7(0或者7表示星期天)
    • comand : 要执行的操作

    举例:

    1. 每晚21:30重启apache: 30 21 * * * service httpd restart
    2. 每月1、10、22日的4:45重启apache : 45 4 1,10,22 * * service httpd restart
    3. 每月1到10日的4:45重启apache : 45 4 1-10 * * service httpd restart
    4. 每隔两分钟重启apache : */2 * * * * service httpd restart 或者 1-59/2 * * * * service httpd restart
    5. 每晚11点到早上7点间,每隔1小时重启apache : 0 23-7/1 * * * service httpd restart
    6. 每晚18:00至23:00,每隔30分钟重启apache : 0,30 18-23 * * * service httpd restart 或 0-59/30 18-23 * * * service httpd restart
  • 相关阅读:
    Educational Codeforces Round 30 B【前缀和+思维/经典原题】
    Educational Codeforces Round 30 A[水题/数组排序]
    洛谷 P2415 集合求和【数学公式/模拟】
    洛谷 P2689 东南西北【模拟/搜索】
    洛谷 P1012 拼数 [字符串]
    codeforces 869C The Intriguing Obsession【组合数学+dp+第二类斯特林公式】
    洛谷 P3927 SAC E#1
    洛谷P3929 SAC E#1
    洛谷P3926 SAC E#1
    codeforces 868B The Eternal Immortality【暴力+trick】
  • 原文地址:https://www.cnblogs.com/ykbb/p/15923706.html
Copyright © 2020-2023  润新知