From 61ebfbb191dbc9b91bcfa488993fb0df53e138f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Wed, 25 Jan 2023 13:05:14 +0000
Subject: [PATCH] docs: mysql dump cronjob documentation

---
 .vscode/settings.json                      |  9 +++-
 k8s/README.md                              | 21 ++++++---
 k8s/cronjobs/mysql-dump-cronjob-daily.yml  | 50 ++++++++++++++++++++++
 k8s/cronjobs/mysql-dump-cronjob-hourly.yml | 50 ++++++++++++++++++++++
 k8s/cronjobs/mysql-dump-cronjob-weekly.yml | 50 ++++++++++++++++++++++
 5 files changed, 174 insertions(+), 6 deletions(-)
 create mode 100644 k8s/cronjobs/mysql-dump-cronjob-daily.yml
 create mode 100644 k8s/cronjobs/mysql-dump-cronjob-hourly.yml
 create mode 100644 k8s/cronjobs/mysql-dump-cronjob-weekly.yml

diff --git a/.vscode/settings.json b/.vscode/settings.json
index f36e437..411d9c9 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -18,5 +18,12 @@
         "titleBar.inactiveBackground": "#32f0ff99",
         "titleBar.inactiveForeground": "#15202b99"
     },
-    "peacock.color": "#32f0ff"
+    "peacock.color": "#32f0ff",
+    "cSpell.words": [
+        "backoffice",
+        "ecolyo",
+        "mysqldump",
+        "selfdata",
+        "uroot"
+    ]
 }
\ No newline at end of file
diff --git a/k8s/README.md b/k8s/README.md
index 480a6f6..f6902a7 100644
--- a/k8s/README.md
+++ b/k8s/README.md
@@ -61,11 +61,12 @@ Configuration:
 
 - Demander la création des Persistent Volumes (PV) de façon à obtenir la configuration suivante (contacter un administrateur du cluster) :
 
-| Name                            | Capacity |
-| ------------------------------- | -------- |
-| pvc-1-ns-selfdata-d01-syn-claim | 1 GiB    |
-| pvc-2-ns-selfdata-d01-syn-claim | 500 MiB  |
-| pvc-3-ns-selfdata-d01-syn-claim | 2 GiB    |
+| Nom                             | Capacité | Utilisé pour   |
+| ------------------------------- | -------- | -----------    |
+| pvc-1-ns-selfdata-d01-syn-claim | 1 GiB    | Meilisearch    |
+| pvc-2-ns-selfdata-d01-syn-claim | 500 MiB  | Config serveur |
+| pvc-3-ns-selfdata-d01-syn-claim | 2 GiB    | BDD MySQL      |
+| pvc-4-ns-selfdata-d01-syn-claim | 1 GiB    | Dumps MySQL    |
 
 ## Création des déploiements
 
@@ -134,3 +135,13 @@ Configuration:
 ## Initialiser la BDD MySQL
 
 - Suivre les étapes décrites dans le fichier [init.md](/dbinit/init.md)
+
+## Installer les cronjobs de dump
+
+- Depuis VS Code, créer un fichier mysql-dump-cronjob-hourly.yml
+- Copier le contenu du fichier k8s/cronjobs/mysql-dump-cronjob-hourly.yml dedans
+- Lancer `oc apply -f mysql-dump-cronjob-hourly.yml`
+- Par défaut, le script conserve les 72 derniers dumps horaires. Vous pouvez définir le nombre de dump à conserver en changeant cette valeur après la commande `head` présente dans le script
+
+  ```s -F *.sql.gz | head -n -72 | xargs -r rm```
+- Répéter l'opération pour **mysql-dump-cronjob-daily** et **mysql-dump-cronjob-weekly**
diff --git a/k8s/cronjobs/mysql-dump-cronjob-daily.yml b/k8s/cronjobs/mysql-dump-cronjob-daily.yml
new file mode 100644
index 0000000..603012f
--- /dev/null
+++ b/k8s/cronjobs/mysql-dump-cronjob-daily.yml
@@ -0,0 +1,50 @@
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+  name: mysql-dump-cronjob-daily
+  namespace: ns-selfdata-d01-syn
+spec:
+  schedule: '@daily'
+  jobTemplate:
+    spec:
+      template:
+        spec:
+          volumes:
+            - name: pvc-4-ns-selfdata-d01-syn-claim
+              persistentVolumeClaim:
+                claimName: pvc-4-ns-selfdata-d01-syn-claim
+          containers:
+            - resources: {}
+              terminationMessagePath: /dev/termination-log
+              name: mysql-dump
+              env:
+                - name: MYSQL_DATABASE
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: name
+                - name: MYSQL_ROOT_PASSWORD
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: password
+                - name: DATABASE_HOST
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: host
+              imagePullPolicy: IfNotPresent
+              volumeMounts:
+                - name: pvc-4-ns-selfdata-d01-syn-claim
+                  mountPath: /dump
+              terminationMessagePolicy: File
+              image: 'mysql:5'
+              args:
+                - /bin/sh
+                - '-c'
+                - >-
+                  mkdir -p /dump/daily;
+                  cd /dump/daily;
+                  mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz;
+                  ls -F *.sql.gz | head -n -14 | xargs -r rm
+          restartPolicy: OnFailure
diff --git a/k8s/cronjobs/mysql-dump-cronjob-hourly.yml b/k8s/cronjobs/mysql-dump-cronjob-hourly.yml
new file mode 100644
index 0000000..d163925
--- /dev/null
+++ b/k8s/cronjobs/mysql-dump-cronjob-hourly.yml
@@ -0,0 +1,50 @@
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+  name: mysql-dump-cronjob-hourly
+  namespace: ns-selfdata-d01-syn
+spec:
+  schedule: '@hourly'
+  jobTemplate:
+    spec:
+      template:
+        spec:
+          volumes:
+            - name: pvc-4-ns-selfdata-d01-syn-claim
+              persistentVolumeClaim:
+                claimName: pvc-4-ns-selfdata-d01-syn-claim
+          containers:
+            - resources: {}
+              terminationMessagePath: /dev/termination-log
+              name: mysql-dump
+              env:
+                - name: MYSQL_DATABASE
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: name
+                - name: MYSQL_ROOT_PASSWORD
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: password
+                - name: DATABASE_HOST
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: host
+              imagePullPolicy: IfNotPresent
+              volumeMounts:
+                - name: pvc-4-ns-selfdata-d01-syn-claim
+                  mountPath: /dump
+              terminationMessagePolicy: File
+              image: 'mysql:5'
+              args:
+                - /bin/sh
+                - '-c'
+                - >-
+                  mkdir -p /dump/hourly;
+                  cd /dump/hourly;
+                  mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz;
+                  ls -F *.sql.gz | head -n -72 | xargs -r rm
+          restartPolicy: OnFailure
diff --git a/k8s/cronjobs/mysql-dump-cronjob-weekly.yml b/k8s/cronjobs/mysql-dump-cronjob-weekly.yml
new file mode 100644
index 0000000..052d7a0
--- /dev/null
+++ b/k8s/cronjobs/mysql-dump-cronjob-weekly.yml
@@ -0,0 +1,50 @@
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+  name: mysql-dump-cronjob-weekly
+  namespace: ns-selfdata-d01-syn
+spec:
+  schedule: '@weekly'
+  jobTemplate:
+    spec:
+      template:
+        spec:
+          volumes:
+            - name: pvc-4-ns-selfdata-d01-syn-claim
+              persistentVolumeClaim:
+                claimName: pvc-4-ns-selfdata-d01-syn-claim
+          containers:
+            - resources: {}
+              terminationMessagePath: /dev/termination-log
+              name: mysql-dump
+              env:
+                - name: MYSQL_DATABASE
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: name
+                - name: MYSQL_ROOT_PASSWORD
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: password
+                - name: DATABASE_HOST
+                  valueFrom:
+                    secretKeyRef:
+                      name: ecolyo-agent-database
+                      key: host
+              imagePullPolicy: IfNotPresent
+              volumeMounts:
+                - name: pvc-4-ns-selfdata-d01-syn-claim
+                  mountPath: /dump
+              terminationMessagePolicy: File
+              image: 'mysql:5'
+              args:
+                - /bin/sh
+                - '-c'
+                - >-
+                  mkdir -p /dump/weekly;
+                  cd /dump/weekly;
+                  mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz;
+                  ls -F *.sql.gz | head -n -14 | xargs -r rm
+          restartPolicy: OnFailure
-- 
GitLab