The PURGE BINARY LOGS
pernyataan menghapus semua file log biner tercantum dalam file indeks log sebelum ditentukan nama file log atau timestamp. File log yang dihapus juga dihapus dari daftar yang direkam dalam file indeks, sehingga file log yang diberikan menjadi yang pertama dalam daftar.
Saya harap Anda telah membersihkan log biner hingga mysql-bin.000019
menggunakan perintah
PURGE BINARY LOGS TO 'mysql-bin.000019';
Jika Anda perlu membersihkan semua log suka
PURGE BINARY LOGS TO 'mysql-bin.000025';
Ini akan menghapus log biner hingga mysql-bin.000025
.
MEMPERBARUI
Anda dapat mencoba
RESET MASTER;
RESET MASTER
Menghapus semua file log biner yang tercantum dalam file indeks, mengatur ulang file indeks log biner menjadi kosong, dan membuat file log biner baru
Efek RESET MASTER
berbeda dari efek LOG BINARY PURGE dalam 2 cara utama:
RESET MASTER
menghapus semua file log biner yang tercantum dalam file indeks, hanya menyisakan satu file log biner kosong dengan akhiran numerik 0,000001, sedangkan penomoran tidak diatur ulang oleh PURGE BINARY LOGS.
RESET MASTER
tidak dimaksudkan untuk digunakan ketika budak replikasi sedang berjalan. Perilaku RESET MASTER
ketika digunakan saat budak sedang berjalan tidak ditentukan (dan karenanya tidak didukung), sedangkan PURGE BINARY LOGS
dapat digunakan dengan aman saat budak replikasi sedang berjalan.
CAVEAT oleh RolandoMySQLDBA
Jika Anda menjalankan RESET MASTER
dengan Budak terhubung dan berjalan, IO Thread dari masing-masing Budak akan segera kehilangan tempatnya. Replikasi dengan demikian rusak dan Anda harus menghabiskan waktu untuk mendapatkan data pada semua Slave disinkronkan lagi. Jika Anda ingin menghapus log biner dengan aman dari Master tanpa merusak integritas Replikasi, inilah yang Anda lakukan:
- Jalankan
SHOW SLAVE STATUS\G
pada setiap Slave.
- Perhatikan
Relay_Master_Log_File
. Ini adalah log biner yang pernyataan terakhirnya berhasil dieksekusi di Slave).
- Dari semua tampilan
SHOW SLAVE STATUS\G
, tentukan mana Relay_Master_Log_File
yang tertua (Misalnya, 'mysql-bin.00123').
- Anda dapat menjalankan
PURGE BINARY LOGS TO 'mysql-bin.00123';
Tidak ada Budak yang akan kehilangan tempatnya.
Efek keseluruhan? Ini akan meninggalkan log biner pada Master yang pernyataannya belum dieksekusi pada semua Slave sampai sekarang.
CHANGE MASTER TO
, itu menghapus semua log relay. JikaRelay_Master_Log_file
adalahmysql-bin.00123
, itu log biner tertua di Master bahwa Slave tahu tentang. Jikamysql-bin.00123
tidak ada lagi di Master, Anda bisa kehilangan tempat yang tepat untuk ditiru dari jika Anda menjalankan apa punCHANGE MASTER TO
di Slave yang tidak mereferensikan log yang lebih baru. Ini dapat dengan mudah diabaikan dan Anda akhirnya memecahkan replikasi secara manual.Saya tidak yakin apakah ini yang terjadi pada Anda, tetapi dalam kasus saya MySQL telah menghentikan log "bersepeda" dan file mysql-bin.index menjadi "rusak" dengan entri file binlog yang tidak valid.
Secara khusus, file indeks sudah mulai di mysql-bin.000001 dan sampai ke mysql-bin.000220 tetapi kemudian entah bagaimana mulai lagi dari 001. Ketika saya membandingkan ini dengan file di server saya, saya dapat melihat bahwa saya memiliki file dari 001 hingga 022.
Awalnya saya mencoba
PURGE LOGS TO 'mysql-bin.000022';
tetapi ini tidak berhasil.Pada akhirnya saya menghentikan MySQL dan secara manual mengedit file indeks sampai cocok dengan file yang saya miliki di server saya. Ketika saya me-restart MySQL, itu membersihkan file-file binlog untuk menghormati
expire_logs_days
pengaturan dan mulai bekerja secara normal lagi.sumber
PURGE LOGS
hanya berfungsi di bawah pengaturan yang ideal: 1) ketika semua log biner berturut-turut, 2) semua log biner dinamai dalammysql-bin.index
file, 3) Tidak ada log tambahan yang tidak disebutkan dalammysql-bin.index
. +1 !!!Dalam kasus saya
PURGE BINARY
sama sekali tidak menghapus apa pun.Saya memiliki partisi saya pada penggunaan 100% (saya harus membersihkan log slowqueries saya sedikit sehingga ada cukup ruang untuk mysql untuk di-restart), jadi hal pertama yang saya lakukan adalah mengubah
/etc/my.cnf
komentar barislog-bin=mysql-bin
(itu tidak diperlukan di server ini lagi dan saya lupa untuk menghapusnya), dan kemudian saya me-restart mysql (ini diperlukan karena ada pertanyaan yang antri yang mencegahPURGE BINARY
dieksekusi).Setelah itu, saya berlari
PURGE BINARY
tetapi tidak terjadi apa-apa. Jadi saya membaca manual dan menemukan bahwa:Jadi saya mengaktifkan kembali
log-bin=mysql-bin
di saya/etc/my.cnf
, restart, PURGED file (dengan sukses sekarang), berkomentar lagi dan kemudian restart. Setelah ini, file dihapus dan tidak lagi dibuat.sumber
Ini berfungsi untuk saya: (versi server MySQL: 5.6.14)
Menghapus semua log biner di sistem saya.
sumber
Anda dapat dengan mudah menghapus SEMUA log dengan:
Atau ganti func NOW () dengan tanggal apa pun dalam tanda kutip:
Atau Anda dapat mengotomatiskan tindakan ini dengan
expire_logs_days = 10
di my.cnf. Secara default expire_logs_days adalah 0 = tidak pernah menghapus log.( sumber )
sumber