• 11.Linux系统:定时任务备份mysql数据库为文件并传输到其他服务器


    1. 创建脚本

    mysql_dumps.sh内容如下:

    #!/bin/bash
    # 查找名称为“mysql_mysql”的容器id
    CONTAINER_ID=`docker ps  -a | grep "mysql_mysql" | awk '{print $1}' | head -n 1`
    MYSQL_USERNAME="root"
    MYSQL_PASSWORD="root"
    FILENAME_SUFFIX=`date +%Y%m%d`.sql
    #备份目录
    data_dir="/usr/local/soft/mysql/deploy/backups/sql/"
    #查询所有数据库包含prod的数据库
    databases=`docker exec -i $CONTAINER_ID  mysql --user=$MYSQL_USERNAME -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)" | grep "prod"`
    #回显所有查询出来数据库
    echo "生产数据库有:$databases;"
    #循环备份数据库输出为.sql文件放到指定目录下
    for db in $databases; do
    echo "备份$db数据库"
    docker exec -i $CONTAINER_ID mysqldump -u$MYSQL_USERNAME -p$MYSQL_PASSWORD --quick -C  --default-character-set=utf8  $db > "$data_dir/$db`date +%Y%m%d`.sql"
    
    #将当天备份的所有文件传输到98服务器
    echo ---------------------scp to 98server start --------------------
    expect -c "
        spawn scp $data_dir/$db`date +%Y%m%d`.sql  root@192.168.12.98:/usr/local/backups/99mysqlbackups/
        expect {
            \"*assword\" {set timeout 300; send \"root@server2\r\"; exp_continue;}
            \"yes/no\" {send \"yes\r\";}
        }
    expect eof"
    echo ---------------------scp to 98server end --------------------
    
    done
    
    if [ $? -ne 0 ];then
    
    # 任务失败,发送邮件
    
    echo -e "执行数据库任务失败" | mail -s '执行数据库任务失败' 234564290@qq.com
    
    exit -1
    
    fi
    
    #删除所有日期超过15天的备份文件
    find $data_dir -mtime +15 -name '*.sql' -exec rm -rf {} \;
    
    
    • 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

    解释说明:

    • (1) date +%Y%m%d 当天的年月日
    • (2) 执行流程:查找名称为“mysql_mysql“的容器id;查询此容器内所有名称包含prod的数据库;循环遍历这些数据库,将数据导出为.sql文件放到指定目录下;将当天备份的.sql文件传输到98服务器;删除所有日期超过15天的备份文件;

    2. crontab创建定时任务

    2.1 进入编辑定时任务模式

    crontab -e

    2.2 输入定时任务命令

    #每日凌晨1点执行rm_json_log_file.sh文件
    0 1 * * * sh /usr/local/soft/rm_json_log_file.sh 
    #每日凌晨2点执行mysql_dumps.sh文件,进行备份数据库
    0 2 * * * sh /usr/local/deploy_epower/mysql_redis/mysql/backups/sh/mysql_dumps.sh
    
    • 1
    • 2
    • 3
    • 4

    2.3 退出编辑模式

    ESC #按ESC键退出编辑模式
    :wq #键入:wq保存

    2.4 重启crontab服务

    service crontab restart

    2.5 查看定时任务列表

    crontab -l

  • 相关阅读:
    正则表达式 包含一些 但不包括 的命令
    Vue的数据控制-----计算属性(computed)&&侦听器(watch)
    《深入解析阿里电商:数据中台与业务的双中台系统架构》
    Vue前端项目安装及相关问题解决
    智能时代的智能工具(gpt)国产化助手
    认识一些网络的基础知识
    渗透测试-xml注入以及xxe漏洞
    Groovy反序列化链分析
    Flutter 3.3 现已发布
    信号发生器不会用?一篇文章教会你
  • 原文地址:https://blog.csdn.net/qq_37992410/article/details/134182836