Muat ulang my.cnf tanpa memulai ulang layanan MySQL

26

Saya harus mengkonfigurasi server MySQL untuk bertindak sebagai master replikasi.

Saya memodifikasi my.cnf untuk mengaktifkan log biner, tetapi sekarang untuk memuat ulang konfigurasi saya harus memuat ulang layanan /etc/init.d/mysqld restart. Masalahnya adalah server menerima beberapa permintaan per detik dan saya tidak ingin kehilangan semua data yang bisa tiba sementara itu.

Apakah ada cara untuk memuat ulang file konfigurasi my.cnf tanpa memulai ulang layanan?

David Espart
sumber
3
/etc/init.d/restartakan me-restart seluruh host. Anda mungkin berpikir tentang/etc/init.d/mysqld restart
Kevin M
Ya, saya ment restart mysqld. Diedit. Terima kasih!
David Espart

Jawaban:

28

Khususnya MySQL:
Opsi di my.cnf adalah variabel sistem . Variabel-variabel ini baik dinamis (dapat diubah saat runtime) atau tidak dinamis. Yang dinamis, dapat diubah pada saat dijalankan dengan sintaks variabel SET. Anda dapat melihat variabel dengan SHOW VARIABLES;. Tetapi menurut tautan ini dalam manual , opsi log biner tidak dinamis. Jadi sepertinya Anda harus memulai ulang. Anda mungkin ingin menunggu seseorang yang tahu mysql sedikit lebih baik dari saya untuk mengkonfirmasi ini.

Daemon secara umum:
Di Linux, /etc/init.d/ menampung skrip yang memulai dan menghentikan daemon (layanan). Karena ini adalah skrip, Anda dapat melihatnya dengan editor teks. Banyak dari skrip ini akan mengambil argumen reload. Melihat skrip mysql saya, memuat ulang sebagai argumen menggunakan perintah mysqladmin. Jadi manual untuk mysqladmin di bawah reload mengatakan:

memuat ulang

Reload the grant tables.

Jadi sepertinya secara umum, ini bukan untuk perubahan konfigurasi, melainkan perubahan pada privilege (Mungkin perintah privilege flush yang setara?).

Kyle Brandt
sumber
2
Hei, penjelasan yang sangat bagus. Tampaknya tidak ada cara untuk melakukannya tanpa memulai ulang. Jika tidak ada yang menjawab solusi atau solusi, saya akan menerima pertanyaan Anda. Terima kasih.
David Espart
Menurut tautan Anda, sepertinya SET GLOBAL binlog_format = 'STATEMENT'; akan melakukan triknya?
Kyle Smith
Kyle lain: Sepertinya begitu, tapi saya pikir binary logging sudah harus diaktifkan untuk melakukan apa saja (dan mungkin diatur). Variabel itu diperkenalkan lebih lambat dari versi mysql 5.0.x saya saat ini jadi saya tidak bisa menguji.
Kyle Brandt
Saya harus mencari sintaks perintah SET - di sini ada tautan untuk berjaga-jaga jika ada orang lain yang membutuhkannya: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
4
Anda juga perlu menyebutkan variabel mana yang merupakan perubahan dinamis saat Anda menggunakan versi MySQL. Misalnya dalam 5.x Anda dapat mengaktifkan log kueri lambat saat berjalan, tetapi dalam 4.x Anda tidak dapat (seperti yang saya temukan kemarin!).
Coops
1

Saya telah mencari solusi untuk ini tetapi tidak puas dengan bantuan terbatas yang saya temukan. Satu orang menawarkan pembunuhan -HUP .. tidak bekerja untuk saya ..

apa yang saya lakukan adalah untuk menjeda instance apache .. dan kemudian melanjutkannya .. bekerja seperti pesona di server di mana saya memiliki rata-rata 25 permintaan aktif per detik.

dengan sudo (jelas) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

Tentu saja nama proses apache Anda dan / atau skrip restart mysql mungkin berbeda dengan saya, tetapi Anda mendapatkan ide yang tepat!

hassan abdul rehman
sumber