Cố gắng hiểu TÌNH TRẠNG SHOW SLAVE trong MySQL


11

Tôi có một thiết lập sao chép Master-Slave và có vẻ như nó đang chạy tốt. Dưới đây là kết quả của SHOW SLAVE STATUSlệnh:

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:

Tôi muốn hiểu thêm về Relay_Log_File, Relay_Log_PosRelay_Master_Log_File.

Câu hỏi của tôi là:

  • Có đúng là tệp nhật ký chuyển tiếp là tệp đang được đọc và lưu trữ cục bộ để sao chép không?

  • Thế còn relay_master_log_filesau đó; nó khác với như Master_Log_Filethế nào?

  • Cả hai giá trị này là gì , viz. , Read_Master_Log_PosRelay_Log_Pos? Tại sao chúng hiển thị ngay cả khi bản sao đã hoàn thành và đồng bộ?

  • Có đúng là các tệp này ở định dạng nhị phân, và do đó tôi không thể xem chúng?

Câu trả lời:


8

Tôi muốn hiểu thêm là Relay_Log_File, Relay_Log_Pos và Relay_Master_Log_File.

Từ SHOW SLAVE STATUS\G, nhận hai giá trị

  • Relay_Log_File : Nhật ký chuyển tiếp hiện tại chấp nhận các mục mới trong quá trình sao chép
  • Relay_Log_Pos : Vị trí hiện tại của nhật ký chuyển tiếp hiện tại chấp nhận các mục mới trong quá trình sao chép
  • Relay_Master_Log_File : Tệp nhật ký chuyển tiếp chứa câu lệnh SQL được thực hiện thành công cuối cùng trên Master đã được thực thi trên Slave.
  • Master_Log_File: Nhật ký trên Master tương ứng với tệp nhật ký chuyển tiếp hiện tại và vị trí nhật ký chuyển tiếp hiện tại

Các tập tin ở dạng nhị phân nên không thể xem chúng đúng

Có, bạn có thể xem nhật ký chuyển tiếp. Vì chúng có cấu trúc giống như nhật ký nhị phân thông thường, chỉ cần chạy chương trình mysqlbinlog . Ví dụ: để xem SQL trong bất kỳ bản ghi chuyển tiếp nào của bạn, chẳng hạn như bản ghi cuối cùng, hãy làm điều này:

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

Bây giờ tôi đã rõ hơn về Exec_Master_Log_Pos (đây có phải là vị trí nhật ký chính thực thi) và Until_log_pose nơi dừng lại không?
newbie14

Lỗi nhỏ ở đây. Relay_Master_Log_Filelà tên của tệp nhật ký nhị phân chính chứa sự kiện gần đây nhất được thực hiện bởi luồng SQL, không phải tệp nhật ký chuyển tiếp .
crishoj

@RolandoMySQLDBA ayudame porfavor dba.stackexchange.com/questions/177277/ trộm
Ivan More Flores

8

Relay_Master_Log_Filethực sự là tên của binlog trên master chứa câu lệnh SQL cuối cùng được thực thi thành công trên Slave. Nó không phải là tên của một bản ghi chuyển tiếp trên nô lệ. Xem: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Poslà vị trí trong rơle_master_log_file mà luồng SQL nô lệ đã thực hiện tối đa. Vì vậy, trong ví dụ của bạn, db nô lệ đã thực thi tất cả các câu lệnh cho đến khi binlog mysql-bin.000001pos 10726644 trên db chính.

until_log_posthực sự chỉ được sử dụng nếu bạn bắt đầu nô lệ của mình với cú pháp START SLAVE UNTIL master_log_pos = $integer. Cú pháp đó sẽ sao chép đến vị trí đó (nó sẽ là exec_master_log_pos) và sau đó dừng lại. Thông thường bạn sẽ chỉ làm điều này nếu bạn muốn sao chép đến một điểm cụ thể, nhưng không làm gì thêm (như nếu câu lệnh tiếp theo là một bảng thả ngẫu nhiên hoặc một cái gì đó). Giá trị until_log_poslà 0 khi không được chỉ định, vì vậy trong trường hợp của bạn có nghĩa là sao chép sẽ tiếp tục di chuyển về phía trước.


cảm ơn bạn tôi đang nhận được thậm chí rõ ràng hơn bây giờ. Bất cứ điều gì khác để theo dõi bây giờ?
newbie14
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.