Как мне получить координаты двоичного журнала MySQL из двоичных файлов?

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

  •  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 является размером файла ранее

Вы также спрашивали

что произойдет, если вы установите MASTER_LOG_POS на более ранний момент времени?

Да, это воспроизведет эти события binlog и вызовет проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top