Comment puis-je obtenir les coordonnées du journal binaire MySQL à partir des fichiers binaires ?

dba.stackexchange https://dba.stackexchange.com/questions/104927

  •  26-09-2020
  •  | 
  •  

Question

J'essaie de configurer la réplication pour une grande base de données MySQL (120 Go) et j'ai raté.

J'ai arrêté le maître, copié les fichiers de données et redémarré le maître.Maintenant, j'ai configuré l'esclave et l'ai démarré, et je me rends compte que j'ai négligé d'obtenir le MASTER_LOG_FILE et MASTER_LOG_POS valeurs nécessaires à la configuration de la réplication.

J'ai toujours une copie intacte des fichiers de données.Existe-t-il un moyen de déterminer MASTER_LOG_FILE et MASTER_LOG_POS à partir de ces fichiers ?

Question connexe :

  • que se passe-t-il si vous définissez le MASTER_LOG_POS à une époque antérieure ?
  • Ai-je raison de supposer que des requêtes en double seront exécutées, ce qui pourrait entraîner des données en double ?

Modifier

J'ai enquêté sur mysqlbinlog commande et découvert ce qui ressemble aux informations correctes en exécutant :

mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
    mysql-bin.000006 | grep end_log_pos

Le résultat ressemble à ceci :

... a whole bunch more lines ...

#150621 20:10:21 server id 1  end_log_pos 720159843     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720161877     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720162762     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164796     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164815     Stop

Je suppose que je devrais utiliser l'une de ces deux dernières positions, mais je ne sais pas laquelle.

Était-ce utile?

La solution

J'espère que vous n'avez pas encore démarré mysqld sur l'esclave.

Il se trouve qu'une position de binlog correspond également à la taille du binlog à la fin de chaque événement binlog.Dans votre cas, vous pouvez utiliser le dernier binlog vu par l'esclave, ce que je peux supposer est mysql-bin.000006.Obtenez la taille du fichier et utilisez-la comme position.

Par conséquent, sur l'esclave, vous courriez

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='repluser',
    MASTER_PASSWORD='replpassword',
    MASTER_LOG_FILE='mysql-bin.00006',
    MASTER_LOG_POS=720164815;
START SLAVE;

et ça devrait le faire !!!

J'ai déjà discuté de la position du binlog comme étant la taille du fichier.

Vous avez également demandé

que se passe-t-il si vous définissez MASTER_LOG_POS à un moment antérieur ?

Oui, cela rejouera ces événements binlog et provoquera des problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top