Projektadresse und Anweisungen: https://gitee.com/noovertime/mysqlmail 1. Hintergrund:Meine ursprüngliche Absicht war, ein Skript zu schreiben, um die stark ausgelasteten Prozesse des Servers zu überwachen und sie mir per E-Mail zu senden. Dann wurde mir plötzlich klar, dass ich mit dieser Methode meine Datenbank sichern könnte, also begann ich daran zu arbeiten! 2. Gestaltungsideen:Indem ich ein Shell-Skript schreibe, das Linux-Mail-Tool aufrufe, mysqldump verwende, um die SQL-Datei der Datenbank zu speichern, sie über das Mail-Tool einem Anhang hinzufüge und sie schließlich an mein Postfach sende. 3. Schreiben Sie ein StartskriptSchreiben wir zunächst ein Startskript. Um die zukünftige personalisierte Konfiguration zu erleichtern, extrahieren wir alle Variablen im Skript in eine Datei application.yml. Die Datei sieht folgendermaßen aus: RUNTIME: 084900 ##Startzeit. Aufgrund des Zeitzonenproblems des Containers ist die aktuelle Zeit minus 8 Stunden erforderlich. HOST: 172.17.0.3 ##Datenbank-IP-Adresse USER: root ##Datenbankbenutzer PASSWORD: 123456 ##Datenbankkennwort DATABASE: solo ##Datenbankname TARGETMAIL: [email protected] ##E-Mail-Adresse zum Senden Als nächstes schreiben wir ein Shell-Skript. Die Logik ist ebenfalls sehr einfach. Wenn die aktuelle Zeit mit der Startzeit übereinstimmt, wird die Sendmail-Funktion aufgerufen, um eine E-Mail zu senden. #!/bin/bash #Autor: chenteng LAUFZEIT=$(cat ./application.yml | grep LAUFZEIT| awk '{print $2}') HOST=$(cat ./application.yml | grep HOST| awk '{print $2}') BENUTZER=$(cat ./application.yml | grep BENUTZER| awk '{print $2}') PASSWORT=$(cat ./application.yml | grep PASSWORT| awk '{print $2}') DATENBANK=$(cat ./application.yml | grep DATENBANK| awk '{print $2}') ZIELMAIL=$(cat ./application.yml | grep ZIELMAIL| awk '{print $2}') Funktion sendmail(){ mysqldump -h$HOST -u$USER -p$PASSWORT --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 Schlaf 1 } während wahr Tun AKTUELLE_ZEIT=$(Datum +%H%M%S) wenn [ $CURRENT_TIME = $RUNTIME ];dann echo "Starte Bak MySQL-Datenbank" sendmail weitermachen anders echo $CURRENT_TIME Schlaf 1 fi Erledigt 4. Erstellen Sie ein Image Da wir es letztendlich auf der K8S-Plattform platzieren werden, müssen wir ein Image erstellen. Bevor Sie das Image erstellen, legen Sie bitte application.yml demo.sh Dockerfile in dasselbe Verzeichnis VON centos RUN mkdir /app && yum install -y mysql.x86_64 sendmail mailx libreport-plugin-mailx ARBEITSVERZEICHNIS /app KOPIEREN Sie demo.sh. KOPIEREN Sie application.yml. CMD ["/bin/sh","demo.sh"] Verwenden Sie den Befehl „Docker Build“, um das Image zu erstellen. Denken Sie daran, den letzten Punkt hinzuzufügen Docker-Build -t mysqlmail-bak:1.0.1. 5. Hinzufügen eines Sidecar-ContainersSidecar-Container: Ein Sidecar-Container ist ein Container, der in einem Pod mit dem Hauptcontainer ausgeführt wird, den Business-Container unterstützt und einen Netzwerkplatz gemeinsam nutzt, sodass Sie 127.0.0.1:3306 verwenden können, um eine Verbindung mit der Datenbank des Hauptcontainers herzustellen. 5.1 Erstellen einer Konfigurationsdatei Um das Debuggen zu erleichtern, habe ich auch das Shell-Skript darin gemountet. API-Version: v1 Art: ConfigMap Metadaten: Name: mysqlmail-conf Namespace: Solo Daten: Anwendung.yml: | Laufzeit: 105800 Host: 127.0.0.1 BENUTZER: root PASSWORT: 123456 DATENBANK: solo ZIEL-MAIL: [email protected] --- API-Version: v1 Art: ConfigMap Metadaten: Name: mysqlmail-shell Namespace: Solo Daten: demo.sh: | #!/bin/bash #Autor: chenteng LAUFZEIT=$(cat ./application.yml | grep LAUFZEIT| awk '{print $2}') HOST=$(cat ./application.yml | grep HOST| awk '{print $2}') BENUTZER=$(cat ./application.yml | grep BENUTZER| awk '{print $2}') PASSWORT=$(cat ./application.yml | grep PASSWORT| awk '{print $2}') DATENBANK=$(cat ./application.yml | grep DATENBANK| awk '{print $2}') ZIELMAIL=$(cat ./application.yml | grep ZIELMAIL| awk '{print $2}') Funktion sendmail(){ mysqldump -h$HOST -u$USER -p$PASSWORT --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 Schlaf 1 } während wahr Tun AKTUELLE_ZEIT=$(Datum +%H%M%S) wenn [ $CURRENT_TIME = $RUNTIME ];dann echo "Starte Bak MySQL-Datenbank" sendmail weitermachen anders echo $CURRENT_TIME Schlaf 1 fi Erledigt 5.2 Erstellen Sie eine Stateful Service Deployment-DateiUnsere Bereitstellungsdatei verwendet die YAML-Datei des im vorherigen Artikel erstellten MySQL-Stateful-Dienstes. Wenn Sie interessiert sind, können Sie meinen vorherigen Migrationsartikel lesen. API-Version: Apps/v1 Art: StatefulSet Metadaten: Name: MySQL Namespace: Solo Spezifikation: Dienstname: MySQL-Dienst Wähler: Übereinstimmungsetiketten: App: MySQL Replikate: 1 Vorlage: Metadaten: Beschriftungen: App: MySQL Spezifikation: Behälter: - Name: mysqlmail-bak imagePullPolicy: IfNotPresent Bild: mysqlmail-bak:1.0.1 Volumenhalterungen: - Name: mysqlmail-conf Mount-Pfad: /app/application.yml Unterpfad: application.yml - Name: mysqlmail-shell MountPfad: /app/demo.sh Unterpfad: demo.sh - Name: MySQL-Pod imagePullPolicy: IfNotPresent Bild:mysql:5.7 Umgebung: - Name: MYSQL_ROOT_PASSWORD Wert: „123456“ Häfen: - ContainerPort: 3306 Name: msyql-listin Volumenhalterungen: - Name: MySQL-Daten Einhängepfad: /var/lib/mysql Unterpfad: MySQL-Daten - Name: mysql-conf Einhängepfad: /etc/mysql/conf.d/my.cnf Unterpfad: my.cnf Bände: - Name: MySQL-Daten Hostpfad: Pfad: /data/mysql - Name: mysql-conf Konfigurationskarte: Name: mysql-conf - Name: mysqlmail-conf Konfigurationskarte: Name: mysqlmail-conf - Name: mysqlmail-shell Konfigurationskarte: Name: mysqlmail-shell --- API-Version: v1 Art: Dienstleistung Metadaten: Name: MySQL-Dienst Namespace: Solo Beschriftungen: App: MySQL Spezifikation: Häfen: ZielPort: 3306 Port: 3306 clusterIP: Keine Wähler: App: MySQL 6. Testen Die oben eingestellte Zeit ist RUNTIME: 105800, also 18:58 in der Zeitzone von Shanghai. Schauen wir uns die Wirkung an und sehen uns das Protokoll an. [root@VM-24-15-centos solo]# kubectl logs -n solo mysql-0 -c mysqlmail-bak | grep mysql -C 5 105755 105756 105757 105758 105759 MySQL-Datenbank neu starten mysqldump: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. 105801 105802 Aus dem Protokoll können Sie ersehen, dass die E-Mail erfolgreich versendet wurde! Wir überprüften unseren Briefkasten und stellten fest, dass auch dieser erfolgreich war. Unser Experiment war nun perfekt abgeschlossen! Dies ist das Ende dieses Artikels zum Planen einer Datenbanksicherung im Docker-Container und zum Senden an ein angegebenes Postfach. Weitere Informationen zur geplanten Datenbanksicherung in Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So zeigen Sie JSON-Daten auf einer HTML-Seite an und formatieren sie
>>: Eine kurze Diskussion über Browserkompatibilitätsprobleme in JavaScript
Die Webseite zeigt 403 Forbidden an Nginx (Yum-In...
„Replace“ und „Replace into“ von MySQL sind beide...
//MySQL-Anweisung SELECT * FROM `MyTable` WHERE `...
Docker virtualisiert eine Brücke auf dem Host-Rec...
Hintergrund Vor nicht allzu langer Zeit habe ich ...
/******************** * Anwendung von verknüpften...
HTML-Ereignisliste Allgemeine Ereignisse: onClick ...
Einführung in das Geo-Modul von Nginx Die Geo-Dir...
Hintergrund Die Popularität von Docker hängt eng ...
In diesem Artikel wird der spezifische JavaScript...
Zusammenfassung der Installations- und Konfigurat...
Dieser Artikel dient zur Aufzeichnung der Install...
Vorwort: Ich habe Warnungen zu wahnsinnig langsam...
Die JSON-Daten müssen im HTML-Format zurückgegeben...
Mussten Sie schon einmal sehr große Datenmengen (...