Der folgende Editor bringt Ihnen einen Artikel über die Anweisungen zur Datenwiederherstellung für die MySQL-Datenbank nach versehentlichem Löschen. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf
Bei der täglichen Betriebs- und Wartungsarbeit ist die Sicherung der MySQL-Datenbank von entscheidender Bedeutung! Die Bedeutung der Datenbank für die Website macht es für uns unmöglich, bei der Verwaltung von MySQL-Daten zu scheitern!
Dann werden die Leute unweigerlich Fehler machen und eines Tages wird der Fehler gemacht, die Datenbank zu löschen. ? ?
Im Folgenden finden Sie eine Erläuterung des Wiederherstellungsplans nach versehentlichem Löschen der MySQL-Datenbank.
1. Arbeitsszenario
(1) Die MySQL-Datenbank wird bei 12 automatisch vollständig gesichert: 00 jeden Abend.
(2) Eines Morgens um 9 Uhr fiel ein Kollege bei der Arbeit in Ohnmacht und ließ eine Datenbank fallen!
(3) Notfallwiederherstellung erforderlich! Für die Datenwiederherstellung können Sicherungsdatendateien und inkrementelle Binlog-Dateien verwendet werden.
2. Ideen zur Datenwiederherstellung
(1) Verwenden Sie die in der vollständigen SQL-Datei aufgezeichneten Daten CHANGE MASTER-Anweisung, Binlog-Datei und ihre Standortpunktinformationen, finden Sie den inkrementellen Teil in der Binlog-Datei.
(2) Verwenden Sie den Befehl mysqlbinlog, um die obige Binlog-Datei in eine SQL-Datei zu exportieren und entfernen Sie die Drop-Anweisung .
(3) Vollständige Daten können durch den Export von SQL-Dateien vollständiger Dateien und inkrementeller Binlog-Dateien wiederhergestellt werden.
3. Beispiel
------------- - -------------------------
Stellen Sie zunächst sicher, dass in MySQL die Binlog-Funktion aktiviert ist Fügen Sie die [ mysqld]-Block in der Datei /etc/my.cnf:
log-bin=mysql-bin
und starten Sie dann den MySQL-Dienst neu
-------------- - ------------------------
(1) Erstellen Sie eine Tabelle „Kunden“ unter der Ops-Bibliothek
mysql> use ops; mysql> create table customers( -> id int not null auto_increment, -> name char(20) not null, -> age int not null, -> primary key(id) -> )engine=InnoDB; Query OK, 0 rows affected (0.09 sec) mysql> show tables; +---------------+ | Tables_in_ops | +---------------+ | customers | +---------------+ 1 row in set (0.00 sec) mysql> desc customers; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | char(20) | NO | | NULL | | | age | int(11) | NO | | NULL | | +-------+----------+------+-----+---------+----------------+ 3 rows in set (0.02 sec) mysql> insert into customers values(1,"wangbo","24"); Query OK, 1 row affected (0.06 sec) mysql> insert into customers values(2,"guohui","22"); Query OK, 1 row affected (0.06 sec) mysql> insert into customers values(3,"zhangheng","27"); Query OK, 1 row affected (0.09 sec) mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | +----+-----------+-----+ 3 rows in set (0.00 sec)
(2) Führen Sie nun eine vollständige Sicherung durch
[root@vm-002 ~]# mysqldump -uroot -p -B -F -R -x --master-data=2 ops|gzip >/opt/backup/ops_$(date +%F).sql.gz Enter password: [root@vm-002 ~]# ls /opt/backup/ops_2016-09-25.sql.gz -----------------
Parameterbeschreibung:
-F: Protokoll aktualisieren
-R: Sicherung
gespeicherte Prozedurusw.-x: Tabelle sperren
-- Master -data: Fügen Sie die CHANGE MASTER-Anweisung, die Binlog-Datei und die Standortinformationen zur Sicherungsanweisung hinzu
-----------------
mysql> insert into customers values(4,"liupeng","21"); Query OK, 1 row affected (0.06 sec) mysql> insert into customers values(5,"xiaoda","31"); Query OK, 1 row affected (0.07 sec) mysql> insert into customers values(6,"fuaiai","26"); Query OK, 1 row affected (0.06 sec) mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | | 4 | liupeng | 21 | | 5 | xiaoda | 31 | | 6 | fuaiai | 26 | +----+-----------+-----+ 6 rows in set (0.00 sec)
(4) Die Testdatenbank wurde versehentlich gelöscht
mysql> drop database ops; Query OK, 1 row affected (0.04 sec)
(5) Sehen Sie sich die neu hinzugefügte Binlog-Datei nach der vollständigen Vorbereitung an
[root@vm-002 ~]# cd /opt/backup/ [root@vm-002 backup]# ls ops_2016-09-25.sql.gz [root@vm-002 backup]# gzip -d ops_2016-09-25.sql.gz [root@vm-002 backup]# ls ops_2016-09-25.sql [root@vm-002 backup]# grep CHANGE ops_2016-09-25.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=106;
Das heißt, Zeile 106 von MySQL -bin.000002, also vor der Datei. Die Daten in der Binlog-Datei sind bereits in dieser vollständigen SQL-Datei enthalten
(6) Verschieben Sie die Binlog-Datei und exportieren Sie sie als SQL-Datei, und Entfernen Sie die Drop-Anweisung
[root@vm-002 backup]# ps -ef|grep mysql root 9272 1 0 01:43 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 9377 9272 0 01:43 pts/1 00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock [root@vm-002 backup]# cd /var/lib/mysql/ [root@vm-002 mysql]# ls ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index mysql.sock test [root@vm-002 mysql]# cp mysql-bin.000002 /opt/backup/
Exportieren Sie die Binlog-Datei in die SQL-Datei und vim. Bearbeiten Sie sie, um die Drop-Anweisung zu entfernen
[root@vm-002 backup]# mysqlbinlog -d ops mysql-bin.000002 >002bin.sql [root@vm-002 backup]# ls 002bin.sql mysql-bin.000002 ops_2016-09-25.sql [root@vm-002 backup]# vim 002bin.sql #删除里面的drop语句
Hinweis:
in der Wiederherstellung Die Binlog-Datei muss vor der vollständigen Vorbereitung der Daten verschoben werden. Andernfalls werden während des Wiederherstellungsprozesses weiterhin Anweisungen in das Binlog geschrieben, was schließlich zu einer inkrementellen Wiederherstellung führt Datenteil wird unübersichtlich
(7) Daten wiederherstellen
[root@vm-002 backup]# mysql -uroot -p < ops_2016-09-25.sql Enter password: [root@vm-002 backup]#
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | ops | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use ops; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 0 | | 2 | guohui | 0 | | 3 | zhangheng | 0 | +----+-----------+-----+ 3 rows in set (0.00 sec)
Verwenden Sie dann die Datei 002bin.sql, um die neuen Daten zwischen dem Zeitpunkt der vollständigen Sicherung und dem Löschen wiederherzustellen Dieser Teil der Daten wurde ebenfalls wiederhergestellt! !
[root@vm-002 backup]# mysql -uroot -p ops <002bin.sql Enter password: [root@vm-002 backup]#
mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | | 4 | liupeng | 21 | | 5 | xiaoda | 31 | | 6 | fuaiai | 26 | +----+-----------+-----+ 6 rows in set (0.00 sec)
**************************************** **** ********
Abschließend noch ein paar Punkte zur Zusammenfassung: 1) Dieser Fall gilt für die Reparatur von Fehlbedienungen, die durch künstliche SQL-Anweisungen oder Hot-Standby-Situationen ohne Master-Slave-Replikation und Ausfallzeiten verursacht wurden 2) Die Wiederherstellungsbedingung ist, dass MySQL die Binlog-Protokollfunktion aktivieren muss und alle Daten vollständig vorbereitet und inkrementell sein müssen 3) Während der Wiederherstellung wird empfohlen, externe Aktualisierungen zu stoppen Das heißt, es ist verboten, die Datenbank zu aktualisieren 4) Stellen Sie zuerst das gesamte Volume wieder her, stellen Sie dann die inkrementellen Protokolle nach der vollständigen Sicherungszeit der Reihe nach in SQL-Dateien wieder her und löschen Sie dann die problematischen SQL-Anweisungen in die Datei (Sie können auch Zeit- und Ortspunkte verwenden) und dann in der Datenbank wiederherstellen.
Das obige ist der detaillierte Inhalt vonBeispielcode-Freigabe zum Datenwiederherstellungsvorgang nach versehentlichem Löschen der MySQL-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!