Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So sichern Sie MySQL-Datenbanken über die Befehlszeile in Linux

Die aktuelle technologische Entwicklung in allen Lebensbereichen hat Daten wertvoller gemacht als Gold und Silber. Wenn Sie Daten erwerben, vermehren und schützen können, sind Sie nur einen Schritt davon entfernt, ein Datengott zu werden. Große Unternehmen, die Lebensaspekte wie E-Commerce, Kraftstoff, Transport und Lebensmittellandschaften kontrollieren, verlassen sich jedoch auf den Datenschutz, um sich vor einem unvermeidlichen Zusammenbruch zu schützen.

Im Moment ist der Verlust von Daten wie der Verlust Ihrer Lebensversicherung. Daher sollte das von Ihnen verwendete Datenbankmanagementsystem eine Backup-Orientierung haben. Wenn Sie ein MySQL-Administrator oder ein Benutzer sind, der mit wachsenden Datenmengen zu tun hat, sollten Sie erwägen, einen mehr als häufigen Backup-Automatisierungsplan zu implementieren. Grund? Sie könnten Opfer eines Datenhacks werden oder Ihre Daten sogar versehentlich ändern.

Solche Umstände können zu unversöhnlichen Datenschutzverletzungen führen, insbesondere wenn Sie keinen Datenbank-Backup-Plan haben. Wenn Sie ein engagierter MySQL-Benutzer oder -Administrator sind, ist dieser Artikel hier, um Ihre Datenbank-Backup-Sorgen zu lösen. Wir werden zwei Ziele erreichen. Zunächst werden Sie die Implementierung des Exportierens von Datenbanken durch „mysqldump“ verstehen. Abschließend werden wir darauf eingehen, wie die Verwendung von „crontab“ diesen gesamten Prozess durch Automatisierung vereinfachen kann.

Erstellen Sie ein Datensicherungsverzeichnis

Da Linux keine Benutzerempfehlung für ein MySQL-Datensicherungsziel ausspricht, liegt es an Ihnen, einen geeigneten Sicherungsort zu wählen. In diesem Tutorial arbeiten wir beispielsweise unter einem Backup-Verzeichnis in „/var/www_my_backups/“. Wir ziehen diesen Ansatz nur in Betracht, um die Mechanismen der MySQL-Datensicherung zu verstehen. Idealerweise empfiehlt es sich, alle wichtigen Datensicherungen auf einem externen Server durchzuführen.

Sie können Ihr bevorzugtes Backup-Verzeichnis auf Ihrem lokalen Rechner mit einem Terminalbefehl ähnlich dem folgenden erstellen:

$ sudo mkdir /var/www_my_backups/

Stellen Sie sicher, dass die Linux-betriebene Backup-Maschine, die Sie verwenden, Sie mit Root-Zugriff oder sudo-Berechtigungen ausgestattet hat. Wenn Sie keinen Eigentümerzugriff auf das erstellte Sicherungsverzeichnis haben, werden Sie beim Ausführen von mysqldump-Tests mit Berechtigungsfehlern konfrontiert. Der folgende Befehl sollte den derzeit aktiven Systembenutzer auflisten und angeben, ob Sie Eigentümerrechte für den erstellten Sicherungsordner haben.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

Das mysqldump-Client-Dienstprogramm

Dieses MySQL-Tool führt logische Backups durch. Es führt zu mehreren SQL-Anweisungssätzen, die bei der Ausführung die ursprünglichen Datenbanktabellendaten und Objektdefinitionen wiederherstellen. Zusätzlich werden ein oder mehrere MySQL-Datenbankdumps gesichert oder auf einen sekundären SQL-Datenbankserver übertragen.

Ein standardmäßiger mysqldump-Befehl wird durch die folgende Befehlssyntax dargestellt.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
  • -u [mysql_benutzername]: stellt einen privilegierten Benutzer der MySQL-Datenbank dar. Dieser Benutzer sollte Datenbank-Dump-Operationen ausführen können.
  • -p[mysql_passwort]: steht für das Benutzerkennwort der MySQL-Datenbank. Fügen Sie kein Leerzeichen zwischen „-p“ und „[mysql_password]“ hinzu.
  • [mysql_dump_file_name]: steht für den Namen Ihrer MySQL-Datenbank.
  • >: zeigt auf das Ziel des Ausgabe-Dumps
  • /path/to/[mysql_dump_file_name].sql: zeigt auf den Pfad der zugeordneten Speicherauszugsdatei. Sie können dieser Dump-Datei [mysql_dump_file_name] einen benutzerdefinierten Namen geben, wenn Sie möchten.

Bevor wir mit diesem Tutorial fortfahren, gibt es etwas Erwähnenswertes über „-p[mysql_password]“. Während sich dieser Artikelleitfaden darauf konzentriert, seine Verwendung mit mehreren MySQL-Dump-Beispielen zu verknüpfen, sollten Sie es vermeiden, es direkt zu verwenden, wenn Sie mit Ihren echten MySQL-Backup-Dumps umgehen, insbesondere in einem gemeinsam genutzten Netzwerk.

Ein laufender Dump kann mit einem zweidimensionalen Befehl wie „ps ax“ gehackt werden, wodurch der zugehörige Datenbankbenutzername und das Passwort preisgegeben werden. Wenn Sie jedoch den Speicherort „~/.my.cnf“ zum Speichern Ihres MySQL-Datenbankpassworts verwenden, wird die Verwendung von „-p[mysql_password]“ im angegebenen Dump-Befehl unnötig. Wenn dieser Dump-Befehl über einen Cron-Job ausgeführt wird, sollte die Befehlsoption „–defaults-extra-file=/path/to/.my.cnf“ den mysqldump-Befehl auf den Speicherort des Datenbankpassworts verweisen.

Einige Backup-Beispiele für MySQL-Datenbanken

Betrachten wir mehrere Benutzerszenarien, in denen wir den mysqldump-Befehl verwenden können, um MySQL-Datenbankdaten zu sichern.

Alle Datenbanken sichern

Die Verwendung der Befehlsoption „–all-databases“ in Ihrem mysqldump-Befehl kümmert sich um alle MySQL-Datenbank-Dumps auf Ihrem Linux-System. Der folgende Befehl zeigt beispielsweise, wie Sie alle Ihre MySQL-Datenbanken in die bereits vorhandene Datei „/var/www_my_backups/“ sichern. Der Benutzer dieses Linux-Systems sollte root sein oder über sudo-Berechtigungen verfügen.

In unserem Fall und zu Ihrem Verständnis haben wir unsere Dump-Datei „all-databases.sql“ genannt, aber Sie können jeden anderen Namen Ihrer Wahl verwenden. Da wir es mit allen Datenbanken zu tun haben, ist es erforderlich, ein Root-Benutzer des MySQL-Kontos zu sein.

$ mysqldump -u root -p[mysql_password] --all-databases > /var/www_my_backups/all-databases.sql

Eine Datenbank sichern

Wenn Ihnen nur eine MySQL-Datenbank wichtig ist, müssen Sie zum Erstellen ihres Backups mit dem Befehl mysqldump die Befehlsoption „[mysql_database]“ durch den tatsächlichen Namen ersetzen. Der Name der Dump-Datei kann den Namen dieser Datenbank „[mysql_database].sql“ annehmen, sodass sie später leicht nachzuverfolgen und wiederherzustellen ist. Sie können auch einen anderen benutzerdefinierten Dump-Dateinamen verwenden, wenn Sie dies wünschen.

Dieser Beispielbefehl wird mit dem Root-Benutzer implementiert, aber jeder andere Benutzer mit Zugriff auf die Zieldatenbank ist eine praktikable Option.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[mysql_database_name].sql

Mehrere Datenbanken sichern

Möglicherweise haben Sie eine bestimmte Auswahl an MySQL-Datenbanken, die Sie sichern möchten. In diesem Fall erscheint die Befehlsoption „[mysql_database_name]“ mehr als einmal, und jeder Fall ist mit dem Namen der Datenbank verknüpft, die Sie sichern möchten. Denken Sie daran, die Namen dieser Datenbanken im mysqldump-Befehl mit Leerzeichen zu versehen. Die Dump-Datei „[mysql_database_name].sql“ sollte auch mit einem eindeutigen Namen verknüpft sein, an den Sie sich erinnern werden.

$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name] > /var/www_my_backups/[mysql_databases_1_2_names].sql

Eine einzelne Tabelle sichern

Wenn Ihre Backup-Routine nur hinter einer bestimmten Datenbanktabelle her ist, sollte das Erstellen ihres Backups sowohl den Datenbanknamen als auch den Datenbanktabellennamen als Befehlsoptionen des mysqldump-Befehls haben. Sie können Ihrer Dump-Datei denselben Namen wie der Zieldatenbanktabelle geben, z. [mysql_datenbank_tabellenname].sql.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name] > /var/www_my_backups/[mysql_databases_table_name].sql

Mehrere Tabellen sichern

Wenn Sie viele spezifische MySQL-Datenbanktabellen sichern möchten, sollte eine Erwähnung aller Ihrer ausgewählten Datenbanktabellennamen nach dem Datenbanknamen kommen, der diese Tabellen hostet. Die Ziel-Dump-Datei könnte einen Namen wie [mysql_database_tables_1_2_names].sql

annehmen
$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name] > /var/www_my_backups/[mysql_databases_tables_1_2_names].sql

Sichern einer oder mehrerer entfernter Datenbanken

Auch diese Beispielimplementierung ist unkompliziert. Der MySQL-Datenbank-Dump-Befehl muss die Befehlsoption „-h“ enthalten, gefolgt vom Hostnamen oder der zugehörigen IP-Adresse des Remote-Computers. Alle anderen üblichen Befehlssyntaxen für die Datenbanksicherung sollten dann folgen.

$ mysqldump -h [remote_computer_ip_or_hostname] -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[remote_mysql_database_name].sql

Sie können diesen mysqldump-Befehl anpassen, um mit den anderen bereits besprochenen Fällen von Datenbanksicherungen umzugehen, z. B. MySQL-Sicherungen mit mehreren Datenbanken oder Tabellen.

Sichern einer mit Komprimierungen verbundenen Datenbank

Wenn Sie Ihre Datensicherungen mit Komprimierungen verknüpfen möchten, muss das „| gzip -c>“ Die mysqldump-Befehlsoption kann verwendet werden, um eine gzip-Ausgabe zu leiten.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Wenn Ihre MySQL-Datenbank riesig ist und Sie den Komprimierungsfortschritt verfolgen möchten, ziehen Sie immer in Betracht, die verbose-Option zu implementieren, wie im folgenden Beispiel dargestellt.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose > /var/www_my_backups/[mysql_database_name].sql.gz

MySQL-Datenbank wird wiederhergestellt

Wenn Sie mit dem Backup Ihrer MySQL-Datenbank fertig sind, wie geht es weiter? Wie greifen Sie auf die Daten zu, die Sie so sorgfältig gesichert haben? Die Wiederherstellung Ihrer Daten erfordert die Einhaltung der folgenden MySQL-Wiederherstellungssyntax.

$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name] < /path/to/[mysql_database_name].sql 

Wie Sie vielleicht nicht bemerkt haben, besteht der einzige Unterschied zwischen diesem Datenbankwiederherstellungsbefehl und dem Datenbanksicherungsbefehl darin, dass wir die Option „mysql“ anstelle der Option „mysqldump“ und die Option „<“ anstelle der Option „>“ verwenden.

MySQL-Backups automatisieren

Das Linux-Betriebssystem ist mit mehreren nützlichen Diensten ausgestattet, die für einen Datenbankadministrator wie den unter MySQL RDBMS von unschätzbarem Wert sind. Einer dieser Dienste ist der Cron-Dienst. Es ist effektiv bei der Planung automatisierter Befehle. Diese Befehle werden, sobald sie erstellt sind, der Cron-Tabelle crontab zugewiesen. Sie können über den folgenden Befehl auf crontab zugreifen.

$ sudo crontab -e

Wenn Sie dazu aufgefordert werden, möchte dieser Befehl seine Ausführung möglicherweise einem Texteditor zuordnen, um den Nano-Texteditor auszuwählen.

Eine Datei mit einem Namen wie „/tmp/crontab.LVY6A9/crontab“ wird geöffnet. Geben Sie am Ende dieser Crontab-Datei einen praktikablen Cron-Zeitplan zusammen mit einem anwendbaren MySQL-Dump-Befehl ein. Das unten dargestellte Beispiel implementiert die Verwendung der gzip-Komprimierung für tägliche Datenbanksicherungen. Manchmal haben Sie möglicherweise große .sql-Dateien für die Sicherung geplant. Die Verwendung von gzip reduziert solche Dateien auf eine angemessene Größe, bevor sie gesichert werden. Es hilft bei der Verwaltung des Backup-Speichers.

00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Die Befehlsoption „00 03 ***“ kann wie folgt interpretiert werden. Alle 24 Stunden nach 3 Uhr morgens wird der folgende mysqldump-Befehl ausgeführt, um eine Datenbank zu sichern. Die Datenbank-Sicherungsdatei, die aktuell vor dem Start dieses Sicherungsvorgangs existierte, wird überschrieben. In Ihrem Fall müssen Sie nicht nach 24 Stunden warten, um Ihre Datenbank-Backup-Automatisierung über crontab in Aktion zu sehen.

Sie können die Option „00 03 ***“ in der Crontab-Datei auf etwas wie „02 00 ***“ ändern, und in nur zwei Minuten sollte sich der Sicherungsvorgang selbst initialisieren. Alternativ, wenn Ihre Zeit 22:30 Uhr ist, wird durch Bearbeiten der Datei mit „34 22 ***“ der Datenbanksicherungsprozess um 22:34 Uhr initialisiert. Denken Sie daran, diese Crontab-Datei zu speichern (Strg+X), bevor Sie sie schließen, damit dieser Befehl ausführbar wird.

Nach Ablauf der eingestellten Minuten sollte der Cron-Job ausgeführt worden sein. Listen Sie dann den erstellten Sicherungsordner auf Ihrem Terminal auf, und die erstellte .sql.gz-Sicherungsdatei sollte vorhanden sein.

$ ls -l /var/www_my_backups/

Die resultierende Ausgabe sollte etwa wie folgt aussehen:

-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz

Wenn Sie Probleme haben, die MySQL-Sicherungsdatei .sql.gz zu erkennen, lesen Sie Ihre crontab-Zeit oder den gesamten Befehl Korrektur. Es könnte ein Syntaxfehler vorliegen, oder etwas könnte fehlen. Alternativ könnte das Cron-Protokoll des Systems auf ein Problem hinweisen.

$ sudo grep CRON /var/log/syslog 

Denken Sie daran, den crontab-Eintrag auf Ihren bevorzugten Datenbankzeitplan zurückzusetzen, sobald Sie sich vergewissert haben, dass alles richtig funktioniert.

Verwenden von my.cnf zum Speichern von MySQL-Datenbankpasswörtern  

Wir haben bereits die Nachteile der Option „-p[mysql_password]“ in einem mysqldump-Befehl erwähnt, insbesondere in einem gemeinsam genutzten Netzwerk. Wir müssen besprechen, wie die Passwortspeicherung in der Datei „~/.my.cnf“ implementiert wird. Benutzer, die Cron verwenden, um ihre Datenbanksicherungen zu automatisieren, müssen die Implementierung der Befehlsoption „–defaults-extra-file=/path/to/.my.cnf“ verstehen.

Meine.cnf-Datei bearbeiten

Das Home-Verzeichnis Ihres Linux-Systems enthält diese versteckte Datei. Der direkte Systempfad dazu lautet „/home/your_username/.my.cnf“. Verwenden Sie den Nano-Texteditor, um diese Datei zu öffnen. Die Option „~“ zeigt auf das Home-Verzeichnis.

$ sudo nano ~/.my.cnf

Bearbeiten Sie diese geöffnete Datei gemäß der folgenden Syntax, um Ihr MySQL-Datenbankkennwort erfolgreich zu speichern. Der Teil „YOUR_DB_PASS“ ist der einzige Eintrag, den Sie mit Ihrem tatsächlichen Datenbankpasswort ändern müssen. Geben Sie diese Informationsdetails am Ende der Datei ein und speichern Sie sie.

[mysqldump] 
password=YOUR_DB_PASS

Verwenden Sie Strg+X, um diese Datei zu speichern. Diese „my.cnf“-Datei benötigt auch einige Berechtigungseinstellungen. Implementieren Sie den folgenden Befehl:

$ sudo chmod 600 ~/.my.cnf

Jetzt ist es an der Zeit, sich die Neuerstellung unseres neuen mysqldump-Befehls anzusehen, bei dem die Befehlsoption „-p[mysql_password]“ eliminiert wurde.

$ mysqldump -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

Wie Sie sehen können, haben wir nichts hinzugefügt. Es scheint nur so, als hätten wir nur die Befehlsoption „-p[mysql_password]“ entfernt.

Crontab und –defaults-extrs-file

Benutzer, die automatische Datenbanksicherungen bevorzugen, müssen das Datenbankkennwort in der Datei „~/.my.cnf“ über die Befehlsoption „–defaults-extra-file“ abrufen. Dieser Ansatz macht es dem mysqldump-Befehl leicht, wenn er auf die Authentizität des Datenbankbenutzers und des Passworts verweisen muss. Sie müssen den Pfad zur my.cnf-Datei genau angeben und nicht nur das Symbol „~“ verwenden. Betrachten Sie die folgende Implementierung in der crontab-Datei:

30 22 * * *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

In diesem Beispiel wird crontab jeden Tag um 22:30 Uhr ausgeführt, um eine gesicherte gzip-Komprimierung der MySQL-Datenbank zu erstellen.

Schlussbemerkung

Dieser Artikel befasste sich mit Sicherungsmechanismen für lokale Datenbanken über das Sicherungsverzeichnis „/var/www_my_backups“. Da Sie jetzt verstehen, wie der Backup-Prozess abläuft, sollten Sie höher skalieren und anfangen, über Offsite-Backups nachzudenken. Ein praktischerer Ansatz ist jedoch die SFTP-Zugriffskonfiguration, die auf dieses „/var/www_my_backups“-Sicherungsverzeichnis verweist.

Mit einer solchen Konfiguration ist es möglich, einen SFTP-Cron-Job über einen Remote-Server zu erstellen, um eine Kopie dieser lokal gespeicherten Datenbankdateien für die Versicherungsspeicherung nachts und täglich abzurufen.

Zum Abschluss dieses großartigen Artikelleitfadens sind Sie nun ein stolzer Meister der Sicherungsszenarien für MySQL-Datenbanken, der Wiederherstellung von Datenbanksicherungen und der Automatisierung der Datenbanksicherung. Sie sollten jetzt Vertrauen fassen und sicher sein, Cron-Jobs zu verwenden, um Ihre MySQL-Datenbank-Backup-Automatisierung zu planen und zu handhaben. Die Automatisierungszeitpläne müssen nicht täglich sein, da sie auch wöchentlich und monatlich sein können.