Récupération de données Mysql Binlog: suppression accidentelle de la base de données _Mysql

2020-02-14

Récupération des données du journal du bac de mon journal: supprimer accidentellement la base de données

Avant-propos: J'ai accidentellement supprimé un schéma de base de données de Mysql sur la machine de test. Comme il s'agit d'une machine de test, je n'ai pas effectué de sauvegarde. Maintenant, je restaure la base de données précédente en utilisant la méthode de journal MySQL Bin.

Bien entendu, la condition préalable à la récupération des données du journal Bin est que la fonction de journal Bin ait été activée. Si vous n'avez pas effectué de sauvegarde des données ou ouvert le journal du journal Bin, vous devrez peut-être envisager des instantanés et d'autres méthodes de restauration du point de vue du système.

Le journal de bac est couramment utilisé pour la sauvegarde et la récupération incrémentielles des données, ainsi que pour la réplication maître-esclave de la base de données. S'il n'est pas activé, vous pouvez l'ouvrir de la manière suivante:

1. Activez la fonction binlog de mysql

mysql prend en charge la sauvegarde incrémentielle, mais vous devez activer la fonction de journal bin de mysql.

Modifiez le fichier de configuration mysql. linux est /etc/my.cnf, windows est le répertoire d'installation de mysql /my.ini
Ajoutez une ligne de code log-bin sous [mysqld], comme suit:


 # Replication Master Server (par défaut)
 # la journalisation binaire est requise pour la réplication
 log-bin = mysql-bin

 # format de consignation binaire - mixte recommandé
 binlog_format = mixte.
 
 

2, vérifiez l'état du journal binaire comme suit: est-il activé?

mysql> affiche des variables comme 'log _%';

3. Affichez tous les fichiers journaux binaires:

mysql> affiche les journaux de bibliothèque;


 mysql> afficher les journaux binaires;
 + ------------------ + ----------- +
 | Log_name | File_size |
 + ------------------ + ----------- +
 | mysql-bin.000001 | 201 |
 | mysql-bin.000002 | 351 |
 | mysql-bin.000003 | 276 |
 | mysql-bin.000004 | 201 |
 | mysql-bin.000005 | 16509 |
 
 

4, Mysql affiche le journal des opérations du fichier journal binaire

#mysqlbinlog --start-position = 0 /mydata/data/mysql-bin.000089


 [root @ test mysql] # mysqlbinlog --start-position = 0 --stop-position = 500 mysql-bin.000091
 Attention: option 'position de départ': valeur non signée 0 ajustée à 4
 / *! 50530 SET @@ SESSION.PSEUDO_SLAVE_MODE = 1 * /;
 / *! 40019 SET @@ session.max_insert_delayed_threads = 0 * /;
 / *! 50003 SET @OLD_COMPLETION_TYPE = @@ COMPLETION_TYPE, COMPLETION_TYPE = 0 * /;
 DELIMITER / *! * /;
 # à 4
 # 151022 18:00:43 id serveur 1 end_log_pos 107 Démarrage: binlog v 4, serveur v 5.5.38-log créé 151022 18:00:43 au démarrage
 # Attention: ce binlog est en cours d'utilisation ou n'a pas été fermé correctement.
 ROLLBACK / *! * /;
 BINLOG '
 y7MoVg8BAAAAZwAAAGsAAAABAAQANS41LjM4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 AAAAAAAAAAAAAAAAAADLsyhWEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA ==
 '/ *! * /;
 # à 107
 # 151022 23:27:50 id serveur 1 end_log_pos 198 Requête thread_id = 2 exec_time = 0 error_code = 0
 SET TIMESTAMP = 1445527670 / *! * /;
 SET @@ session.pseudo_thread_id = 2 / *! * /;
 SET @@ session.foreign_key_checks = 0, @@ session.sql_auto_is_null = 0, @@ session.unique_checks = 0, @@ session.autocommit = 1 / *! * /;
 SET @@ session.sql_mode = 1608515584 / *! * /;
 SET @@ session.auto_increment_increment = 1, @@ session.auto_increment_offset = 1 / *! * /;
 / *! \ C utf8 * // *! * /;
 SET @@ session.character_set_client = 33, @@ session.collation_connection = 33, @@ session.collation_server = 8 / *! * /;
 SET @@ session.lc_time_names = 0 / *! * /;
 SET @@ session.collation_database = DEFAULT / *! * /;
 DROP SCHEMA IF EXISTS `pandora` 
 / *! * /;
 # à 198
 # 1510223:27:50 id serveur 1 end_log_pos 346 Requête thread_id = 2 exec_time = 0 error_code = 0
 
 

5. Récupérer des données via le journal de la corbeille. Comme tout mon schéma a été supprimé et non sauvegardé, le journal de la corbeille a été ouvert, donc la corbeille historique -log est exécuté à nouveau et restauré par erreur dans la version précédente (j'ai un total de 91 fichiers ici, traitement par lots): (9999999999999: c'est pour éviter d'avoir à trouver le début de chaque fichier journal bin-log Position finale, définir un nombre infini, simplifier l'opération.)


 #mysqlbinlog /var/lib/mysql/mysql-bin.000001 --start-position = 0 --stop-position = 9999999999999 | mysql -uroot -p123456
 #mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position = 0 --stop-position = 9999999999999 | mysql -uroot -p123456
 #mysqlbinlog /var/lib/mysql/mysql-bin.000003 --start-position = 0 --stop-position = 9999999999999 | mysql -uroot -p123456
 ...
 
 

La conclusion est donc:

      
  1. 1. N'oubliez pas de sauvegarder régulièrement;
  2.   
  3. 2. S'il y a une sauvegarde, la récupération sera plus rapide. Vous pouvez effectuer des sauvegardes incrémentielles à partir du moment de la sauvegarde. Vous n'avez pas besoin d'exécuter les 91 fichiers à partir de zéro. Rapide;
  4.   
  5. 3. N'oubliez pas d'ouvrir le journal Bin-log. Si vous ne faites pas de sauvegarde, vous pouvez également le restaurer via le journal Bin-log.
  6.   
  7. 4. Soyez prudent.
  8. Autre:

    1. Il existe également sql_log

    mysql> affiche des variables comme 'sql_log _%';

    Myql ouvre et ferme le journal binaire sql:
    mysql> set sql_log_bin = 0; // fermer
    définir la session sql_log_bin = 0;

    2. Rechercher l'emplacement du fichier:

    trouver / -name my.cnf

    3, Linux affiche le chemin complet du répertoire actuel

    commande pwd:
    / var / lib / mysql

    4. Vérifiez le journal binaire actuel:

    mysql> afficher l'état du maître;

    5. Définissez les jours de restauration pour les journaux binaires dans my.cnf / my.ini:

    expire_logs_days = 7

    6. Afficher le journal des bacs du maître


     mysql> afficher les journaux principaux;
     + ----------------- + ----------- +
     | Log_name | File_size |
     + ----------------- + ----------- +
     | log-bin.000001 | 98 |
     + ----------------- + ----------- +
     1 rangée en jeu (0,00 sec)
     ---------------------
     
     

    Ce qui précède est l'intégration détaillée de la récupération de données Binlog de Mysql introduite par Xiaobian à tout le monde. J'espère que cela sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message. Xiaobian vous répondra à temps. Merci beaucoup pour votre soutien au site!

www.xd1998.com@2001-2030Partage De Technologie