Как мне получить координаты двоичного журнала MySQL из двоичных файлов?
-
26-09-2020 - |
Вопрос
Я пытаюсь настроить репликацию для большой (120 ГБ) базы данных MySQL и у меня все испортилось.
Я выключил мастер, скопировал файлы данных и перезапустил мастер.Теперь я настроил ведомое устройство и запустил его, и я понимаю, что я забыл получить MASTER_LOG_FILE
и MASTER_LOG_POS
значения, необходимые для настройки репликации.
У меня все еще есть нетронутая копия файлов данных.Есть ли какой-нибудь способ определить MASTER_LOG_FILE
и MASTER_LOG_POS
из этих файлов?
Связанный с этим вопрос:
- что произойдет, если вы установите
MASTER_LOG_POS
к более раннему моменту времени? - Прав ли я, предполагая, что будут выполняться повторяющиеся запросы, что, возможно, приведет к дублированию данных?
Редактировать
Я расследовал mysqlbinlog
команду и обнаружил то, что выглядит как правильная информация, выполнив:
mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
mysql-bin.000006 | grep end_log_pos
Результат выглядит примерно так:
... 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
Я предполагаю, что мне следует использовать одну из этих последних двух позиций, но я не уверен, какую именно.
Решение
Надеюсь, вы еще не запустили mysqld на ведомом устройстве.
Так уж получилось, что позиция binlog также является размером binlog в конце каждого события binlog.В вашем случае вы можете использовать последний двоичный журнал, который видит ведомое устройство, и я могу предположить, что это mysql-bin.000006
.Получите размер файла и используйте его в качестве позиции.
Следовательно, на ведомом устройстве вы бы запустили
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;
и это должно сработать !!!
Я уже обсуждал, что позиция binlog является размером файла ранее
Nov 30, 2012
: Как вы можете отслеживать, повреждены ли файлы binlog MySQL?Oct 20, 2011
: Как обработать репликацию My SQL DB Master to Master при нехватке места на диске
Вы также спрашивали
что произойдет, если вы установите MASTER_LOG_POS на более ранний момент времени?
Да, это воспроизведет эти события binlog и вызовет проблемы.