Maison > base de données > tutoriel mysql > le corps du texte

MySQL - cas de code graphique de récupération incrémentielle de données de base de données

黄舟
Libérer: 2017-03-09 11:27:20
original
1416 Les gens l'ont consulté

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

2. Idées principales et principes

  • 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

3. Diagramme de processus

4. Processus de fonctionnement

1, Données simulées.


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);
Copier après la connexion


2. Commande complète


# 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文件及位置点信息
Copier après la connexion


3. Continuez à insérer des données et supprimez la base de données


mysql> insert student values(6,'xiaoming',20);
 
mysql> insert student values(6,'xiaohong',20); 

此时误操作,删除了test数据库
mysql> drop database test;
Copier après la connexion

À 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


4. Afficher le fichier binlog nouvellement ajouté après la sauvegarde

.

# 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;
Copier après la connexion

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


5 Déplacez le fichier binlog, lisez le sql et supprimez l'instruction drop

<. 🎜>

# cp /data/3306/mysql-bin.000003 /server/backup/
# mysqlbinlog -d test mysql-bin.000003 >003bin.sql
# 用vim编辑文件,剔除drop语句
Copier après la connexion

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


6. Récupérer les données


# 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 |
+----+----------+-----+
完成
Copier après la connexion


5. Résumé


  • Convient pour réparer les erreurs de fonctionnement causées par des instructions SQL artificielles ou des situations de veille chaude sans réplication maître-esclave, etc.

  • Les conditions de récupération doivent être complètes et incrémentielles pour toutes les données

  • Il est recommandé d'arrêter les mises à jour externes pendant la récupération, c'est-à-dire qu'il est interdit de mettre à jour la base de données

  • Restaurez d'abord le volume complet, puis restaurez les journaux incrémentiels après le temps de sauvegarde complète dans les fichiers SQL dans l'ordre, puis supprimez les instructions SQL problématiques dans le fichier (vous peut également utiliser des points d'heure et de localisation), puis restaurer dans la base de données



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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal