DBAtlas · Atlas d'exploitation des bases de données

Restauration à un instant donné avec les binlogs : trouver et sauter la transaction erronée

MySQLSauvegarde et PITR

Commande

# 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 -p

Ce 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.

Ouvrir dans DBAtlas →

Voir aussi