Maison > Article > base de données > Mysql combine sauvegarde + binlog pour restaurer les données d'opération supprimées accidentellement
Combinez sauvegarde + binlog pour restaurer les données.
Scénario : Tous les préparatifs ont été effectués hier soir, mais ce matin, l'utilisateur a accidentellement supprimé une table.
Solution : Il n'est pas recommandé de restaurer directement dans l'environnement de production d'origine. Il est recommandé de restaurer l'intégralité de la base de données + les logs sur une autre machine puis de l'importer dans l'environnement de production.
1) Créer une table
select now(); create table itpuxfg1 ( `id` int(10) unsigned not null auto_increment, `name` varchar(16) not null, `sex` enum('m','w') not null default 'm', `age` tinyint(3) unsigned not null, primary key (`id`) ) engine=innodb default charset=utf8; insert into itpux.itpuxfg1(`name`,`sex`,`age`) values ('itpux1','w',21), ('itpux2','m',22), ('itpux3','w',23), ('itpux4','m',24), ('itpux5','w',25); commit; select * from itpux.itpuxfg1;
2) Faire une sauvegarde logique
mysqldump -uroot -p -F -R --all-databases > alldb_bak.sql
3) Simuler les opérations commerciales dans le matin
show master status; -- 154 select now(); -- 2018-04-27 06:27:40 update itpux.itpuxfg1 set name='itpux04' where id=4; commit; select * from itpux.itpuxfg1; select now(); -- 2018-04-27 06:28:03 update itpux.itpuxfg1 set name='itpux05' where id=5; commit; select * from itpux.itpuxfg1; show master status; -- 890
4) Suppression accidentelle à midi
select now(); -- 2018-04-27 06:29:00 drop table itpuxfg1; select * from itpux.itpuxfg1; show master status; -- 1078
5) Restaurer sur une autre machine (mon cas est local, la production ne doit pas être locale)
afficher l'état du maître ; utilisez ce nom de fichier pour sauvegarder le journal binlog requis
--n'oubliez pas de copier le journal binlog
afficher les événements du journal binlog dans 'itpuxdb-binlog.000003';
mysqlbinlog itpuxdb-binlog.000003 |grep "DROP TABLE"
mysqlbinlog itpuxdb-binlog.000003 |grep "itpuxfg1" (Veuillez faire la distinction entre deux versions différentes du journal )
Démo :
Supprimer la base de données de suppression de la bibliothèque itpux itpux ;
Restaurer :
Créez d'abord la base de données :
mysql> create database itpux default Character Set utf8 -- Si les conditions ne sont pas claires, il est recommandé d'interroger la base de données d'origine show create; base de données mysql;
mysql -uroot -p -o itpux
-- Après récupération, les enregistrements mis à jour ce matin sont introuvables
mysql> tables;
-- Avant la récupération incrémentielle de la suppression de table via le journal binlog
[root@mysqldb binlog]# mysqlbinlog -vv --start-position= 219 --stop-position= 913 --database=itpux itpuxdb-binlog.000001 >sa.sql
--Restaurer cette table dans la base de données d'origine
Sauvegarder cette table à partir d'une autre base de données d'abord
mysqldump -uroot -p itpux itpuxfg1 > sa.sql
Restaurer directement la bibliothèque de production (les tables de la bibliothèque d'origine ont été supprimées)
mysql - uroot -p itpux
mysql> select * from itpuxfg1;
1) Restaurer cette table dans la base de données source
mysqldump -uroot - p itpux itpuxfg1 >sa.sql
Recommandations associées :
Comment restaurer une base de données supprimée MySQL sans sauvegarde
Réplication MySQL + récupération d'instantané Test expérimental de suppression accidentelle
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!