Maison  >  Article  >  base de données  >  Comment récupérer des données supprimées accidentellement dans MySQL

Comment récupérer des données supprimées accidentellement dans MySQL

coldplay.xixi
coldplay.xixioriginal
2020-10-13 17:42:5418699parcourir

Méthode MySQL pour récupérer les données supprimées accidentellement : recherchez d'abord la mauvaise instruction dans le journal binaire ; puis restaurez le journal binlog ; enfin restaurez-le dans la base de données, le code est [# mysql -uroot -p -f ids < data.sql 】.

Comment récupérer des données supprimées accidentellement dans MySQL

Méthode MySQL pour récupérer les données supprimées accidentellement :

Trouver le binlog

La condition préalable à la récupération des données est que le binlog de Mysql doit être activé. Si le binlog n'est pas activé, veuillez ignorer ce document. Si le journal binlog est activé, vous pouvez vérifier le fichier de configuration Mysql. L'emplacement du journal se trouve généralement dans le répertoire /var/lib/mysql ou dans le répertoire de date où il a été compilé et installé. Vous pouvez également vous connecter à Mysql et utiliser des commandes pour l'afficher.

# cat /etc/my.cnf
log_bin=mysql-bin
# mysql -uroot -p
Enter password:
mysql> show variables like&#39;log_bin%&#39;;
+---------------------------------+--------------------------------------------------+
| Variable_name                   | Value                                            |
+---------------------------------+--------------------------------------------------+
| log_bin                         | ON                                               |
| log_bin_basename                | /home/programs/mysql-5.6.26/data/mysql-bin       |
| log_bin_index                   | /home/programs/mysql-5.6.26/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                              |
| log_bin_use_v1_row_events       | OFF                                              |
+---------------------------------+--------------------------------------------------+
5 rows in set (0.00 sec)
# ll /home/programs/mysql-5.6.26/data/mysql-bin*
-rw-rw---- 1 mysql mysql 343629748 Oct 13 22:09 /home/programs/mysql-5.6.26/data/mysql-bin.000001
-rw-rw---- 1 mysql mysql        19 Sep 23 17:11 /home/programs/mysql-5.6.26/data/mysql-bin.index

S'il existe plusieurs journaux binlog, vous pouvez également afficher le journal binaire actuel et couper les journaux binlog sous la ligne de commande Mysql. Une fois le journal binaire coupé et visualisé à nouveau, vous verrez que le nouveau journal est écrit dans le nouveau fichier binlog.

mysql> show master status;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 343629748 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

2. Recherchez la mauvaise instruction dans le journal binlog

Vous pouvez trouver le moment où la mauvaise instruction a été exécutée dans le journal binlog et restaurer les journaux binlog. avant et après la mauvaise instruction en tant que SQL. Vous pouvez également ignorer cette étape et restaurer directement l'intégralité du journal binlog sur SQL, puis ouvrir le fichier SQL et supprimer l'instruction d'erreur.

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids mysql-bin.000001 | grep --ignore-case -A3 -B4 &#39;错误的sql语句&#39;

3. Restaurer le journal binlog

Utilisez la commande mysqlbinlog pour restaurer directement le journal binlog en tant que script SQL, et vous pouvez spécifier l'heure de début et de fin. Si plusieurs journaux binlog sont générés depuis la dernière sauvegarde (il est recommandé d'actualiser le journal binlog pendant la sauvegarde) jusqu'au moment de la récupération, exportez-les vers SQL dans l'ordre de petit à grand, puis importez-les dans la base de données dans l'ordre.

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids --start-datetime &#39;2016-10-11 15:22:53&#39; mysql-bin.000001 > /home/stack/data.sql

Dans la commande ci-dessus, utilisez -d ids pour spécifier la base de données à restaurer. Si vous souhaitez restaurer les données au niveau de la table, exportez-les vers SQL, puis filtrez-les avec grep.

# more data.sql | grep --ignore-case -E &#39;insert|update|delete&#39; | grep table

4. Restaurer dans la base de données

Lors de la restauration des données, il peut y avoir des erreurs de données en double. Il est recommandé d'utiliser le paramètre -f pour l'ignorer.

# mysql -uroot -p -f ids < data.sql

Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql(vidéo)

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!

Déclaration:
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