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
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
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
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
# 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
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!