Restauration à un instant donné avec les binlogs : trouver et sauter la transaction erronée
MySQLSauvegarde et PITRCommande
# 1) Find the bad event's GTID and position (narrow by time range)
mysqlbinlog --base64-output=DECODE-ROWS -vv --start-datetime='2026-10-08 20:00:00' --stop-datetime='2026-10-08 20:30:00' /var/lib/mysql/binlog.000003 | grep -B12 -iE '^(DROP|TRUNCATE)' | grep -E 'GTID_NEXT|^# at|^#[0-9]{6}|^DROP|^TRUNCATE'
# 2) Restore the backup on a separate server (the dump sets GTID_PURGED)
zcat /backup/full_2026-10-08_0200.sql.gz | mysql -h restore-db -u root -p
# 3a) Replay all binlogs skipping only the bad transaction
mysqlbinlog --exclude-gtids='af6bc361-c353-11f1-8f12-f69e63ad6c0e:23' /binlogs/binlog.000003 /binlogs/binlog.000004 | mysql -h restore-db -u root -p
# 3b) Or stop right before the bad event's GTID event
mysqlbinlog --stop-position=537205 /binlogs/binlog.000003 | mysql -h restore-db -u root -pCe que fait la commande
Après la restauration de la sauvegarde, rejoue les binlogs dans l'ordre pour amener la base au point voulu. Avec GTID activé, les transactions déjà présentes dans la sauvegarde sont sautées automatiquement ; --exclude-gtids retire uniquement l'opération erronée et conserve tous les changements qui la suivent.
Quand l'utiliser
Après un DROP / DELETE / UPDATE erroné, pour récupérer sans perdre les changements effectués entre la sauvegarde et l'incident.
Attention
Restaurez sur un serveur séparé, pas en production ; vérifiez, puis ne déplacez que la table concernée. --start/--stop-datetime sont interprétés dans le fuseau horaire de la machine qui exécute mysqlbinlog. --stop-position ne s'applique qu'au dernier fichier indiqué ; pour plusieurs fichiers, rejouez entièrement les fichiers précédents dans une commande séparée. --exclude-gtids n'est sûr que pour une opération indépendante ; si des transactions ultérieures écrivent dans la table supprimée, elles échouent aussi. Les binlogs nécessaires ne doivent pas être purgés sur la source ; gardez une rétention des binlogs supérieure à au moins un intervalle de sauvegarde.