Schreiben Sie ein MySQL-Datensicherungsskript mithilfe der Shell

Schreiben Sie ein MySQL-Datensicherungsskript mithilfe der Shell

Ideen

Eigentlich ist es ganz einfach

Schreiben Sie ein Shell-Skript, um die Daten über mysqldump von mysql in die entsprechende SQL-Datei zu exportieren; verwenden Sie Linux-Crontab, um das entsprechende Skript regelmäßig auszuführen und die SQL-Datei im entsprechenden Verzeichnis zu speichern; es ist denkbar, dass mit zunehmendem Datenvolumen und zunehmender Sicherungshäufigkeit auch die Auslastung der Festplattenressourcen des Sicherungsservers stark ansteigt; um dieses Problem zu lösen, müssen wir den Sicherungsinhalt regelmäßig bereinigen; ich verwende einfach ein Shell-Skript, um regelmäßig über Crontab zu bereinigen; Hinweis

Hier sind einige Punkte zu beachten:

Das Exportieren des SQL der entsprechenden Bibliothekstabelle über mysqldump führt zwangsläufig zu einem Ressourcenverbrauch des MySQL-Servers (CUP, Speicher, E/A usw.). Die Standardmethode von mysqldump führt zu Tabellensperren, was schrecklich ist und zu Unterbrechungen des Onlinedienstes führt. Dies ist möglicherweise nur von kurzer Dauer, aber fatal. (Sie können es über die Konfiguration in den Transaktionsmodus ändern, ohne die Tabelle zu sperren.) Mit zunehmender Datenmenge erhöht sich auch die Zeit, die mysqldump zum Exportieren von SQL benötigt.

Natürlich können Sie für die Datensicherung den entsprechenden Zeitraum auswählen und den Sicherungszyklus entsprechend der jeweiligen Geschäftssituation definieren. Oder wenn sich auf dem MySQL-Server viele Datenbanken befinden, können Sie je nach Geschäft zu unterschiedlichen Zeitpunkten sichern; das ist auch möglich. . . Es kommt auf die konkrete Unternehmenssituation an!

Da ich es nur für Entwicklung und Tests verwende, ist die Datenmenge nicht sehr groß, sodass die Auswirkungen vernachlässigt werden können. Es spielt keine Rolle, solange ich es sichere, nachdem alle Feierabend haben (also habe ich es so eingestellt: jeden Abend um 12 Uhr sichern und die Daten des letzten Monats nach einem Monat bereinigen).

1.mysqldump-Berechtigungen

Beschreibung der für mysqldump erforderlichen Berechtigungen:

mysqldump muss mindestens über die Auswahlberechtigung für die Tabelle verfügen. Für Ansichten muss mysqldump über die Berechtigung zum Anzeigen der Ansicht verfügen. Für Trigger muss mysqldump über Trigger-Berechtigungen verfügen. Um ein konsistentes Backup zu erstellen, benötigt mysqldump das Privileg, Tabellen zu sperren.

Nachfolgend sehen Sie die Schätzung zur Benutzererstellung (wenn Sie sie nicht verstehen, können Sie separat googeln, ich werde nicht ins Detail gehen):

Benutzer dumper@'127.0.0.1' erstellen;
gewähre dumper@'127.0.0.1' die Auswahl von tempdb.*;
Gewähren Sie dumper@'127.0.0.1' die Berechtigung, die Ansicht von tempdb.* anzuzeigen.
Gewähren Sie Sperrtabellen für tempdb.* für dumper@'127.0.0.1'.
Gewähre Trigger für tempdb.* an dumper@'127.0.0.1';

2. Shell-Skript (Daten exportieren SQL)

#!/bin/sh

# Datenbankinfo
DB_USER="Dumper"
DB_PASS="…"
DB_HOST="…"
# Datenbank-Array
DB_NAME=("Hotel" "Essen" "Foodweb")
# Andere Variablen
BIN_DIR="/usr/bin" #der MySQL-Bin-Pfad
BCK_DIR="/home/mysql-backups" #das Verzeichnis der Sicherungsdateien
DATE=`Datum +%F`
# Datei erstellen
mkdir $BCK_DIR/$DATE
# ZU TUN
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
für var in ${DB_NAME[@]};
Tun
  $BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/$DATE/db_$var.sql
Erledigt

Parameterbeschreibung:

--master-data[=#]

Hängen Sie den Speicherort und den Namen der binären Binlog-Datei an die Backup-Exportdatei an. Wenn der Wert gleich 1 ist, wird eine CHANGE MASTER-Anweisung hinzugefügt. Wenn der Wert gleich 2 ist, wird vor der CHANGE MASTER-Anweisung ein Kommentar hinzugefügt (funktioniert nicht~)
Dieser Parameter sperrt die Tabelle --lock-all-tables, sofern Sie nicht --single-transaction angeben.
In diesem Fall dauert die Tabellensperre nur für kurze Zeit zu Beginn des Dumps. Theoretisch wirkt sich jede Aktion während des Dumps auf die Binlog-Datei aus. Nachdem der Dump abgeschlossen ist, schaltet die Option die Tabellensperrfunktion automatisch aus.

--single-transaction

Als Transaktion ausführen

3. Shell-Skript (löscht N Tage alte Skripte planmäßig in Stapeln)

#!/bin/sh
finde /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;

veranschaulichen:

/home/lifeccp/dicom/studies: Bereiten Sie ein beliebiges Verzeichnis für die Bereinigung vor. -mtime: Standardanweisungsschreiben +10: Suche nach Dateien von vor 10 Tagen, wobei die Zahlen Tage darstellen, +30 bedeutet, nach Dateien von vor 30 Tagen zu suchen . ": der Datentyp, nach dem Sie suchen möchten. " .jpg" bedeutet, nach allen Dateien mit der Erweiterung jpg zu suchen. " " bedeutet, nach allen Dateien zu suchen. -exec: Schreiben Sie behobenes Schreiben von rm -rf: Erzwingen Sie das Löschen von Dateien, einschließlich Verzeichnissen. {};: Legen Sie die Ergebnisse der Suche in it4.crontab ab. Geplantes Startskript

crontab -e
0 0 * * * /home/sh/mysql-backups/dump.sh
0 0 1 * * /home/sh/mysql-backups/del.sh
Das könnte Sie auch interessieren:
  • HBASE verwendet häufig Shell-Befehle, Methoden zum Hinzufügen, Löschen, Ändern und Abfragen
  • Shell-Skript zum Implementieren geplanter MySQL-Sicherungs-, Lösch- und Wiederherstellungsfunktionen
  • So verarbeiten Sie MySQL-Abfrageergebnisse einfach in der Shell
  • So melden Sie sich unter Shell schnell ohne Kennwort bei der MySQL-Datenbank an
  • Automatische Sicherung der MySQL-Datenbank per Shell-Skript
  • Verwenden Sie Shell-Skripte, um MySQL hinzuzufügen, zu löschen, zu ändern und zu überprüfen und my.cnf zu konfigurieren

<<:  Detaillierte Erläuterung des grafischen Tutorials zum Herunterladen, Installieren und Konfigurieren von Win10 DVWA (Lernen von Anfängern)

>>:  So erkennen Sie, ob es sich beim aktuellen Browser um einen Headless-Browser mit JavaScript handelt

Artikel empfehlen

Schritte der Docker-Lernmethode zum Erstellen des ActiveMQ-Nachrichtendienstes

Vorwort ActiveMQ ist der beliebteste und leistung...

CSS-Benennung: BEM, Scoped CSS, CSS-Module und CSS-in-JS erklärt

Der Anwendungsbereich von CSS ist global. Wenn da...

Detaillierte Erklärung der dynamischen Komponenten von vue.js

:ist eine dynamische Komponente Verwenden Sie v-b...

So verwenden Sie griechische Buchstaben in HTML-Seiten

Griechische Buchstaben sind eine sehr häufig verw...

Zusammenfassung verschiedener Methoden zur JS-Datentyperkennung

Inhaltsverzeichnis Hintergrund Welche Methoden gi...

Vollständige Schritte für dynamische Bindungssymbole in Vue

0 Unterschiede zwischen Symbolen und Bildern Symb...

WeChat-Applet implementiert Suchfunktion und springt zur Suchergebnisseite

Suchseite: search.wxml-Seite: <view class=&quo...

Eine Zusammenfassung der Gründe, warum MySQL keinen Datumsfeldindex verwendet

Inhaltsverzeichnis Hintergrund erkunden Zusammenf...