Restauration à partir binlog ne fait rien
Bonjour,
Je suis en train de tester des scénarios de sauvegarde / restauration de nos bases mysql.
J'essaye de restaurer un fichier binlog qui contient des instructions d'insert.ion
Dans l'exemple ci-dessous :
- je switch les binlog
- je purge les binlog
- j'insère une données dans une table
- je truncate la table
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| mysql> show binary logs;
+----------------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+----------------------+-----------+-----------+
| localhost-bin.000017 | 196 | No |
+----------------------+-----------+-----------+
1 row in set (0.00 sec)
mysql> use tmatt;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> INSERT INTO test_restauration(message,created_at) VALUES('TEST - RESTAURATION AFTER MYSQLDUMP TOTO',NOW());
Query OK, 1 row affected (0.03 sec)
mysql> select * from test_restauration;
+----+------------------------------------------+---------------------+
| id | message | created_at |
+----+------------------------------------------+---------------------+
| 1 | TEST - RESTAURATION BEFORE MYSQLDUMP | 2022-01-21 10:32:04 |
| 2 | TEST - RESTAURATION AFTER MYSQLDUMP TOTO | 2022-01-21 11:24:44 |
+----+------------------------------------------+---------------------+
2 rows in set (0.00 sec)
mysql> truncate table test_restauration;
Query OK, 0 rows affected (0.08 sec)
mysql> select * from test_restauration;
Empty set (0.00 sec) |
Ensuite, je mets de côté le fichier binlog pour analyser les positions de l'insertion du record 2 et du truncate (pas grave dans mon exemple, je sais que je vais perdre le record 1 mais je considère que celui-ci sera restauré à partir d'une sauvegarde FULL)
Code:
[root@tmysql test_backup]# mysqlbinlog -u${MYSQL_USER} -h${MYSQL_HOST} --read-from-remote-server --raw localhost-bin.000017
Ensuite, je veux lire le fichier pour voir les positions des instructions pour ne restaurer que l'instruction DML insert et pas le truncate.
Comme ceci, je vois l'instruction à restaurer et donc le range de position à configurer :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
[root@tmysql test_backup]# mysqlbinlog -v /tmp/test_backup/localhost-bin.000017
[...]
BINLOG '
7InqYRMBAAAASAAAAK8BAAAAANgAAAAAAAEABXRtYXR0ABF0ZXN0X3Jlc3RhdXJhdGlvbgADAw8S
A/8AAAABAQACAQhEJnje
7InqYR4BAAAAVgAAAAUCAAAAANgAAAAAAAEAAgAD/wACAAAAKFRFU1QgLSBSRVNUQVVSQVRJT04g
QUZURVIgTVlTUUxEVU1QIFRPVE+Zq+q2LE/rtW4=
'/*!*/;
### INSERT INTO `tmatt`.`test_restauration`
### SET
### @1=2
### @2='TEST - RESTAURATION AFTER MYSQLDUMP TOTO'
### @3='2022-01-21 11:24:44'
# at 517
[...] |
Quand je tente de restaurer à partir des positions trouvées je n'ai rien dans la table :
Code:
1 2
|
[root@tmysql test_backup]# mysqlbinlog --start-position=4 --stop-position=625 /tmp/test_backup/localhost-bin.000017 | mysql -u${MYSQL_USER} -h${MYSQL_HOST} tmatt |
J'avais au préalable ajouter un autre record dans la table pour valider que je n'allais pas jusqu'au truncate :
Code:
1 2 3 4 5 6 7 8
|
mysql> select * from test_restauration;
+----+--------------------------------------------+---------------------+
| id | message | created_at |
+----+--------------------------------------------+---------------------+
| 1 | TEST - RESTAURATION AFTER MYSQLDUMP TOTO 2 | 2022-01-21 11:38:33 |
+----+--------------------------------------------+---------------------+
1 row in set (0.00 sec) |
Seulement, mon enregistrement perdu [TEST - RESTAURATION AFTER MYSQLDUMP TOTO] n'est pas restauré.
Pouvez-vous m'aider s'il vous plait,
Merci à vous,
Matt