Пытаясь понять SHOW SLAVE STATUS в MySQL


11

У меня есть настройка репликации Master-Slave, и похоже, что она работает нормально. Ниже приведен результат SHOW SLAVE STATUSкоманды:

show slave STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: *.*.*.*
                  Master_User: repliV1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 10726644
               Relay_Log_File: mysqld-relay-bin.000056
                Relay_Log_Pos: 231871
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data1
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 10726644
              Relay_Log_Space: 232172
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:

Я хотел бы узнать больше о Relay_Log_File, Relay_Log_Posи Relay_Master_Log_File.

Мои вопросы:

  • Правда ли, что файл журнала ретрансляции является тем, который читается и хранится локально для запуска репликации?

  • Как насчет relay_master_log_fileтогда; чем он отличается от Master_Log_File?

  • Каковы оба этих значения, а именно. , Read_Master_Log_PosА Relay_Log_Pos? Почему они появляются, хотя репликация завершена и синхронизирована?

  • Это правда, что эти файлы в двоичном формате, и, следовательно, я не могу их просмотреть?

Ответы:


8

Я хочу понять, дальше это Relay_Log_File, Relay_Log_Pos и ​​Relay_Master_Log_File.

От SHOW SLAVE STATUS\G, получить два значения

  • Relay_Log_File : Текущий релейный журнал, принимающий новые записи во время репликации
  • Relay_Log_Pos : Текущая позиция текущего релейного журнала, принимающего новые записи во время репликации
  • Relay_Master_Log_File : Файл журнала ретрансляции, содержащий последний успешно выполненный оператор SQL на ведущем устройстве, который был выполнен на ведомом устройстве.
  • Master_Log_File: журнал на ведущем устройстве, который соответствует текущему файлу журнала реле и текущей позиции журнала реле

Файлы находятся в двоичном формате, поэтому не могут просматривать их правильно

Да, вы можете просматривать журналы реле. Поскольку они имеют ту же структуру, что и обычный двоичный журнал, просто запустите программу mysqlbinlog . Например, чтобы просмотреть SQL в любом из журналов ретрансляции, таких как последний, сделайте следующее:

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt

Теперь я прояснил, как насчет Exec_Master_Log_Pos (это позиция исполняющего главного журнала) и до_log_pos, где остановиться?
newbie14

Небольшая ошибка здесь. Relay_Master_Log_Fileимя главного двоичного файла журнала, содержащего самое последнее событие, выполненное потоком SQL, а не файл журнала ретрансляции .
crishoj


8

Relay_Master_Log_Fileна самом деле это имя binlog на ведущем устройстве, содержащее последний оператор SQL, успешно выполненный на ведомом устройстве. Это не имя релейного журнала на ведомом устройстве. Смотрите: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posпозиция в файле relay_master_log_file, до которой выполнялся подчиненный поток SQL. Таким образом, в вашем примере подчиненная БД выполняла все операторы вплоть до binlog mysql-bin.000001pos 10726644 на главной БД.

until_log_posдействительно используется, только если вы запускаете своего ведомого с синтаксисом START SLAVE UNTIL master_log_pos = $integer. Этот синтаксис будет повторяться до этой позиции (это будет exec_master_log_pos) и затем останавливаться. Обычно вы делаете это только в том случае, если хотите выполнить репликацию в конкретную точку, но не дальше (например, если следующий оператор - случайное удаление таблицы или что-то в этом роде). Значение until_log_posравно 0, когда оно не указано, поэтому в вашем случае означает, что репликация будет продолжать двигаться вперед.


спасибо, теперь я становлюсь еще яснее. Что-нибудь еще, чтобы контролировать сейчас?
newbie14
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.