• 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

  • 相关阅读:
    DirectX11 With Windows SDK--38 级联阴影贴图(CSM)
    最新Ai系统ChatGPT程序源码+以图生图+Dall-E2绘画+支持GPT4+Midjourney绘画
    初识Tomcat
    java计算机毕业设计线上导医系统源码+数据库+系统+lw文档+mybatis+运行部署
    深入理解数据库事务:确保数据完整性与一致性
    与AI结对编程式是什么体验 Copilot vs AlphaCode, Codex, GPT-3
    前端表单滑块验证码开发
    iOS16.1开发者预览版Beta3发布:优化壁纸功能
    Bean拷贝工具类推荐
    Cesium教程(七):加载自定义影像数据
  • 原文地址:https://blog.csdn.net/qq_37992410/article/details/134182836