Heim  >  Artikel  >  Datenbank  >  MySQL – grafisches Codebeispiel für die inkrementelle Datenwiederherstellung einer Datenbank

MySQL – grafisches Codebeispiel für die inkrementelle Datenwiederherstellung einer Datenbank

黄舟
黄舟Original
2017-03-09 11:27:201410Durchsuche

Dieser Artikel stellt den grafischen Codefall der inkrementellen Datenwiederherstellung von MySQL-Datenbanken vor

Nutzungsszenarien

  • Die MySQL-Datenbank wird jeden Tag um Null Uhr automatisch vollständig vorbereitet

  • Eines Tages um 9 Uhr morgens ließ Zhang San versehentlich eine Datenbank fallen

  • Wir müssen Daten durch vollständige Datendateien und inkrementelle Binlog-Dateien wiederherstellen

2. Hauptideen und Prinzipien

  • Verwenden Sie die in der vollständigen SQL-Datei aufgezeichnete CHANGE MASTER-Anweisung, die Binlog-Datei und ihre Speicherortinformationen, um den inkrementellen Teil der Binlog-Datei zu finden

  • Verwenden Sie den Befehl mysqlbinlog, um die obige Binlog-Datei in eine SQL-Datei zu exportieren, und entfernen Sie die Drop-Anweisung

  • Exportieren Sie die SQL-Datei über die vollständige Datei und die inkrementelle Binlog-Datei kann vollständige Daten wiederherstellen

3. Prozessdiagramm

4. Simulierte Daten


CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `age` tinyint(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `index_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 

mysql> insert student values(1,'zhangsan',20); 
mysql> insert student values(2,'lisi',21); 
mysql> insert student values(3,'wangwu',22);


2. Vollständiger Befehl


# mysqldump -uroot -p -B -F -R -x --master-data=2 test|gzip >/server/backup/test_$(date +%F).sql.gz

参数说明:
-B 指定数据库
-F 刷新日志
-R 备份存储过程等
-x 锁表
--master-data 在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息


3. Geben Sie weiterhin Daten ein und löschen Sie die Datenbank


Zu diesem Zeitpunkt, zwischen der vollständigen Vorbereitung und dem Moment der Fehlbedienung, Die vom Benutzer geschriebenen Daten befinden sich im Binlog und müssen wiederhergestellt werden
mysql> insert student values(6,'xiaoming',20);
 
mysql> insert student values(6,'xiaohong',20); 

此时误操作,删除了test数据库
mysql> drop database test;



4 Sehen Sie sich die neu hinzugefügte Binlog-Datei nach der Sicherung an


Dies ist der Speicherort der Binlog-Datei zum Zeitpunkt der vollständigen Vorbereitung, dh Zeile 107 von mysql-bin.000003, also die Daten in der Binlog-Datei vor dieser Datei bereits in dieser vollständigen SQL enthalten. Die Datei ist
# cd /server/backup/
# ls
test_2017-03-04.sql.gz
# gzip -d test_2017-03-04.sql.gz 
# grep CHANGE test_2017-03-04.sql 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;



5. Verschieben Sie die Binlog-Datei, lesen Sie die SQL und entfernen Sie die Drop-Anweisung


# cp /data/3306/mysql-bin.000003 /server/backup/
# mysqlbinlog -d test mysql-bin.000003 >003bin.sql
# 用vim编辑文件,剔除drop语句
Die Binlog-Datei muss vor der Wiederherstellung der vollständigen Daten verschoben werden. Andernfalls werden während des Wiederherstellungsprozesses weiterhin Anweisungen in das Binlog geschrieben, was schließlich den inkrementellen Wiederherstellungsdatenteil verursacht verwirrend werden



6. Daten wiederherstellen


# mysql -uroot -p <test_2017-03-04.sql 
# mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan |  20 |
|  2 | lisi     |  21 |
|  3 | wangwu   |  22 |
+----+----------+-----+
//此时恢复了全备时刻的数据
//然后使用003bin.sql文件恢复全备时刻到删除数据库之间,新增的数据
# mysql -uroot -p test<003bin.sql <span style="color: #3366ff;" data-mce-style="color: #3366ff;"><-需要指定恢复的数据库
</span># mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan |  20 |
|  2 | lisi     |  20 |
|  3 | wangwu   |  20 |
|  4 | xiaoming |  20 | 
|  5 | xiaohong |  20 |
+----+----------+-----+
完成


5. Zusammenfassung


    Geeignet für die Behebung von Fehlbedienungen, die durch künstliche SQL-Anweisungen oder Hot-Standby-Situationen ohne Master-Slave-Replikation usw. verursacht wurden.
  • Die Wiederherstellungsbedingungen müssen für alle Daten vollständig und inkrementell sein
  • Es wird empfohlen, externe Aktualisierungen während der Wiederherstellung zu stoppen, das heißt, es ist so Es ist verboten, die Datenbank zu aktualisieren
  • Zuerst das gesamte Volume wiederherstellen, dann die inkrementellen Protokolle nach der vollständigen Sicherungszeit in der Reihenfolge in SQL-Dateien wiederherstellen, dann die problematischen SQL-Anweisungen in der Datei löschen (Sie kann auch Zeit- und Ortspunkte verwenden) und dann in der Datenbank wiederherstellen


Das obige ist der detaillierte Inhalt vonMySQL – grafisches Codebeispiel für die inkrementelle Datenwiederherstellung einer Datenbank. 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