web-dev-qa-db-fra.com

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

Je tente de configurer une réplication pour une grande (120 Go) de base de données MySQL et j'ai foiré.

Je fermai le maître, copié les fichiers de données et redémarré le maître. Maintenant, j'ai mis en place l'esclave et j'ai commencé, et je me rends compte que j'ai négligé d'obtenir le MASTER_LOG_FILE et MASTER_LOG_POS valeurs nécessaires à la réplication de configuration.

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

question connexe :

  • que se passe-t-il si vous définissez le MASTER_LOG_POS à un point précédent dans le temps?
  • Suis-je correct pour supposer que les requêtes en double seront exécutées, éventuellement entraînant des données en double?

éditer

J'ai enquêté sur la commande mysqlbinlog et découvrit 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

La sortie ressemble à quelque chose comme 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 suis pas sûr.

4
Kryten

Espérons que vous n'avez pas encore commencé MySQLD sur l'esclave.

Il arrive simplement qu'une position binlog est également la taille de la binlog à la fin de chaque événement binlog. Dans votre cas, vous pouvez utiliser le dernier binlog que les vues esclaves, que je peux assumer est mysql-bin.000006. Obtenez le fichier de fichiers et utilisez-le comme position.

Par conséquent, sur l'esclave que vous couriez

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 cela devrait le faire !!!

J'ai discuté de la position de Binlog étant le fichier ci-dessus avant

Vous avez également demandé

que se passe-t-il si vous définissez le Master_Log_Pos sur un point précédent à temps?

Oui, il rejouera ces événements Binlog et causera des problèmes.

4
RolandoMySQLDBA