Saya memiliki MySQL (5.5) dalam pengaturan master-slave dan membuat server slave lain.
Saya menghentikan budak asli, membuang data, menyalin dan mengimpor kembali dan itu bekerja dengan baik. Saya mencatat pos master_log dari slave asli dan menggunakan perintah ini untuk meletakkannya di slave baru
CHANGE MASTER TO MASTER_HOST='<ipaddress>',
MASTER_USER='<username>', MASTER_PASSWORD='<password>',
MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851',
MASTER_LOG_POS=15824150,
MASTER_CONNECT_RETRY=10;
Ketika saya memulai budak baru yang saya dapatkan
Last_IO_Error: Mendapat kesalahan fatal 1236 dari master saat membaca data dari log biner: 'log event entry melebihi max_allowed_packet; Tingkatkan max_allowed_packet pada master '
Namun ketika saya memulai budak asli, itu berhasil dengan baik, dan sekarang sinkron.
Jadi pertanyaannya:
nilai saat ini adalah 16 juta, bagaimana saya tahu seberapa besar yang harus saya lakukan? (Saya lebih suka menghindari coba-coba dengan server produksi).
mengapa saya perlu meningkatkan nilai pada master ketika budak asli diatasi dengan baik, mungkinkah masalahnya dengan budak baru?
memperbarui
Saya meningkatkan max_allowed_packet menjadi 1073741824 ketika Rolando menyarankan master, slave lama dan slave baru, dan memulai kembali ( SET GLOBAL max_allowed_packet = 1073741824;
untuk beberapa alasan sepertinya tidak mengambil)
sekarang kesalahan IO terakhir sama dengan sebelumnya, tapi sekarang saya mengerti
Last_SQL_Error: Kegagalan membaca log relai: Tidak dapat mengurai entri log aktivitas relai. Alasan yang mungkin adalah: log biner master rusak (Anda dapat memeriksa ini dengan menjalankan 'mysqlbinlog' pada log biner), log relay slave rusak (Anda dapat memeriksa ini dengan menjalankan 'mysqlbinlog' pada log relay), sebuah masalah jaringan, atau bug pada kode MySQL master atau slave. Jika Anda ingin memeriksa log biner master atau log relay slave, Anda akan dapat mengetahui namanya dengan mengeluarkan 'SHOW SLAVE STATUS' pada slave ini.
Jika saya melakukan mysqlbinlog pada file master, itu bergulir melewati dengan cukup senang selama berabad-abad - file adalah 722M - jika saya melakukan itu untuk log relay slave saya mendapatkan
GALAT: Kesalahan di Log_event :: read_log_event (): 'Sanity check gagal', data_len: 38916267, event_type: 69
GALAT: Tidak dapat membaca entri di offset 253: Kesalahan dalam format log atau kesalahan baca.
Saya memeriksa variabel dan perubahan berhasil
mysql> tampilkan variabel LIKE '% max_allowed_packet%';
pada budak baru menunjukkan max_allowed_packet
DAN di slave_max_allowed_packet
mana pada master itu hanya memilikimax_allowed_packet
jadi saya melakukan pemeriksaan versi pada master:
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 1.1.6 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.11-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
dan pada budak baru
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 5.5.32 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.32-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
Apakah kedua versi ini terlalu jauh?
sumber
Jawaban:
Tidak apa-apa untuk memaksimalkan
max_allowed_packet
ke 1G. Setiap kali Paket MySQL dibangun, itu tidak akan melompat ke 1G dari awal. Mengapa?Pertama, Anda perlu tahu apa itu Paket MySQL. Halaman 99 dari Buku
menjelaskannya dalam paragraf 1-3 sebagai berikut:
Bandingkan dengan Dokumentasi MySQL pada
max_allowed_packet
:Dengan informasi ini, Anda seharusnya senang MySQL akan memperluas dan mengontrak Paket MySQL sesuai kebutuhan. Karena itu, silakan dan
max_allowed_packet
ke 1G pada Master dan Slavenet_buffer_length
ke nilai maksimal 1M pada Master dan SlaveMaster dan Slave harus cocok dengan siapa yang mereka kirimkan data, terutama data BLOB.
UPDATE 2013-07-04 07:03 EDT
Dari pesan Anda tentang log relai, sepertinya Anda memiliki yang berikut ini
SARAN
Menjalankan
CHANGE MASTER TO
menghapus semua log relai dan mulai dengan yang baru. Anda akan mereplikasi dari Event Master BinLog Terakhir (BinLog, Posisi) yang dijalankan pada Slave.Cobalah !!!
sumber
MASTER_LOG_FILE
nama yang salah . Misalnya digunakanmysql-bin.000001
ketika saya seharusnya menggunakannyamysql-bin.000003
dariSHOW MASTER STATUS
dalamCHANGE MASTER TO
.Agak memalukan masalahnya adalah nama file yang salah untuk log, menyebabkan hasil yang aneh, diterapkan kembali dengan nama file yang benar dan semuanya baik-baik saja hang malu
sumber