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语句
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!