BUDAK
Jika Budak Anda bukan Master, maka Budak tidak perlu log biner sama sekali. Anda dapat membatasi jumlah ruang log relai yang diakumulasikan oleh seorang Budak. Untuk relay_log_space_limit
membatasi log relai pada 4G, tambahkan ke /etc/my/.cnf di setiap Slave
[mysqld]
relay_log_space_limit=4G
dan mulai kembali mysql
Jika Anda tidak dapat mengatur ini, setidaknya Anda harus memiliki semacam peringatan yang melakukan SHOW SLAVE STATUS\G
dan memeriksa nilai Relay_Log_Space
(total byte yang dikonsumsi oleh log relay).
MENGUASAI
Adapun Master, Anda bisa mengatur expire_logs_days
ke 1, tetapi ada peringatan keras yang saya miliki untuk Anda ...
Jika replikasi rusak, Anda punya waktu 1 hari untuk memperbaikinya. Jika tidak, log biner pada Master dapat berputar dan Anda tidak dapat menjalankan perintah PERUBAHAN MASTER KE untuk meluruskan replikasi. Saya akan berangkat expire_logs_days
jam 3 di Master.
SARAN # 1
Jika Anda memiliki pemrosesan massal semalam untuk dilakukan, mungkin harus menjalankan proses massal pada pada Master dengan SET SQL_LOG_BIN=0;
di Awal Sesi. Ini, tentu saja, tidak akan mereplikasi ke Budak. Anda dapat melakukan Beban Massal yang Sama secara Paralel dengan kedua Budak.
SARAN # 2
Hal lain yang dapat Anda lakukan untuk mengelola akumulasi log biner Master adalah ini.
Jalankan SHOW SLAVE STATUS\G
di kedua Budak. Lihatlah Relay_Master_Log_File
. Itu mewakili log biner pada Master yang perintah terakhirnya dijalankan pada Slave.
*************************** 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)
Dalam contoh ini, Relay_Master_Log_File adalah mysql-bin.009590. Semua log biner sebelum ini dapat dihapus dari Master. Anda bisa menjalankan ini pada Master:
PURGE BINARY LOGS TO 'mysql-bin.009590';
Ini akan menghapus log lama dan tetap membiarkan replikasi tetap berlaku.
CAVEAT
Binary Logs adalah file yang secara serial mengkompilasi (seperti antrian FIFO) semua menyelesaikan transaksi SQL baik sebagai pernyataan SQL atau perubahan baris. Log relai adalah file yang mengumpulkan entri log biner dari server jarak jauh (alias Master).
Dalam Replikasi MySQL
- Master harus mengaktifkan log binernya
- Slave mengkompilasi log relai
- Ketika semua SQL dalam log relay diproses, itu dihapus
- Pada Slave, ketika ada lebih dari satu log relai pada DB Server, itu mungkin mengindikasikan replikasi tertinggal karena thread IO mengumpulkan SQL dari Master lebih cepat sehingga thread SQL dapat memproses log relai.
- Menggunakan relay_log_space_limit mencegah replikasi menumpuk dan berpotensi mengisi disk. Log relay putar keluar berdasarkan aturan # 3
- Dimungkinkan untuk DB Server menjadi Master dan Slave. Itulah satu-satunya keadaan di mana seorang budak harus memiliki log biner diaktifkan. Dalam skenario itu, DB Server akan memiliki Log Biner dan Log Relay.
Jika Anda gagal menjadi Budak, dan Anda ingin menjadikannya seorang Master
- layanan berhenti mysql
- Tambahkan
log-bin=mysql-bin
ke /etc/my.cnf di Slave
- layanan mysql mulai
Anda harus menyiapkan replikasi dari Budak lain ke Master yang baru dipromosikan dan pastikan data pada Budak cocok dengan Master yang baru dipromosikan
UPDATE 2012-08-13 17:47 EDT
Menurut opsi Dokumentasi MySQL padarelay-log
, Anda harus mendefinisikannya. Inilah alasannya:
Karena cara MySQL mem-parsing opsi server, jika Anda menentukan opsi ini, Anda harus memberikan nilai; nama dasar default hanya digunakan jika opsi tidak benar-benar ditentukan. Jika Anda menggunakan opsi --relay-log tanpa menentukan nilai, perilaku yang tidak terduga kemungkinan akan terjadi; perilaku ini tergantung pada opsi lain yang digunakan, urutan yang ditentukan, dan apakah mereka ditentukan pada baris perintah atau dalam file opsi. Untuk informasi lebih lanjut tentang bagaimana MySQL menangani opsi server, lihat Bagian 4.2.3, “Menentukan Opsi Program”.