国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)

Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)

2022-01-25 16:43陳小c 服務(wù)器知識(shí)

這篇文章主要介紹了Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱,文中寫了一下shell腳本,邏輯也很簡(jiǎn)單,當(dāng)前時(shí)間與啟動(dòng)時(shí)間相同時(shí),則調(diào)用sendmail函數(shù)發(fā)送郵件,具體腳本跟隨小編一起看看吧

項(xiàng)目地址及使用說明:https://gitee.com/noovertime/mysqlmail

一、背景:

一開始的初衷是,想寫一個(gè)腳本來監(jiān)控服務(wù)器的高占用率進(jìn)程并通過郵件發(fā)送給我,然后突發(fā)奇想,可以使用這種方式來備份我的數(shù)據(jù)庫(kù),開始動(dòng)手!

二、設(shè)計(jì)思路:

通過編寫shell腳本,調(diào)用linux的mail工具,mysqldump的方式來保存數(shù)據(jù)庫(kù)的sql文件,通過mail工具添加到附件,最后發(fā)送到我的郵箱。

三、編寫啟動(dòng)腳本

首先我們來編寫一個(gè)啟動(dòng)腳本
為了方便以后的個(gè)性化配置,我們將腳本中的變量都提取到一個(gè)application.yml文件中,文件如下:

?
1
2
3
4
5
6
RUNTIME: 084900 ##啟動(dòng)時(shí)間,因?yàn)槿萜鲿r(shí)區(qū)問題,需要當(dāng)前時(shí)間減去8小時(shí)
HOST: 172.17.0.3 ##數(shù)據(jù)庫(kù)IP地址
USER: root ##數(shù)據(jù)庫(kù)用戶
PASSWORD: 123456 ##數(shù)據(jù)庫(kù)密碼
DATABASE: solo ##數(shù)據(jù)庫(kù)名
TARGETMAIL: 1849539179@qq.com ##發(fā)送的郵箱地址

接下來我們來寫一下shell腳本,邏輯也很簡(jiǎn)單,當(dāng)前時(shí)間與啟動(dòng)時(shí)間相同時(shí),則調(diào)用sendmail函數(shù)發(fā)送郵件

?
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
#!/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  --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

四、構(gòu)建鏡像

因?yàn)槲覀冏詈笠诺絢8s平臺(tái)上的,所以我們要構(gòu)建一個(gè)鏡像,在構(gòu)建鏡像之前,請(qǐng)先把a(bǔ)pplication.yml demo.sh Dockerfile放在同一目錄下
Dockerfile如下:
PS:添加了mysql的客戶端,郵件mail客戶端

?
1
2
3
4
5
6
FROM centos
RUN mkdir /app && yum install -y mysql.x86_64 sendmail  mailx libreport-plugin-mailx
WORKDIR /app
COPY demo.sh .
COPY application.yml .
CMD ["/bin/sh","demo.sh"]

使用docker build命令構(gòu)建鏡像,要記得加一下最后的點(diǎn)

?
1
docker build -t mysqlmail-bak:1.0.1 .

五、添加邊車容器

邊車容器(sidecar):邊車容器就是與主容器一起在一個(gè)pod中運(yùn)行的容器,為業(yè)務(wù)容器賦能,共享一個(gè)網(wǎng)絡(luò)空間,所以可以用127.0.0.1:3306連接主容器的數(shù)據(jù)庫(kù)。

5.1 創(chuàng)建配置文件

為了方便調(diào)試,我把里面的shell腳本也掛載出來。
創(chuàng)建兩個(gè)configmap,分別對(duì)應(yīng)容器內(nèi)的配置文件與shell腳本,后面如果不需要調(diào)試可以取消mysqlshell的掛載。

?
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
44
45
46
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysqlmail-conf
  namespace: solo
data:
  application.yml: |
    RUNTIME: 105800
    HOST: 127.0.0.1
    USER: root
    PASSWORD: 123456
    DATABASE: solo
    TARGETMAIL: 1849539179@qq.com
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysqlmail-shell
  namespace: solo
data:
  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 創(chuàng)建有狀態(tài)服務(wù)部署文件

我們的deploy文件使用的是上篇文章中創(chuàng)建的mysql有狀態(tài)服務(wù)的yaml,有興趣的可以看下我上篇遷移的文章

?
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: solo
spec:
  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: v1
kind: Service
metadata:
  name: mysql-service
  namespace: solo
  labels:
    app: mysql
spec:
  ports:
  - targetPort: 3306
    port: 3306
  clusterIP: None
  selector:
     app: mysql

六、測(cè)試

我們上面給他定的時(shí)間是RUNTIME: 105800,上海時(shí)區(qū)也就是18點(diǎn)58分,我們來看一下效果
查看日志,
注意: 當(dāng)一個(gè)pod包含多個(gè)容器時(shí),要使用 -c 參數(shù)指定查看哪個(gè)容器

?
1
2
3
4
5
6
7
8
9
10
[root@VM-24-15-centos solo]# kubectl logs -n solo mysql-0  -c mysqlmail-bak | grep mysql -C 5
105755
105756
105757
105758
105759
starting bak mysql database
mysqldump: [Warning] Using a password on the command line interface can be insecure.
105801
105802

從日志可以看到,郵件已經(jīng)發(fā)送成功了!我們來去郵箱看一下,發(fā)現(xiàn)也已經(jīng)成功了,至此我們的實(shí)驗(yàn)完美完成!

Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)

到此這篇關(guān)于Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱的文章就介紹到這了,更多相關(guān)Docker定時(shí)備份數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/weixin_43143310/article/details/122260774

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区三区在线观看视频 | 一区二区三区免费在线观看 | 亚洲 欧美 日韩 丝袜 另类 | 日韩福利在线 | 欧美激情精品久久久久久 | 毛片在线视频 | 精品在线一区 | 午夜精品福利在线观看 | 久草热8精品视频在线观看 欧美黄色小视频 | 午夜精品一区二区三区在线视频 | 国产韩国精品一区二区三区 | 中文字幕一区二区三区不卡 | 亚洲免费网站 | 国产久 | 精品人成| 亚洲免费中文 | 天天干干干干 | 91免费在线播放 | 超碰人人爱人人 | www.国产精品 | 午夜网址 | 亚洲高清一区二区三区 | 激情久久婷婷 | 欧美专区在线观看 | 久久小视频 | 一区二区三区四区日韩 | 日本一本视频 | 日本久久久 | 亚洲欧美中文字幕 | 免费成人高清在线视频 | 日韩免费 | 夜夜春精品视频高清69式 | 91粉色视频 | 日本手机在线视频 | 综州合另类| 韩日一区| 一区二区三区不卡视频 | 国产免费爽爽视频在线观看 | 免费观看aaa | 亚洲精品久久久 | 91嫩草国产露脸精品国产 |