Próbuję zrozumieć STATUS POKAŻ SLAVE w MySQL

11

Mam konfigurację replikacji Master-Slave i wygląda na to, że działa dobrze. Poniżej znajduje się wynik SHOW SLAVE STATUSpolecenia:

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:

Chciałbym lepiej zrozumieć o Relay_Log_File, Relay_Log_Posi Relay_Master_Log_File.

Moje pytania to:

  • Czy to prawda, że ​​plik dziennika przekazywania jest tym, który jest odczytywany i przechowywany lokalnie w celu uruchomienia replikacji?

  • Co relay_master_log_filewtedy? czym różni się od Master_Log_File?

  • Jakie są obie te wartości, a mianowicie. , Read_Master_Log_PosI Relay_Log_Pos? Dlaczego są wyświetlane, mimo że replikacja jest zakończona i zsynchronizowana?

  • Czy to prawda, że ​​te pliki są w formacie binarnym, a zatem nie mogę ich wyświetlić?

nowicjusz14
źródło

Odpowiedzi:

8

Chcę dalej rozumieć plik Relay_Log_File, Relay_Log_Pos i Relay_Master_Log_File.

Od SHOW SLAVE STATUS\G, uzyskaj dwie wartości

  • Relay_Log_File : Bieżący dziennik przekazywania akceptujący nowe wpisy podczas replikacji
  • Relay_Log_Pos : Bieżąca pozycja bieżącego dziennika przekaźnika akceptującego nowe wpisy podczas replikacji
  • Relay_Master_Log_File : Plik dziennika przekazywania zawierający ostatnią pomyślnie wykonaną instrukcję SQL w Master, która została wykonana w Slave.
  • Master_Log_File: Dziennik na Master, który odpowiada bieżącemu plikowi dziennika przekazywania i bieżącej pozycji dziennika przekazywania

Pliki są binarne, więc nie można ich poprawnie wyświetlić

Tak, możesz przeglądać dzienniki przekazywania. Ponieważ mają taką samą strukturę jak zwykły dziennik binarny, wystarczy uruchomić program mysqlbinlog . Na przykład, aby wyświetlić SQL w dowolnym dzienniku przekazywania, takim jak ostatni, wykonaj następujące czynności:

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt
RolandoMySQLDBA
źródło
Jestem teraz jaśniejszy, co powiesz na Exec_Master_Log_Pos (czy jest to pozycja dziennika głównego wykonującego) i dopóki_log_pos gdzie to zatrzymać?
newbie14
Drobny błąd tutaj. Relay_Master_Log_Fileto nazwa głównego binarnego pliku dziennika zawierającego ostatnie zdarzenie wykonane przez wątek SQL, a nie plik dziennika przekazywania .
crishoj
@RolandoMySQLDBA ayudame porfavor dba.stackexchange.com/questions/177277/…
Ivan More Flores
8

Relay_Master_Log_Filejest w rzeczywistości nazwą binlogu na urządzeniu głównym zawierającym ostatnią instrukcję SQL wykonaną pomyślnie na urządzeniu podrzędnym. To nie jest nazwa dziennika przekazywania na urządzeniu slave. Zobacz: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posto pozycja w pliku przekaźnika_magazyn, do której wykonał niewolny wątek SQL. Tak więc w twoim przykładzie slave db wykonał wszystkie instrukcje aż do binlog mysql-bin.000001pos 10726644 na master db.

until_log_posjest używany tylko wtedy, gdy uruchamiasz swój slave ze składnią START SLAVE UNTIL master_log_pos = $integer. Ta składnia zostanie zreplikowana do tej pozycji (będzie to exec_master_log_pos), a następnie zatrzyma się. Zwykle robiłbyś to tylko, jeśli chcesz replikować do określonego punktu, ale nic więcej (na przykład, jeśli następna instrukcja jest przypadkowym upuszczeniem tabeli lub coś takiego). Wartość until_log_poswynosi 0, jeśli nie jest określona, ​​więc w twoim przypadku oznacza to, że replikacja będzie po prostu iść naprzód.

drogart
źródło
dziękuję, robię się jeszcze jaśniejszy. Coś jeszcze do monitorowania?
nowicjusz 14