在MySQL中使用mysqlbinlog flashback的简单教程_MySQL
简介:
mysqlbinlog flashback功能是淘宝彭立勋(http://www.penglixun.com/)的一个很强劲的作品.
主要功能: 对rows格式的binlog可以进行逆向操作.delete反向生成insert, update生成反向的update,insert反向生成delete.让dba同学们也有机会简单的恢复数据.可恢复:insert, update,delete相关的操作.
演示一下使用过程:
生成带有flashback mysqlbinlog 工具:
项止主页:http://mysql.taobao.org/index.php/Patch_source_code#Add_flashback_feature_for_mysqlbinlog
准备好MySQL-5.5.18的源码,这里用的Percona-MySQL-5.5.18源码
cd mysql-5.5.18
wget http://mysql.taobao.org/images/0/0f/5.5.18_flashback.diff
patch -p0
即可以看到了mysqlbinlog , 因这里只为要mysqlbinlog这个程序,所以编译MySQL时没加特别的参数.该工具是否具备flashback功能可以确认一下是否有 “-B” 这个参数.
开始实验:
mysql test mysql> select count(*) from pic_url; +----------+ | count(*) | +----------+ | 786476 | +----------+ 1 row in set (0.11 sec) mysql>delete from pic_url; Query OK, 786476 rows affected (22.81 sec) mysql>select count(*) from pic_url; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.03 sec)
mysql>show binary logs; ... | mysql-bin.000011 | 195001447 | | mysql-bin.000012 | 106 | +------------------+-----------+
Tips:
定位日值,一般看当前的log如果当前的log文件比较小,那么就是上一个文件至于为什么,这里就不讲了.也可以用mysqlbinlog 去实际查看确认一下.
接下来就是要找到这个delete在log中position的变化区间了.这个没什么技巧,通常使用:
./mysqlbinlog -v --base64-output=decode-rows /u1/mysql/logs/mysql-bin.000011 >11.sql
然后对11.sql文件进行搜索了表名,找到相应的节点.大表删除通常最后的stop点都在文件最后.找到节点后就可以:
./mysqlbinlog -v --base64-output=decode-rows -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011>B11.sql
同样对B11.sql这个文件验证一下.看看结尾是和预期一样.验证OK后就可以:
./mysqlbinlog -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011|mysql test
如果表比较大,则执行着比较慢.如不出错请耐心等待.执行完毕后:
mysql>select count(*) from pic_url; +----------+ | count(*) | +----------+ | 786476 | +----------+ 1 row in set (0.11 sec)
数据又恢复了.
注意:
为防止恢复报错需要把:max_allowed_packet 改到最大值1G;
mysql>set global max_allowed_packet=1024*1024*1024;
#max_allow_packet大小不够时报错如下:
ERROR 1153 (08S01) at line 403133: Got a packet bigger than ‘max_allowed_packet' bytes
恢复操作有风险,请在备库操作或是在经验丰富的同学指导下进行.
二进制文件上传不到服务器上,传到github上一个二进制文件:https://github.com/wubx/mysql-binlog-statistic/tree/master/bin 在64的位的linux系统编译的. 有需要的直接下载.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

La configuration d'un pool de connexions MySQL à l'aide de PHP peut améliorer les performances et l'évolutivité. Les étapes comprennent : 1. Installer l'extension MySQLi ; 2. Créer une classe de pool de connexions ; 3. Définir la configuration du pool de connexions ; 4. Créer une instance de pool de connexions ; Grâce au regroupement de connexions, les applications peuvent améliorer les performances en évitant de créer une nouvelle connexion à la base de données pour chaque requête.

PHP fournit les méthodes suivantes pour supprimer des données dans les tables MySQL : Instruction DELETE : utilisée pour supprimer les lignes correspondant aux conditions de la table. Instruction TRUNCATETABLE : utilisée pour effacer toutes les données de la table, y compris les ID auto-incrémentés. Cas pratique : Vous pouvez supprimer des utilisateurs de la base de données à l'aide de formulaires HTML et de code PHP. Le formulaire soumet l'ID utilisateur et le code PHP utilise l'instruction DELETE pour supprimer l'enregistrement correspondant à l'ID de la table des utilisateurs.

La page est vide après que PHP se connecte à MySQL, et la raison pour laquelle la fonction Die () échoue. Lorsque vous apprenez la connexion entre PHP et la base de données MySQL, vous rencontrez souvent des choses déroutantes ...

Php ...

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Dans l'environnement Nginx PHP MySQL construit à l'aide de l'arrière-plan Baota, comment faire le côté PC et ...

Une explication détaillée du problème de la déduction des soldes en combinaison avec des verrous et des transactions optimistes PHP dans cet article analysera en détail une déduction de solde à l'aide de PHP, de verrous optimistes et de transactions de base de données, seulement ...
