Mysql-bin dosyalarını silmek güvenli midir?


92

Ben Mysql'de MM Çoğaltma var ve kutusunda bazı boş alan gereksiz dosyaları silerek olmak sıkmak istiyorum, bu rastladım mysql-biniçindeki dosyaların /var/db/mysql/Orada bu dosyaların yüzlerce gibidir mysql-bin.000123, mysql-bin.000223vb ben yaparak MySQL çoğaltma kontrol ettikten show master statusve show slave statusbunlar Bazı mysql-bin dosyalarını belirli konumlarda kullanmak, ancak diğer tüm bin dosyalarının artık kullanılmayacakları artık. Bu durumda, çoğaltmanın işaret ettiği dosyalar dışındaki tüm bu mysql-bin dosyalarını silmek güvenli midir?

Silmek güvenli ise, o zaman kullanılmadığında bu dosyaları otomatik olarak silmek için yapabileceğim bir şey var mı?

Yanıtlar:


136

Lütfen onları işletim sisteminden silmeyin.

MySQL'in bunu senin için yapmasına izin vermelisin. İşte mysqld bunu nasıl yönetiyor:

Dosya mysql-bin.[index], mysqld'ün ürettiği ve otomatik döndürdüğü tüm ikili günlüklerin bir listesini tutar. İkili dosyaların birlikte temizlenmesi için mekanizmalar mysql-bin.[index]şunlardır:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

Bunlar, daha önce belirttiğiniz binlog veya timetamp'tan önceki tüm ikili günlükleri temizleyecektir.

Örneğin, koşarsanız

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

bu daha önce tüm ikili günlükleri siler mysql-bin.000223.

Eğer koşarsan

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

bu, 3 gün önce gece yarısından önce tüm ikili günlükleri siler.

Binlog'un otomatik olarak dönmesini ve 3 gün boyunca devam etmesini istiyorsanız, şunu ayarlayın:

mysql> SET GLOBAL expire_logs_days = 3;

sonra bunu /etc/my.cnf

[mysqld]
expire_logs_days=3

ve mysqld sizin için günlükleri siler

SLAVE DURUMUNU GÖSTER \ G

Bu kritik. Çalıştırdığınızda SHOW SLAVE STATUS\G, Master’dan iki ikili günlük göreceksiniz:

  • Master_Log_File
  • Relay_Master_Log_File

Çoğaltma çok az geciktiğinde veya hiç gecikme olmadığında bunlar genellikle aynı değerdir. Çok fazla çoğaltma gecikmesi olduğunda, bu değerler farklıdır. Sadece basitleştirmek için, ne Relay_Master_Log_Fileolduğunu seçin ve Üstada geri dönün ve koşun

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

Bu şekilde, çoğaltma kesintiye uğramaz.


1
Lütfen bir yazım hatası not edin - kısa çizgiler değil, alt çizgi: [mysqld] expire_logs_days=3(ve [mysqld]bölümü
eklemelisiniz

@changokun Bu bir yazım hatası değil. my.cnf, kısa çizgileri kabul eder. SET GLOBAL expire_logs_days = 3;MySQL istemcisinden çalışan onları kabul etmeyecektir. MySQL Dokümanlar Örnek: dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

Bu benim için çalışıyor. Soru arasındaki ... fark nedir mysql> SET GLOBAL expire_logs_days = 3;ve expire-logs-days=3içinde /etc/my.cnf.. Are aynı? Bu gereksiz mi değil mi? Ya da çalıştırmak SET GLOBAL...sonra eklemek önemlidir expire-logs-days=..? Teşekkürler.
Nino Paolo

Tüm günlükleri hızla kaldırın, açıkçası: PURGE BINARY LOGS BEFORE DATE(NOW());neden bunun için herhangi bir mantıklı varsayılan yok? Hiçbir yerde, açıklık hiçbir zaman günlük dosyasının boyutunu büyük miktarda değiştirmedi. Benim 10.0 GB günlük dosyam vardı, bu komutu çalıştırdıktan sonra mysql.bin dosya büyüklüğüm 1.6 GB'a düştü.
Michael Trouw

20

Bu gerçekten yedekleme stratejinize bağlı. İkili günlükleri çevrede tutmanın ana nedenlerinden biri, veritabanınızı 'zamanında' geri yüklemektir. Veritabanınız çökerse ve geri yüklemeyi gerektiriyorsa, en son tam yedeklemeyi geri yükler ve ardından tam yedeklemenin konumundan başlayarak ikili günlükleri oynatırsınız.

Bu nedenle, her gün tam bir yedekleme yaparsanız ve 7 günlük ikilik günlük değeriniz varsa, son 4-6 günlük ikilik günlük değerlerini silebilirsiniz. expire_logs_daysAyar ile kaç günlük ikilik günlük tutulacağını kontrol edebilirsiniz .

İhtiyacınız olmayan ikili günlükleri önce saklamak istediğiniz en eski günlüğün ne olduğunu görerek silebilirsiniz:

ls -lh /path/to/binary/logs/mysql-bin.0*

ve sonra mysql içinde:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';

5

Bunu dene:

RESET MASTER;

olarak belge şunları söyledi:

RESET MASTER, ikili günlük kaydı başlatılmadan önce master'ı kendi durumuna döndürerek, herhangi bir ikili günlük dosyasını ve ilgili ikili günlük indeks dosyasını silmenizi sağlar.

Bu, istediğin olmayabilir tüm ilgili ikili günlük dosyalarını siler.

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.