返回顶部
首页 > 资讯 > 精选 >Docker容器怎么定时备份数据库并发送到指定邮箱
  • 335
分享到

Docker容器怎么定时备份数据库并发送到指定邮箱

2023-06-22 08:06:11 335人浏览 八月长安
摘要

今天就跟大家聊聊有关Docker容器怎么定时备份数据库并发送到指定邮箱,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、背景:一开始的初衷是,想写一个脚本来监控服务器的高占用率进程并

今天就跟大家聊聊有关Docker容器怎么定时备份数据库并发送到指定邮箱,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、背景:

一开始的初衷是,想写一个脚本来监控服务器的高占用率进程并通过邮件发送给我,然后突发奇想,可以使用这种方式来备份我的数据库,开始动手!

二、设计思路:

通过编写shell脚本,调用linux的mail工具mysqldump的方式来保存数据库的sql文件,通过mail工具添加到附件,最后发送到我的邮箱。

三、编写启动脚本

首先我们来编写一个启动脚本
为了方便以后的个性化配置,我们将脚本中的变量都提取到一个application.yml文件中,文件如下:

RUNTIME: 084900 ##启动时间,因为容器时区问题,需要当前时间减去8小时HOST: 172.17.0.3 ##数据库IP地址USER: root ##数据库用户PASSWord: 123456 ##数据库密码DATABASE: solo ##数据库名TARGETMAIL: 1849539179@qq.com ##发送的邮箱地址

接下来我们来写一下shell脚本,逻辑也很简单,当前时间与启动时间相同时,则调用sendmail函数发送邮件

#!/bin/bash#author: chentengRUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}')HOST=$(cat ./application.yml | grep HOST| awk '{print $2}')USER=$(cat ./application.yml | grep USER| awk '{print $2}')PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}')DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}')TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}')function  sendmail(){  Mysqldump -h$HOST  -u$USER -p$PASSWORD  --complete-insert --skip-add-drop-table  --hex-blob $DATABASE  > $DATABASE.sql  echo -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAIL  sleep 1}while truedo   CURRENT_TIME=$(date +%H%M%S)  if [ $CURRENT_TIME = $RUNTIME ];then    echo "starting bak mysql database"    sendmail    continue  else    echo $CURRENT_TIME    sleep 1  fidone

四、构建镜像

因为我们最后要放到k8s平台上的,所以我们要构建一个镜像,在构建镜像之前,请先把application.yml demo.sh Dockerfile放在同一目录下
Dockerfile如下:
PS:添加了mysql的客户端,邮件mail客户端

FROM CentosRUN mkdir /app && yum install -y mysql.x86_64 sendmail  mailx libreport-plugin-mailx WORKDIR /appCOPY demo.sh .COPY application.yml .CMD ["/bin/sh","demo.sh"]

使用docker build命令构建镜像,要记得加一下最后的点

docker build -t mysqlmail-bak:1.0.1 .

五、添加边车容器

边车容器(sidecar):边车容器就是与主容器一起在一个pod中运行的容器,为业务容器赋能,共享一个网络空间,所以可以用127.0.0.1:3306连接主容器的数据库。

5.1 创建配置文件

为了方便调试,我把里面的shell脚本也挂载出来。
创建两个configmap,分别对应容器内的配置文件与shell脚本,后面如果不需要调试可以取消mysqlshell的挂载。

apiVersion: v1kind: ConfigMapmetadata:  name: mysqlmail-conf  namespace: solodata:  application.yml: |    RUNTIME: 105800    HOST: 127.0.0.1    USER: root    PASSWORD: 123456    DATABASE: solo    TARGETMAIL: 1849539179@qq.com---apiVersion: v1kind: ConfigMapmetadata:  name: mysqlmail-shell  namespace: solodata:  demo.sh: |    #!/bin/bash    #author: chenteng    RUNTIME=$(cat ./application.yml | grep RUNTIME| awk '{print $2}')    HOST=$(cat ./application.yml | grep HOST| awk '{print $2}')    USER=$(cat ./application.yml | grep USER| awk '{print $2}')    PASSWORD=$(cat ./application.yml | grep PASSWORD| awk '{print $2}')    DATABASE=$(cat ./application.yml | grep DATABASE| awk '{print $2}')    TARGETMAIL=$(cat ./application.yml | grep TARGETMAIL| awk '{print $2}')    function  sendmail(){      mysqldump -h$HOST  -u$USER -p$PASSWORD  --complete-insert --skip-add-drop-table  --column-statistics=0 --hex-blob $DATABASE  > $DATABASE.sql      echo -e "mysqlbak_$CURRENT_TIME" |mail -s "mysqlbak_$CURRENT_TIME" -a $DATABASE.sql $TARGETMAIL      sleep 1    }    while true    do       CURRENT_TIME=$(date +%H%M%S)      if [ $CURRENT_TIME = $RUNTIME ];then        echo "starting bak mysql database"        sendmail        continue      else        echo $CURRENT_TIME        sleep 1      fi    done

5.2 创建有状态服务部署文件

我们的deploy文件使用的是上篇文章中创建的mysql有状态服务的yaml,有兴趣的可以看下我上篇迁移的文章

apiVersion: apps/v1kind: StatefulSetmetadata:  name: mysql  namespace: solospec:  serviceName: mysql-service  selector:    matchLabels:      app: mysql  replicas: 1  template:    metadata:      labels:        app: mysql    spec:      containers:      - name: mysqlmail-bak        imagePullPolicy: IfNotPresent        image: mysqlmail-bak:1.0.1        volumeMounts:        - name: mysqlmail-conf          mountPath: /app/application.yml          subPath: application.yml        - name: mysqlmail-shell          mountPath: /app/demo.sh          subPath: demo.sh      - name: mysql-pod        imagePullPolicy: IfNotPresent        image: mysql:5.7        env:        - name: MYSQL_ROOT_PASSWORD          value: "123456"        ports:        - containerPort: 3306          name: msyql-listin        volumeMounts:        - name: mysql-data          mountPath: /var/lib/mysql          subPath: mysql-data        - name: mysql-conf          mountPath: /etc/mysql/conf.d/my.cnf          subPath: my.cnf      volumes:      - name: mysql-data        hostPath:          path: /data/mysql      - name: mysql-conf        configMap:          name: mysql-conf      - name: mysqlmail-conf        configMap:           name: mysqlmail-conf      - name: mysqlmail-shell        configMap:          name: mysqlmail-shell---apiVersion: v1kind: Servicemetadata:  name: mysql-service  namespace: solo  labels:    app: mysqlspec:  ports:  - targetPort: 3306    port: 3306  clusterIP: None  selector:     app: mysql

六、测试

我们上面给他定的时间是RUNTIME: 105800,上海时区也就是18点58分,我们来看一下效果
查看日志
注意: 当一个pod包含多个容器时,要使用 -c 参数指定查看哪个容器

[root@VM-24-15-centos solo]# kubectl logs -n solo mysql-0  -c mysqlmail-bak | grep mysql -C 5105755105756105757105758105759starting bak mysql databasemysqldump: [Warning] Using a password on the command line interface can be insecure.105801105802

从日志可以看到,邮件已经发送成功了!我们来去邮箱看一下,发现也已经成功了,至此我们的实验完美完成!

Docker容器怎么定时备份数据库并发送到指定邮箱

看完上述内容,你们对Docker容器怎么定时备份数据库并发送到指定邮箱有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: Docker容器怎么定时备份数据库并发送到指定邮箱

本文链接: https://lsjlt.com/news/303504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker容器怎么定时备份数据库并发送到指定邮箱
    今天就跟大家聊聊有关Docker容器怎么定时备份数据库并发送到指定邮箱,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、背景:一开始的初衷是,想写一个脚本来监控服务器的高占用率进程并...
    99+
    2023-06-22
  • Docker容器定时备份数据库并发送到指定邮箱(设计思路)
    目录一、背景:二、设计思路:三、编写启动脚本四、构建镜像五、添加边车容器5.1 创建配置文件5.2 创建有状态服务部署文件六、测试项目地址及使用说明:https://gitee.co...
    99+
    2024-04-02
  • Linux定时备份数据库到指定邮箱的方法
    一、配置邮箱 这里使用的是网易邮箱126邮箱的STMP服务,服务器是smtp.126.com。如果你使用其它第三方邮箱,在帐号设置那里一般都有说明SMTP服务器地址。 如果你的Ubuntu没有安装mail模块,则需要执行...
    99+
    2022-06-04
    linux 定时备份 linux 备份数据库
  • 数据库指定库表中的字段进行备份,并以表格的形式定时发送邮件到指定邮箱 ​
    备份数据进行定时邮件发送 mkdir -p /opt/module/shell/ mkdir -p /opt/module/shell/sql/revenue.sql mkdir -p /opt/modul...
    99+
    2024-04-02
  • VBS中怎么获取外网IP地址并发送到指定邮箱
    VBS中怎么获取外网IP地址并发送到指定邮箱,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下:Function GetIPAddress() Dim Fla...
    99+
    2023-06-08
  • mysql数据库怎么定时备份
    这篇文章主要讲解了“mysql数据库怎么定时备份”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库怎么定时备份”吧!操作步骤:1、将脚本放到任意...
    99+
    2024-04-02
  • shell脚本如何定时备份MySQL数据库数据并保留指定时间
    这篇文章主要介绍shell脚本如何定时备份MySQL数据库数据并保留指定时间,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!公司用到的MySQL数据库,经常有同事通过一顿骚操作把一些关键的配置数据误删,每次恢复都要花上...
    99+
    2023-06-09
  • Docker容器MySQL数据库的备份与还原,以及每天定时自动备份.
    1.快速启动mysql容器 1:拉取mysql镜像: 根据自己需要,我这个是Debian的5.7版本的镜像。 这个地方一定要注意: 有些版本的docker镜像里面移除了MySQL自带的工具。包括Mys...
    99+
    2023-09-29
    docker 数据库 mysql
  • 怎么在linux中定时备份MySQL数据库并删除备份文件
    怎么在linux中定时备份MySQL数据库并删除备份文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一丶选择一个比较大位置来保存备份文件(创建文件就行)使用mkdir来创...
    99+
    2023-06-09
  • linux中怎么定时备份mysql数据库
    本篇文章为大家展示了linux中怎么定时备份mysql数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。利用crontab,系统每天定时备份mysql数据库 &n...
    99+
    2024-04-02
  • Oracle数据库怎么定时异地备份
    这篇文章主要讲解了“Oracle数据库怎么定时异地备份”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle数据库怎么定时异地备份”吧!1)设置defe...
    99+
    2024-04-02
  • mysql怎么定时自动备份数据库
    您可以使用MySQL的事件调度器来定时自动备份数据库。以下是一种常见的方法:1. 登录MySQL命令行客户端或其他MySQL管理工具...
    99+
    2023-08-18
    mysql
  • mysql数据库定时备份怎么实现
    有多种方法可以实现MySQL数据库的定时备份,以下是其中一种常用的方法: 使用crontab定时任务: 首先创建一个备份脚本,比...
    99+
    2024-04-12
    mysql
  • sqlserver定时备份数据库怎么实现
    要实现定时备份数据库,可以使用SQL Server的内置功能——作业(Job)。以下是实现步骤: 打开SQL Server Ma...
    99+
    2024-04-09
    SQLServer 数据库
  • sqlserver定时备份数据库怎么设置
    要定时备份SQL Server数据库,可以使用SQL Server代理作业来实现。 以下是设置定时备份数据库的步骤: 打开SQL...
    99+
    2024-04-09
    sqlserver 数据库
  • 怎么在Linux中定时备份MySQL数据库
    怎么在Linux中定时备份MySQL数据库?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 MySQL5.6以上版本 修改 /etc/my.cnf 文件# vim&...
    99+
    2023-06-09
  • Linux中怎么将MySQL 定时备份并上传到 git 仓库
    Linux中怎么将MySQL 定时备份并上传到 git 仓库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  服务器新建备份  在服务器为了存...
    99+
    2024-04-02
  • 怎么在MySQL中设置定时备份数据库
    今天就跟大家聊聊有关怎么在MySQL中设置定时备份数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 查看mysqldumproot@laow...
    99+
    2024-04-02
  • SQL server中怎么定时自动备份数据库
    本篇文章给大家分享的是有关SQL server中怎么定时自动备份数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL2000版本用JOB...
    99+
    2024-04-02
  • 怎么在linux中每天定时备份数据库
    这篇文章将为大家详细讲解有关怎么在linux中每天定时备份数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、写好shell脚本 mysqlbak.sh#!/bin/shmysqldum...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作