Cet article présente le cas de code graphique de la récupération incrémentielle de données de base de données MySQL. Les amis dans le besoin peuvent s'y référer
1 Scénarios d'utilisation
. La base de données MySQL est automatiquement entièrement préparée à zéro heure tous les jours
Un jour à 9 heures du matin, Zhang San a accidentellement laissé tomber une base de données
Nous devons récupérer les données via des fichiers de données complets et des fichiers binlog incrémentiels
Utilisez l'instruction CHANGE MASTER enregistrée dans le fichier sql complet, le fichier binlog et ses informations d'emplacement pour trouver la partie incrémentielle du fichier binlog
Utilisez la commande mysqlbinlog pour exporter le fichier binlog ci-dessus dans un fichier sql et supprimez l'instruction drop
Exporter le fichier sql via le fichier complet et le fichier binlog incrémentiel, vous peut restaurer des données complètes
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);
# 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文件及位置点信息
mysql> insert student values(6,'xiaoming',20); mysql> insert student values(6,'xiaohong',20); 此时误操作,删除了test数据库 mysql> drop database test;
À ce moment, entre la préparation complète et le moment du mauvais fonctionnement, les données écrites par l'utilisateur sont dans le binlog et doivent être restaurées
.
# 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;
Il s'agit de l'emplacement du fichier binlog au moment de la préparation complète, c'est-à-dire la ligne 107 de mysql-bin.000003, donc les données du fichier binlog avant ce fichier sont déjà inclus dans ce sql complet Le fichier est
<. 🎜>
# cp /data/3306/mysql-bin.000003 /server/backup/ # mysqlbinlog -d test mysql-bin.000003 >003bin.sql # 用vim编辑文件,剔除drop语句
Le fichier binlog doit être déplacé avant de restaurer l'intégralité des données. Sinon, les instructions continueront d'être écrites dans le binlog pendant le processus de récupération, provoquant éventuellement la partie de récupération incrémentielle des données. devenir déroutant
# 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 | +----+----------+-----+ 完成
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!