Einführung Um Datenverlust in einer Produktionsumgebung zu vermeiden, wird die Datenbank normalerweise regelmäßig gesichert. Der Linux-Befehl crontab kann uns dabei helfen, die Datenbank regelmäßig zu sichern. Werfen wir zunächst einen kurzen Blick auf den crontab-Befehl. Wenn Sie wissen, wie es geht, fahren Sie bitte mit dem nächsten Inhalt fort: MySQL-Backup. Contab geplante Aufgaben Verwenden Sie crontab -e, um unsere geplanten Aufgaben zu schreiben. 0 5 * * 1 [Befehl] Die ersten fünf Zahlen stehen jeweils für Minute, Stunde, Tag, Monat und Woche und 0 8 * * * [Befehl] Erweiterungen:
MySQL-Sicherung Schneller Einstieg Hier ist meine MySQL-Datenbank ein Docker-Container. Wenn Sie jeden Abend um 8 Uhr eine geplante Aufgabe ausführen müssen, können Sie dies wie folgt schreiben. 0 8 * * * docker exec mysql_container mysqldump -uroot -proot_password Datenbankname > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql mysql_container ist der Name Ihres Datenbankcontainers Wenn Sie keine Anforderungen haben und nur ein Backup erstellen möchten, kann Ihnen der obige Befehl dabei helfen, geplante Backups durchzuführen. Kleine Fallstricke: Beim Sichern von MySQL habe ich mit Kommandos wie Crontab-Optimierung Ich empfehle nicht, die auszuführenden Befehle direkt in docker exec mysql_container mysqldump -uroot -pmypassword Datenbankname > /var/backups/mysql/$(date +%Y%m%d_%H%M%S).sql Machen Sie dann die Datei für den aktuellen Benutzer ausführbar: chmod 711 /var/backups/mysql/mysqldump.sh Führen Sie den Befehl crontab -e aus und ändern Sie ihn wie folgt: 0 20 * * * /var/backups/mysql/mysqldump.sh Dann ist dies standardisierter. MySQL-Backup-Optimierung Da SQL-Dateien relativ groß sind, werden sie im Allgemeinen komprimiert, da sonst der Speicherplatz zu groß wird. exportiere mysqldump_date=$(Datum +%Y%m%d_%H%M%S) && \ docker exec mysql_container mysqldump -uroot -pmypassword Datenbankname> /var/backups/mysql/$mysqldump_date.sql && \ gzip /var/backups/mysql/$mysqldump_date.sql finde /var/backups/mysql/ -name "*.sql" -mtime +15 -exec rm -f {} \; Datenwiederherstellung Wenn Sie versehentlich >mysql erstelle Datenbank Datenbankname; Stellen Sie dann die aktuellste Sicherung wieder her. Befehl zum Wiederherstellen der Sicherung: docker exec -i mysql_container mysql -uroot -proot_password Datenbankname < /var/backups/mysql/20200619_120012.sql Obwohl die Daten der Sicherungsdatei wiederhergestellt wurden, haben wir die Daten nach dem Sicherungszeitpunkt nicht wiederhergestellt. binlog Binlog ist ein Archivprotokoll von MySQL, das die Logik der Datenänderung aufzeichnet, z. B. das Hinzufügen von 1 zum Geldfeld der Zeile mit der ID = 3. > MySQL zeigt Binärprotokolle an; +--------------+--------------+-----------+ | Protokollname | Dateigröße | Verschlüsselt | +--------------+--------------+-----------+ | binlog.000001 | 729 | Nein | | binlog.000002 | 1749 | Nein | | binlog.000003 | 1087 | Nein | +--------------+--------------+-----------+ Zeigen Sie das aktuell geschriebene Binärprotokoll an. mysql> Masterstatus anzeigen\G; Erzeugt eine neue Binärprotokolldatei. Alle nachfolgenden MySQL-Operationen werden in die neue Binärprotokolldatei geschrieben. Normalerweise wird dieser Befehl beim Wiederherstellen von Daten zuerst ausgeführt. mysql> Protokolle leeren Binlog-Protokoll anzeigen mysql> Binlog-Ereignisse in „binlog.000003“ anzeigen; Tipps: Fügen Sie beim Initialisieren des MySQL-Containers den Parameter --binlog-rows-query-log-events=ON hinzu. Oder ändern Sie die Datei /etc/mysql/my.cnf im Container, fügen Sie den Parameter binlog_rows_query_log_events=ON hinzu und starten Sie dann den MySQL-Container neu. Dadurch wird das ursprüngliche SQL zur Binärprotokolldatei hinzugefügt. Daten wiederherstellen Nehmen Sie die Passage aus dem obigen Beispiel zurück.
Wechseln Sie zunächst nach dem Aufrufen des MySQL-Containers in das Verzeichnis /var/lib/mysql und überprüfen Sie das Erstellungsdatum der Binlog-Datei cd /var/lib/mysql ls -l ... -rw-r----- 1 mysql mysql 729 19. Juni 15:54 binlog.000001 -rw-r----- 1 mysql mysql 1749 19. Juni 18:45 binlog.000002 -rw-r----- 1 mysql mysql 1087 19. Juni 20:58 binlog.000003 ... Aus dem Dateidatum können wir ersehen, dass es sich um die Uhrzeit 21.06.2020 handelt und die letzte Aktualisierungszeit der Datei binlog.000002 18:45 Uhr ist. Daher muss das Backup um 20:00 Uhr die Daten von binlog.000002 enthalten. Format des Wiederherstellungsbefehls: mysqlbinlog [Optionen] Datei | mysql -uroot -proot_password Datenbankname Allgemeine Parameter von mysqlbinlog:
Bevor Sie die Sicherungsdaten und Binlog-Daten wiederherstellen, wird empfohlen, sich bei MySQL anzumelden und mysql> Binlog-Ereignisse in „binlog.000003“ anzeigen; +------------------+-----+----------------+-----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------+ | Logname | Pos | Ereignistyp | Server-ID | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------+ | binlog.000003 | 4 | Format_desc | 1 | 125 | Serverversion: 8.0.20, Binlogversion: 4 | | binlog.000003 | 125 | Vorherige_gtids | 1 | 156 | | | binlog.000003 | 156 | Anonymous_Gtid | 1 | 235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000003 | 235 | Abfrage | 1 | 318 | BEGIN | | binlog.000003 | 318 | Rows_query | 1 | 479 | # INSERT INTO `product_category` SET `name` = 'Bettwäsche' , `create_time` = 1592707634 , `update_time` = 1592707634 , `lock_version` = 0 | | binlog.000003 | 479 | Table_map | 1 | 559 | table_id: 139 (Hotelserver.Produktkategorie) | | binlog.000003 | 559 | Zeilen schreiben | 1 | 629 | Tabellen-ID: 139 Flags: STMT_END_F | | binlog.000003 | 629 | Xid | 1 | 660 | COMMIT /* xid=2021 */ | | binlog.000004 | 660 | Anonymous_Gtid | 1 | 739 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000004 | 739 | Abfrage | 1 | 822 | Datenbank hotel_server löschen /* xid=26 */ | +---------------+-----+----------------+-----------+-------------+-------------------------+-------------------------------------------------------------------------------------------------------------------------- Dem obigen Protokoll können wir entnehmen, dass der Vorgang mysqlbinlog --start-datetime=2020-06-19 20:00:00 --stop-position=660 /var/lib/mysql/binlog.000003 | mysql -uroot -proot_password Datenbankname Wenn Ihr Bereich die Position 822 umfasst, wird der Befehl „ Zusammenfassen Weil die geplante Sicherung von MySQL in der Produktionsumgebung eine notwendige Aufgabe ist. Es wird sehr häufig verwendet. Ich konnte es kaum erwarten, einen Blog zu schreiben. Natürlich bin ich auch für die Hilfe meiner Kollegen sehr dankbar. Das Schreiben dieses Artikels dauerte drei Tage, da ich ständig herumprobiere und Fehler mache und den Artikel ständig aktualisiere. Vermeiden Sie das Aufschreiben falscher Wissenspunkte. Wenn Ihnen das hilft, folgen Sie mir bitte! Danke. Oben finden Sie eine kurze Analyse der Details der geplanten MySQL-Sicherungsaufgabe. Weitere Informationen zur geplanten MySQL-Sicherungsaufgabe finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Verwenden von System.Drawing.Common in Linux/Docker
>>: Detaillierte Erläuterung des Organisationsstrukturdiagramms der Vue-Tree-Color-Komponente
Dieser Artikel stammt aus Tom Ewers Managewp-Blog ...
Flex-Layout ist heutzutage eine häufig verwendete...
Im Allgemeinen werden Java-Lernprogramme und Bere...
Timer-Effekte: <div> <font id='timeC...
Discuz! Forum verfügt über zahlreiche Konfiguratio...
Das Schönste, was in einer Produktionsumgebung pa...
Vor kurzem wollte ich natives JS verwenden, um ei...
Die von mir verwendete VMware Workstation Pro-Ver...
Was ist das? GNU Parallel ist ein Shell-Tool zum ...
Inhaltsverzeichnis 1. Einleitung 2. Detaillierte ...
Inhaltsverzeichnis Grundlegende HTML-Struktur Gen...
In diesem Artikel wird der spezifische Code des W...
Die EXPLAIN-Anweisung wird im MySQL-Abfrageanweis...
<Text> <div id="Wurzel"> &l...
Es handelt sich dabei ausschließlich um Webseiten...