日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

我們一起聊聊K8s定時備份MySQL并發送到指定郵箱

來源: 責編: 時間:2024-01-02 09:31:32 199觀看
導讀一、背景:一開始的初衷是,想寫一個腳本來監控服務器的高占用率進程并通過郵件發送給我,然后突發奇想,可以使用這種方式來備份我的數據庫,開始動手!二、設計思路:通過編寫Shell腳本,調用Linux的mail工具,MySQLDump的方式來保存

一、背景:

一開始的初衷是,想寫一個腳本來監控服務器的高占用率進程并通過郵件發送給我,然后突發奇想,可以使用這種方式來備份我的數據庫,開始動手!K4x28資訊網——每日最新資訊28at.com

二、設計思路:

通過編寫Shell腳本,調用Linux的mail工具,MySQLDump的方式來保存數據庫的sql文件,通過Mail工具添加到附件,最后發送到我的郵箱。K4x28資訊網——每日最新資訊28at.com

三、編寫啟動腳本

首先我們來編寫一個啟動腳本 為了方便以后的個性化配置,我們將腳本中的變量都提取到一個application.yml文件中,文件如下:K4x28資訊網——每日最新資訊28at.com

RUNTIME: 084900 HOST: 172.16.1.2USER: rootPORT: 3306PASSWORD: 123456DATABASE: deanTARGETMAIL: deanmr@qq.com

接下來我們來寫一下shell腳本,邏輯也很簡單,當前時間與啟動時間相同時,則調用sendmail函數發送郵件K4x28資訊網——每日最新資訊28at.com

#!/bin/bashRUNTIME=$(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}')PORT=$(cat ./application.yml | grep PORT| 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(){  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客戶端K4x28資訊網——每日最新資訊28at.com

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命令構建鏡像,要記得加一下最后的點K4x28資訊網——每日最新資訊28at.com

docker build -t mysqlmail-bak:1.0.1 .

五、添加邊車容器

邊車容器(sidecar):邊車容器就是與主容器一起在一個pod中運行的容器,為業務容器賦能,共享一個網絡空間,所以可以用127.0.0.1:3306連接主容器的數據庫。K4x28資訊網——每日最新資訊28at.com

5.1 創建配置文件

為了方便調試,我把里面的shell腳本也掛載出來。創建兩個configmap,分別對應容器內的配置文件與shell腳本,后面如果不需要調試可以取消mysqlshell的掛載。K4x28資訊網——每日最新資訊28at.com

apiVersion: v1kind: ConfigMapmetadata:  name: mysqlmail-conf  namespace: deandata:  application.yml: |     RUNTIME: 105800    HOST: 127.0.0.1    USER: root    PASSWORD: 123456    DATABASE: dean    TARGETMAIL: deanmr@qq.com---apiVersion: v1kind: ConfigMapmetadata:  name: mysqlmail-shell  namespace: deandata:  demo.sh: |    #!/bin/bash    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有狀態服務的yamlK4x28資訊網——每日最新資訊28at.com

apiVersion: apps/v1kind: StatefulSetmetadata:  name: mysql  namespace: deanspec:  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: dean  labels:    app: mysqlspec:  ports:  - targetPort: 3306    port: 3306  clusterIP: None  selector:     app: mysql

六、測試

我們上面給他定的時間是RUNTIME: 105800,上海時區也就是18點58分,我們來看一下效果 查看日志, 注意:當一個pod包含多個容器時,要使用 -c 參數指定查看哪個容器K4x28資訊網——每日最新資訊28at.com

[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

從日志可以看到,郵件已經發送成功了!我們來去郵箱看一下,發現也已經成功了,至此我們的實驗完美完成!K4x28資訊網——每日最新資訊28at.com


K4x28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55252-0.html我們一起聊聊K8s定時備份MySQL并發送到指定郵箱

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入了解Java 8 新特性:Optional類的實踐應用

下一篇: 我們一起聊聊K8s定時備份MySQL并發送到指定郵箱

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網聯合創
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的“網紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內直播,
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11搭載高性能石墨散熱系統:旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 主站蜘蛛池模板: 焦作市| 三江| 广饶县| 沙雅县| 大厂| 南昌市| 南涧| 襄汾县| 军事| 长武县| 鄂州市| 新化县| 嘉祥县| 栾城县| 天等县| 新泰市| 广南县| 象山县| 贵州省| 盘锦市| 南充市| 额尔古纳市| 上犹县| 红河县| 容城县| 鄂伦春自治旗| 长岛县| 枝江市| 利川市| 儋州市| 钟山县| 宜宾县| 确山县| 龙南县| 杭锦旗| 贺兰县| 高陵县| 郴州市| 玉门市| 封开县| 阜新市|