Baru-baru ini Oracle mengumumkan beberapa fitur baru untuk versi pengembangan MySQL terbaru yang tersedia yaitu 5. 7. 2 pada saat penulisan artikel ini. Kebanyakan dari mereka terkait dengan kinerja dan replikasi yang menunjukkan kepada kita betapa luar biasanya rilis baru itu nantinya
Dalam posting ini saya akan mencoba menjelaskan dalam beberapa langkah mudah bagaimana replikasi multi-sumber baru bekerja dan bagaimana kita dapat mengonfigurasinya untuk pengujian kita sendiri. Penting untuk disebutkan bahwa ini adalah rilis pengembangan, jadi belum siap produksi. Oleh karena itu, postingan ini ditujukan untuk orang-orang yang ingin menguji fitur baru dan melihat cara kerjanya dengan aplikasi mereka, selalu dalam lingkungan pementasan
Apa itu replikasi multi-sumber?
Pertama, kita perlu memperjelas bahwa replikasi multi-master dan multi-sumber tidak sama. Replikasi Multi-Master adalah replikasi melingkar biasa di mana Anda dapat menulis di server mana pun dan data direplikasi ke server lainnya
Bagaimana cara kerjanya?
Sekarang kami memiliki konsep saluran komunikasi. Setiap saluran komunikasi adalah koneksi dari budak ke master untuk mendapatkan peristiwa log biner. Artinya kita akan memiliki satu IO_THREAD untuk setiap saluran komunikasi. Kita perlu menjalankan perintah “CHANGE MASTER” yang berbeda, satu untuk setiap master, dengan argumen “FOR CHANNEL” yang akan kita gunakan untuk memberi nama pada saluran tersebut
Kerang1
GANTI MASTER MASTER_HOST = 'sesuatu', MASTER_USER=.. . UNTUK SALURAN = "nama_saluran";
Sangat mudah. Ada satu prasyarat tunggal. Slave harus dikonfigurasi terlebih dahulu dengan fitur crash-safe dari MySQL 5. 6. Itu artinya info biasanya disertakan dalam master. info atau relay-log. info harus di atas meja. Mari kita mulai dengan konfigurasi
Tunjukkan pada saya sebuah contoh
Pertama, Anda perlu mengunduh versi lab mysql dari tautan ini
Kami memiliki lingkungan kotak pasir dengan 2 master dan 1 server budak. Saya tidak akan membahas detail tentang cara mengonfigurasi server_id, log biner, atau pengguna replikasi. Saya menganggap mereka dikonfigurasi dengan baik. Jika Anda membutuhkan howto, Anda dapat mengikuti yang ini
Pertama, kita harus mengaktifkan fitur crash safe pada slave
Kerang1
2
master_info_repository = TABEL;
relay_log_info_repository = TABEL;
Setelah slave restart, kita dapat mulai membuat saluran dengan nama "master1" dan "master2"
Kerang1
2
budak > ubah tuan menjadi master_host="127.0.0.1", master_port = 12047, master_user="msandbox",master_password="msandbox" for channel="master1";
budak > ubah tuan menjadi master_host="127.0.0.1", master_port = 12048, master_user="msandbox",master_password="msandbox" for channel="master2";
Untuk memulai proses slave, Anda perlu menentukan saluran yang Anda maksud
Kerang1
2
budak > mulai budak untuk channel="master1";
budak > mulai budak untuk channel="master2";
Sekarang, kami ingin memeriksa status budak
Kerang1
2
budak > tampilkan budak statusG
Kosong disetel (0. 00 dtk)
Oh, itu kosong. Kita harus menentukan lagi saluran mana yang ingin kita periksa
Kerang1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
budak > TAMPILKAN BUDAK STATUS FOR CHANNEL="master1"G
*************************** 1. baris ***************************
Slave_IO_State. Menunggu untuk master untuk mengirimevent
Master_Host. 127. 0. 0. 1
Pengguna_Master. msandbox
Master_Port. 12047
Connect_Retry. 60
Master_Log_File. mysql - bin. 000002
Baca_Master_Log_Pos. 232
Relay_Log_File. tekan - relai - bin . -master1.000003
Relay_Log_Pos. 395
Relay_Master_Log_File. mysql - bin. 000002
Slave_IO_Berjalan. Ya
Slave_SQL_Menjalankan. Ya
[. . . ]
dan kami juga dapat memeriksa apakah IO_THREAD dan SQL_THREADS sedang berjalan
Kerang1
2
3
4
5
6
7
8
9
budak > TAMPILKAN DAFTAR PROSES;
+----+-------------+-----------------------------
. Id . Pengguna . Negara .
+----+-------------+-----------------------------
. 2 . sistem pengguna . Menunggu untuk master untuk mengirim . event |
. 3 . sistem pengguna . Budak telah membaca semua relai . log; waiting for the slave I/O thread to update it |
. 4 . sistem pengguna . Menunggu untuk master untuk mengirim . event |
. 5 . sistem pengguna . Budak telah membaca semua relay . log; waiting for the slave I/O thread to update it |
+----+-------------+-----------------------------
Mari kita uji
Kerang1
2
3
4
5
6
7
8
9
master1 > buat database master1;
master2 > buat database master2;
budak > tampilkan database suka 'master%';
+-----------------------+
. Database (master%) . |
+-----------------------+
. master1 .
. master2 .
+-----------------------+
Ini berhasil, semudah itu
Kesimpulan
Fitur multi-sumber baru memungkinkan kami membuat lingkungan replikasi baru yang sebelumnya tidak mungkin dilakukan tanpa beberapa "peretasan" yang rumit. Tentu saja, aplikasi Anda harus dirancang dan dikembangkan dengan mempertimbangkan arsitektur baru ini. Seperti halnya multi-master, multi-sumber membutuhkan perhatian khusus agar data Anda tidak berantakan
Replikasi MySQL semakin baik pada setiap rilis yang memberi kami lebih banyak kemungkinan konfigurasi, kinerja, dan desain. Dan semua fitur baru itu bisa digabungkan. Lingkungan replikasi Anda bisa menjadi lebih baik jika Anda menggabungkan beberapa fitur baru (dan lama) yang ditambahkan baru-baru ini ke replikasi. Misalnya, Anda dapat mengonfigurasi GTID atau mengaktifkan budak multi-utas per skema