Seberapa cepat setelah memperbarui param expire_logs_days dan memulai kembali sql akankah binlog lama dihapus?

16

MySQL 5.1.x | InnoDB | Windows

Direktori data mysql saya mulai terisi dengan log bin.

Saat ini saya memiliki pengaturan berikut yang dikonfigurasi di server mysql windows saya:

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=25

Saya berencana untuk mengubah pengaturan expire_logs_days menjadi expire_logs_days=10dan memantulkan layanan mysql. Seberapa cepat setelah melakukan perubahan ini, saya bisa berharap log bin lama menjadi jelas.

Apakah ini hanya dilakukan sebagai bagian dari tugas yang dijadwalkan setiap malam? Atau haruskah ini segera?

Mike B
sumber

Jawaban:

29

Ini akan ditangani segera pada startup mysql.

Anda tidak harus menunggu untuk me-restart mysql.

Pertama, atur expire_logs_daysmenjadi 10 di /etc/my.cnf

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=10

Selanjutnya, masuk ke mysql dan jalankan ini

PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);

Catat tanggal dan waktu kueri

mysql> select date(now()) + interval 0 second - interval 10 day;
+---------------------------------------------------+
| date(now()) + interval 0 second - interval 10 day |
+---------------------------------------------------+
| 2012-12-11 00:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Dengan demikian, perintah PURGE BINARY LOGS akan menghapus semua binlog yang prangko sebelumnya telah ada 2012-12-11 00:00:00.

Akhirnya, jalankan perintah ini

SET GLOBAL expire_logs_days = 10;

Itu dia. Tidak diperlukan restart untuk menginstal expire_logs_days .

Adapun parameter replikasi, ya restart diperlukan.

RolandoMySQLDBA
sumber
Respons yang luar biasa. Terima kasih. Saya menghargai detailnya.
Mike B
Harap segarkan, saya memperbaiki kesalahan ketik.
RolandoMySQLDBA
1
Hanya untuk dicatat bahwa expire_logs_days sekarang tidak digunakan lagi di MySQL 8.0 (per detail dalam tautan yang diberikan oleh @Rando_MySQLDBA). Gunakan binlog_expire_logs_seconds alih-alih maju.
John Rix