当前位置: 首页 > news >正文

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 --------------------doneif [ $? -ne 0 ];then# 任务失败,发送邮件echo -e "执行数据库任务失败" | mail -s '执行数据库任务失败' 234564290@qq.comexit -1fi#删除所有日期超过15天的备份文件
find $data_dir -mtime +15 -name '*.sql' -exec rm -rf {} \;

解释说明:

  • (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

2.3 退出编辑模式

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

2.4 重启crontab服务

service crontab restart

2.5 查看定时任务列表

crontab -l

http://www.lryc.cn/news/216189.html

相关文章:

  • 基于Python的豆瓣电影排行榜,可视化系统
  • Flink日志采集-ELK可视化实现
  • iOS NSKeyedUnarchiver归档和读取
  • 算法通关村第五关|青铜|基于链表实现队列
  • 【Vue】使用v-model实现控制子组件显隐
  • 一篇博客读懂顺序表 —— Sequence-List
  • OceanBase:02-单机部署(生产环境)
  • 【嵌入式 C 常用算法 2 -- 变量值交换函数异或方式实现】
  • Hadoop HDFS(分布式文件系统)
  • 力扣1.两数之和
  • JTA分布式事务管理器
  • 晨控CK-GW08系列网关控制器与CODESYS软件MODBUSTCP通讯手册
  • 读书笔记——labuladong算法笔记
  • Linux中阶教程:bash shell基础
  • Golang 编译原理
  • 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别 计算机竞赛
  • 计算机视觉基础——基于yolov5-face算法的车牌检测
  • 【好书推荐】AI时代架构师修炼之道:ChatGPT让架构师插上翅膀
  • 全局代理和局部代理的区别
  • 基于EPICS stream模块的直流电源的IOC控制程序实例
  • Unity3D ECS架构适合作为主架构还是局部架构
  • 从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型
  • Qt6 中弹出消息框,一段时间后自动退出
  • elementUI树节点全选,反选,半选状态
  • Kafka、RabbitMQ、RocketMQ中间件的对比
  • Mac 创建并使用 .zshrc 文件
  • Unity3D移动开发如何依据性能选择Shader
  • 基于stm32F4的智能宠物喂食器的设计:LVGL界面、定时喂食喂水通风
  • jumpserver堡垒机docker方式安装部署
  • 在基于亚马逊云科技的湖仓一体架构上构建数据血缘的探索和实践