• 使用crontab定时脚本备份Mysql数据


    使用crontab定时脚本备份Mysql数据

    需求:

    希望在定时备份Linux中的数据库文件【以压缩包的形式】到我们的Linux本地文件夹中,当数据库发生问题,可以及时备份修复。
    我们可以使用Linux的定时任务进行处理

    首先我们需要在指定文件夹下建立一个脚本文件(xxx.sh)以及需要备份的目标文件夹

    这里假设在**/usr/lib/mysql目录下新建back.shback文件夹**

    这里分为两种不同的备份方式:

    方式1:直接在Linux宿主下安装Mysql,则back.sh为:

    #!/bin/bash
    echo '##########################################'
    echo '###### The database is automatically backed up at 01:00 am every day ######'
    echo '##########################################'
    # Setting environment variables
    DATE=$(date +%Y_%m_%d_%H_%M_%S)
    # $(date +%Y%m%d)
    # 数据库用户名
    USERNAME=root
    # 密码
    PASSWORD=123456
    # 要备份的数据库
    DB=database_name
    
    # Docker容器ID
    #DOCKERID=********
    
    # ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
    # Linux服务器上备份文件目录
    DIR=/usr/backMysql/mysql  
    echo 'Get system date: ' $DATE
    
    if [ ! -d "$DIR" ]; then
    mkdir $DIR
    fi
    cd $DIR
    
    echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
    
    # 使用docker进入mysql容器,执行mysqldump备份数据库文件
    # docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
    #docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > $DIR/$DB_$DATE.sql.gz
    
    # 备份 直接安装在 linux 系统中的数据库
    /usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
    # just backup the latest 7 days
    
    
    #保留最近文件数7,删除其它多余的文件
    ReservedNum=7
    date=$(date "+%Y%m%d-%H%M%S")
    
    FileNum=$(ls -l $DIR|grep ^- |wc -l)
    
    while(( $FileNum > $ReservedNum))
    do
        OldFile=$(ls -rt $DIR| head -1)
        echo  $date "Delete File:"$OldFile
        rm -rf $DIR/$OldFile
        let "FileNum--"
    done 
    
    echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    方式2:数据库安装在Docker容器中,需要配置Mysql在Docker容器中的id,通过Docker进入Mysql,然后执行对应的备份命令

    #!/bin/bash
    echo '##########################################'
    echo '###### The database is automatically backed up at 01:00 am every day ######'
    echo '##########################################'
    # Setting environment variables
    DATE=$(date +%Y_%m_%d_%H_%M_%S)
    # $(date +%Y%m%d)
    # 数据库用户名
    USERNAME=root
    # 密码
    PASSWORD=123456
    # 要备份的数据库
    DB=database_name
    
    # Docker容器ID
    DOCKERID=********
    
    # ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
    # Linux服务器上备份文件目录
    DIR=/usr/backMysql/mysql  
    echo 'Get system date: ' $DATE
    
    if [ ! -d "$DIR" ]; then
    mkdir $DIR
    fi
    cd $DIR
    
    echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
    
    # 使用docker进入mysql容器,执行mysqldump备份数据库文件
    # docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
    docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > $DIR/$DB_$DATE.sql.gz
    
    # 备份 直接安装在 linux 系统中的数据库
    #/usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
    # just backup the latest 7 days
    
    
    #保留最近文件数7,删除其它多余的文件
    ReservedNum=7
    date=$(date "+%Y%m%d-%H%M%S")
    
    FileNum=$(ls -l $DIR|grep ^- |wc -l)
    
    while(( $FileNum > $ReservedNum))
    do
        OldFile=$(ls -rt $DIR| head -1)
        echo  $date "Delete File:"$OldFile
        rm -rf $DIR/$OldFile
        let "FileNum--"
    done 
    
    echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    使用crontab进行定时任务的执行:

    sudo crontab -e
    # 添加执行命令每日凌晨2点备份一次
    00 02 * * /usr/backMysql/back.sh
    
    • 1
    • 2
    • 3

    编写保存退出提示信息表示配置成功:

    crontab: installing new crontab
    
    • 1

    此时可以通过crontab -l查看保存的定时任务,常用的crontab命令如下所示:

    # 查看crontab执行记录
    tail -f /var/log/cron
    # 用于编辑定时任务; 定时任务编辑后,不用重启定时任务,定时任务会自动重新加载。
    crontab -e 
    # 用来查看当前有什么定时任务
    crontab -l 
    # 查看crontab日志
    cat /var/log/cron.log
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    当定时任务执行后,会给我们发送一封邮件,成功或者失败皆有信息展示,查看邮件信息命令:

    sudo cat /var/spool/mail/root
    
    • 1

    一般如果我们是普通用户,使用上面的00 02 * * /usr/backMysql/back.sh会提示定时任务执行失败邮件信息:

    Permission denied
    
    • 1

    即说明我们的普通用户权限不足,此时我们需要修改我们的定时任务执行文件为:

    00 02 * * /bin/sh /usr/backMysql/back.sh
    
    • 1

    此时再进行定时任务的执行,将会成功执行!!!!

  • 相关阅读:
    大厂的 404 页面都长啥样?看到最后一个,我笑了~
    AI:11-基于深度学习的鱼类识别
    各个厂家的RTSP地址格式
    【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
    C++开发基础之文件操作
    ROS-TCP-Connector and ROS-TCP-Endpoint
    【毕业设计】基于stm32的智能婴儿车 婴儿床 系统 - 物联网 单片机
    openpnp - 接入西门子二手飞达
    光环效应——谁说头上有光的就算英雄
    Python开发工具PyCharm全新版本V2022.2即将发布
  • 原文地址:https://blog.csdn.net/SmallPig_Code/article/details/126433043