Çoğaltma ortamında bin günlüklerini silme


13

Çoğaltma ortamında ikili günlükleri silme hakkında bir sorum var:

1 master ve 2 slave içeren bir ortamımız var (mysql 5.5 çalışıyor) Bazen, yoğun işlem sürelerinde boşluk sorunları ile karşılaşırız, böylece bin günlük dizini dolar. Günlüklerin süresi 3 günde bir dolar. Merak ediyordum, günlüklerin tüm kutularda 3 gün boyunca saklanmasının bir nedeni var mı - usta ve her ikisi de köleler? Örneğin, günlükleri bir ustada 3 gün, ancak kölelerde 1 gün tutmak mantıklı olur mu? Bu konuda en iyi yol nedir?

Teşekkür ederim!


DBA.SE'ye hoş geldiniz. Bu soru + 1'i hak ediyor çünkü ikili log ve röle log büyümesi genellikle kabul edilmektedir ve kontrol edilmezse birçok problemin kaynağı olabilir.
RolandoMySQLDBA

Yanıtlar:


12

KÖLE

Köleleriniz Üstat değilse, kölelerin ikili kayıtlara hiç ihtiyacı yoktur. Bir Slave tarafından biriktirilen röle kayıt alanı miktarına bir sınır koyabilirsiniz. Röle günlüklerini 4G'de relay_log_space_limitkısmak için her Slave'de /etc/my/.cnf dosyasına ekleyin

[mysqld]
relay_log_space_limit=4G

ve mysql'yi yeniden başlat

Bunu ayarlayamazsanız, en azından bunu yapan SHOW SLAVE STATUS\Gve değerini Relay_Log_Space(röle günlükleri tarafından tüketilen toplam bayt sayısı) kontrol eden bir tür uyarıya sahip olmalısınız .

USTA

Üstat'a gelince, expire_logs_days1'e ayarlayabilirsiniz , ancak sizin için ciddi bir uyarı var ...

Çoğaltma bozulursa, düzeltmek için 1 gününüz vardır. Aksi takdirde, Master'daki bir ikili günlük dönebilir ve çoğaltmayı yeniden hizalamak için MASTER TO CHANGE TO komutunu çalıştıramazsınız. Ben bırakacaktı expire_logs_daysMaster 3'te.

ÖNERİ # 1

Yapacak bir gecede toplu işleminiz varsa, belki de Toplu İşlemleri SET SQL_LOG_BIN=0;Oturumun Başlangıcında Master'da çalıştırmalısınız . Bu elbette Köle'ye çoğaltılmayacak. Her iki Köleye Paralel Olarak Aynı Toplu Yükü gerçekleştirebilirsiniz.

ÖNERİ # 2

Master ikili günlük birikimini yönetmek için yapabileceğiniz bir diğer şey şudur.

SHOW SLAVE STATUS\GHer iki Kölede de koş . Şuna bak Relay_Master_Log_File. Bu, son komutu Slave'de yürütülen Master'daki ikili günlüğü temsil eder.

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.4.92.250
                Master_User: replicant
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.009677
        Read_Master_Log_Pos: 855227755
             Relay_Log_File: relay-bin.000674
              Relay_Log_Pos: 757296783
      Relay_Master_Log_File: mysql-bin.009590
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        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: 757296646
            Relay_Log_Space: 94274010765
            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: 80561
1 row in set (0.00 sec)

Bu örnekte Relay_Master_Log_File mysql-bin.009590 şeklindedir. Bundan önceki tüm ikili günlükler Ana Veriden kaldırılabilir. Bunu Üstatta çalıştırabilirsiniz:

PURGE BINARY LOGS TO 'mysql-bin.009590';

Bu, eski günlükleri siler ve çoğaltmayı yine de dokunmaya bırakır.

UYARI

İkili Günlükler, tamamlanan tüm SQL işlemlerini bir SQL deyimi veya satır değişikliği olarak seri olarak derleyen (FIFO kuyruğu gibi) dosyalardır. Geçiş günlüğü, uzak bir sunucudan (diğer adıyla Master) ikili günlük girdilerini toplayan bir dosyadır.

MySQL Çoğaltmasında

  1. Master'ın ikili günlükleri etkin olmalıdır
  2. Slave röle günlüklerini derler
  3. Geçiş günlüğündeki tüm SQL işlendiğinde silinir
  4. Bir Slave'de, bir DB Sunucusunda birden fazla röle günlüğü olduğunda, çoğaltma işleminin geride kaldığını gösterebilir, çünkü IO iş parçacığı, SQL iş parçacığının geçiş günlüklerini işleyebileceğinden daha hızlı bir Master'dan SQL toplar.
  5. Relay_log_space_limit kullanmak, çoğaltmanın birikmesini ve bir diski doldurmasını engeller. Röle günlükleri kural # 3'e göre döner
  6. Bir DB Sunucusunun hem Ana hem de Bağımlı olması mümkündür. Bir Slave'in ikili günlükleri etkinleştirmesi gereken tek durum budur. Bu senaryoda, bir DB sunucusunda hem ikili günlükleri hem de geçiş günlükleri olacaktır.

Bir Slave'e yük devretme yaparsanız ve onu bir Master yapmak istiyorsanız

  • hizmet mysql durdurma
  • log-bin=mysql-binKöle /etc/my.cnf dosyasına ekle
  • hizmet mysql başlangıç

Diğer Kölelerin çoğalmasını yeni tanıtılan Üstada kurmanız ve Slave'deki verilerin yeni tanıtılan Üstat ile eşleştiğinden emin olmanız gerekir.

GÜNCELLEME 2012-08-13 17:47 EDT

MySQL Belgeleri açık relay-logseçeneğine göre tanımlamanız gerekir. İşte nedeni:

MySQL'in sunucu seçeneklerini ayrıştırma biçimi nedeniyle, bu seçeneği belirtirseniz, bir değer sağlamanız gerekir; varsayılan taban adı yalnızca seçenek gerçekten belirtilmemişse kullanılır. --Relay-log seçeneğini bir değer belirtmeden kullanırsanız, beklenmeyen davranışlar ortaya çıkabilir; bu davranış kullanılan diğer seçeneklere, belirtildikleri sıraya ve komut satırında mı yoksa bir seçenek dosyasında mı belirtildiklerine bağlıdır. MySQL'in sunucu seçeneklerini nasıl ele aldığı hakkında daha fazla bilgi için bkz. Bölüm 4.2.3, “Program Seçeneklerini Belirleme”.


Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
Paul White 9
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.