Heim >Datenbank >MySQL-Tutorial >So stellen Sie das MySQL-Protokoll wieder her

So stellen Sie das MySQL-Protokoll wieder her

coldplay.xixi
coldplay.xixiOriginal
2020-10-09 15:25:433212Durchsuche

Mysql-Protokollwiederherstellungsmethode: Geben Sie zuerst die Wiederherstellungszeit an, der Code lautet [mysqlbinlog --stop-date=""], und geben Sie dann den Wiederherstellungsspeicherort an, der Code lautet [mysqlbinlog --start-date="2020-10-". 09 9: 55:00"].

So stellen Sie das MySQL-Protokoll wieder her

Mysql-Protokollwiederherstellungsmethode:

Um Daten aus dem Binärprotokoll wiederherzustellen, müssen Sie den Pfad und den Dateinamen der aktuellen Binärprotokolldatei kennen. Der Pfad kann im Allgemeinen aus der Optionsdatei gefunden werden (d. h. my.cnf oder my.ini, je nach System). Wenn es nicht in der Optionsdatei enthalten ist, kann es beim Start des Servers als Option in der Befehlszeile angegeben werden. Die Option zum Aktivieren der binären Protokollierung ist --log-bin. Um den Dateinamen der aktuellen binären Protokolldatei zu ermitteln, geben Sie die folgende MySQL-Anweisung ein:

SHOW BINLOG EVENTS /G

Sie können auch Folgendes über die Befehlszeile eingeben:

mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS /G'

Ersetzen Sie das Passwort my_pwd durch das Root-Passwort des Servers.

1. Geben Sie die Wiederherstellungszeit an

Für MySQL 4.1.4 können Sie die Start- und Endzeit im DATETIME-Format über die Optionen --start-date und --stop-date in der mysqlbinlog-Anweisung angeben. Angenommen, Sie führen heute Morgen um 10:00 Uhr (heute ist der 20. April 2006) eine SQL-Anweisung aus, um eine große Tabelle zu löschen. Um Tabellen und Daten wiederherzustellen, können Sie die Sicherung der vorherigen Nacht wiederherstellen und Folgendes eingeben:

mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd

Dieser Befehl stellt alle Daten bis zu dem in der Option --stop-date angegebenen Datum und der Uhrzeit im DATETIME-Format wieder her. Wenn Sie mehrere Stunden später keine falsche SQL-Anweisung entdecken, möchten Sie möglicherweise die Aktivität, die später stattgefunden hat, wieder aufnehmen. Auf dieser Grundlage können Sie mysqlbinlog erneut mit Datum und Uhrzeit ausführen:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

In dieser Zeile wird die ab 10:01 Uhr protokollierte SQL-Anweisung ausgeführt. Durch die Kombination der Dump-Datei vom Abend vor der Ausführung und zwei Zeilen aus mysqlbinlog können alle Daten auf eine Sekunde vor 10:00 Uhr zurückgesetzt werden. Sie sollten die Protokolle überprüfen, um sicherzustellen, dass die Zeiten korrekt sind. Im nächsten Abschnitt wird erklärt, wie das geht.

2. Geben Sie den Wiederherstellungsspeicherort an

Sie können den Protokollspeicherort auch mit den mysqlbinlog-Optionen --start-position und --stop-position angeben, ohne Datum und Uhrzeit anzugeben. Sie haben die gleiche Wirkung wie die Optionen für Start- und Enddatum, geben jedoch eine Positionsnummer aus dem Protokoll an. Die Verwendung von Protokollspeicherorten ist eine genauere Wiederherstellungsmethode, insbesondere wenn aufgrund destruktiver SQL-Anweisungen viele Transaktionen gleichzeitig stattfinden. Um die Positionsnummer zu ermitteln, können Sie mysqlbinlog ausführen, um den Zeitraum zu ermitteln, in dem die unerwartete Transaktion durchgeführt wurde, die Ergebnisse jedoch zur Überprüfung in eine Textdatei umleiten. Die Operationsmethode lautet:

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

Dieser Befehl erstellt eine kleine Textdatei im Verzeichnis /tmp und zeigt die SQL-Anweisung an, wenn die falsche SQL-Anweisung ausgeführt wird. Sie können die Datei mit einem Texteditor öffnen und nach Aussagen suchen, die Sie nicht wiederholen möchten. Positionsnummern im Binärprotokoll sollten auskommentiert werden, wenn sie zum Stoppen und Fortsetzen von Wiederherstellungsvorgängen verwendet werden. Verwenden Sie log_pos plus eine Zahl, um die Position zu markieren. Nachdem Sie die vorherige Sicherungsdatei mithilfe der Positionsnummer wiederhergestellt haben, sollten Sie Folgendes über die Befehlszeile eingeben:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

Zeile 1 oben stellt alle Transaktionen bis zu dem Punkt wieder her, an dem sie gestoppt wurden. Die nächste Zeile stellt alle Transaktionen von der angegebenen Startposition bis zum Ende des Binärprotokolls wieder her. Da die Ausgabe von mysqlbinlog die SET TIMESTAMP-Anweisung enthält, bevor jede SQL-Anweisung protokolliert wird, spiegeln die wiederhergestellten Daten und zugehörigen MySQL-Protokolle den ursprünglichen Zeitpunkt der Transaktionsausführung wider.

1. Die MySQL-Datenbank verfügt nicht über einen inkrementellen Sicherungsmechanismus. Wenn die Datenmenge zu groß ist, ist die Sicherung ein großes Problem. Glücklicherweise bietet die MySQL-Datenbank einen Master-Slave-Sicherungsmechanismus, der tatsächlich alle Daten in der Master-Datenbank gleichzeitig in die Sicherungsdatenbank schreibt. Implementieren Sie ein Hot-Backup der MySQL-Datenbank.

2. Um ein Dual-Machine-Hot-Backup zu implementieren, müssen Sie zunächst die Versionsanforderungen des Master-Slave-Datenbankservers verstehen. Um Hot-Standby zu erreichen, muss die MySQL-Version höher als 3.2 sein. Ein weiteres Grundprinzip besteht darin, dass die Datenbankversion der Slave-Datenbank höher sein kann als die Datenbankversion des Master-Servers, jedoch nicht niedriger als die Datenbankversion des Master-Servers sein kann.

3. Richten Sie den Hauptdatenbankserver ein:

a. Überprüfen Sie zunächst, ob die Version des Hauptservers Hot Standby unterstützt. Überprüfen Sie dann, ob die Konfiguration des mysqld-Konfigurationsblocks in my.cnf (Unix-ähnlich) oder my.ini (Windows) über Log-Bin (Datenbankänderungsprotokoll aufzeichnen) verfügt, da der Replikationsmechanismus von MySQL ein protokollbasierter Replikationsmechanismus ist , Der Hauptserver muss Unterstützung für Änderungsprotokolle benötigen. Legen Sie dann die Datenbank fest, in die das Protokoll geschrieben werden soll, oder die Datenbank, in die das Protokoll nicht geschrieben werden soll. Auf diese Weise werden nur die Änderungen an der Datenbank, die Sie interessieren, in das Protokoll der Datenbank geschrieben.

server-id=1 //Die ID der Datenbank sollte standardmäßig 1 sein und muss nicht geändert werden

log-bin=log_name //Der Name der Protokolldatei in ein anderes Verzeichnis. Wenn nicht festgelegt, wird der Standard-Hostname verwendet.

binlog-do-db=db_name //Datenbank, die Protokolle aufzeichnet

binlog-ignore-db=db_name //Datenbank, die nicht aufzeichnet Protokolle

Wenn oben mehrere Datenbanken vorhanden sind, verwenden Sie „“, um sie zu trennen, und legen Sie dann das Benutzerkonto für die Synchronisierungsdatenbank fest

mysql> GRANT REPLICATION SLAVE ON *.*

-> 'repl'@'%.mydomain.com']'repl'@'%.mydomain .com'[/email]

IDENTIFIED BY 'slavepass'; 

4.0.2 以前的版本, 因为不支持 REPLICATION 要使用下面的语句来实现这个功能 

mysql> GRANT FILE ON *.* 

-> TO 

[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email] 

IDENTIFIED BY 'slavepass'; 

设置好主服务器的配置文件后重新启动数据库 

b.锁定现有的数据库并备份现在的数据 

锁定数据库 

mysql> FLUSH TABLES WITH READ LOCK;

备份数据库有两种办法一种是直接进入到 mysql 的 data 目录然后打包你需要备份数据库的文件夹,第二种是使用 mysqldump 的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库.

解除表的锁定的方法:

unlock tables;

c.查看主服务器的状态 

mysql> show master statusG; 

+---------------+----------+--------------+------------------+ 

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

+---------------+----------+--------------+------------------+ 

| mysql-bin.003 | 73 | test | manual,mysql | 

+---------------+----------+--------------+------------------+ 

记录 File 和 Position 项目的值,以后要用的。

相关免费学习推荐:mysql数据库(视频)

Das obige ist der detaillierte Inhalt vonSo stellen Sie das MySQL-Protokoll wieder her. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn