MySQL'de SLAVE DURUMUNU GÖSTER anlamaya çalışılıyor


11

Bir Master-Slave çoğaltma kurulum var ve iyi çalışıyor gibi görünüyor. SHOW SLAVE STATUSKomutun bir sonucu aşağıdadır :

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:

Ben ilgili anlamak istiyorum Relay_Log_File, Relay_Log_Posve Relay_Master_Log_File.

Sorularım:

  • Geçiş günlük dosyasının, çoğaltmanın çalışması için yerel olarak okunan ve depolanan bir dosya olduğu doğru mu?

  • Peki ya o relay_master_log_filezaman; bundan nasıl farklı Master_Log_File?

  • Bu değerlerin ikisi de nedir, viz. , Read_Master_Log_Posve Relay_Log_Pos? Çoğaltma tamamlanmış ve eşitlenmiş olsa bile neden görünüyorlar?

  • Bu dosyaların ikili biçimde olduğu ve bu nedenle görüntüleyemediğim doğru mu?

Yanıtlar:


8

Daha fazla anlamak istiyorum Relay_Log_File, Relay_Log_Pos ve Relay_Master_Log_File.

Kimden SHOW SLAVE STATUS\G, iki değer alın

  • Relay_Log_File : Çoğaltma sırasında yeni girişleri kabul eden geçerli röle günlüğü
  • Relay_Log_Pos : Çoğaltma sırasında yeni girişleri kabul eden geçerli röle günlüğünün geçerli konumu
  • Relay_Master_Log_File : Slave üzerinde yürütülen Master'da başarıyla çalıştırılan son SQL ifadesini içeren röle günlük dosyası.
  • Master_Log_File: Master'da geçerli röle günlük dosyasına ve geçerli röle günlük konumuna karşılık gelen günlük

Dosyalar ikilidir, bu yüzden onları doğru görüntüleyemezler

Evet, röle günlüklerini görüntüleyebilirsiniz. Normal bir ikili günlükle aynı yapıya sahip olduklarından, mysqlbinlog programını çalıştırın . Örneğin, SQL'inizden sonuncusu gibi geçiş günlüklerinden herhangi birini görüntülemek için şunu yapın:

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

Şimdi daha açıkım nasıl Exec_Master_Log_Pos hakkında (bu yürütme ana günlük konumudur) ve until_log_pos nerede durdurmak için?
newbie14

Burada küçük bir hata. geçiş günlüğü dosyasını değil, SQL iş parçacığı tarafından yürütülen en son olayı içeren ana ikili günlük dosyasınınRelay_Master_Log_File adıdır .
crishoj


8

Relay_Master_Log_Fileaslında slave üzerinde başarıyla çalıştırılan son SQL ifadesini içeren master'daki binlog'un adıdır. Slave üzerindeki bir aktarma günlüğünün adı değil. Bkz. Http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posslave SQL iş parçacığının röle_master_log_dosyasında yürüttüğü konumdur. Yani örneğinizde, köle db, mysql-bin.000001ana db üzerinde binlog pos 10726644 olana kadar tüm ifadeleri yürütmüştür .

until_log_posgerçekten sadece köle sözdizimi ile başlarsanız kullanılır START SLAVE UNTIL master_log_pos = $integer. Bu sözdizimi bu konuma kadar çoğaltılır (bu olur exec_master_log_pos) ve sonra durur. Normalde bunu yalnızca belirli bir noktaya çoğaltmak istediğinizde yaparsınız, ancak başka bir şey yapmazsınız (bir sonraki ifade yanlışlıkla bir tablo düşmesi gibi bir şeyse). Belirtilmediğinde, değeri until_log_pos0'dır, bu nedenle sizin durumunuzda çoğaltma yalnızca ilerlemeye devam eder.


teşekkürler şimdi daha da netleşiyorum. Şimdi izlenecek başka bir şey var mı?
newbie14
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.