Replikasi multi-sumber / mysql 8

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

Replikasi multi-sumber / mysql 8
Multi-sumber berbeda. Replikasi MySQL memiliki batasan, diperbaiki dengan rilis baru ini, yang mengatakan bahwa satu budak hanya dapat memiliki satu master. Itu adalah faktor pembatas ketika kami merancang lingkungan replikasi kami. Ada beberapa "peretasan" untuk membuatnya berfungsi, tetapi sekarang ada cara resmi. Jadi, singkatnya, Multi-Source berarti seorang budak bisa memiliki lebih dari satu master. Sekarang, lingkungan replikasi seperti ini dimungkinkan.
Replikasi multi-sumber / mysql 8
Ini akan membantu kita membuat beberapa hierarki replikasi yang sebelumnya tidak mungkin dilakukan. Misalnya, Anda dapat memiliki seorang budak di kantor Anda yang mereplikasi data dari semua server yang Anda miliki di kantor yang tersebar di seluruh dunia.

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

Kerang

1

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

Kerang

1

2

master_info_repository = TABEL;

relay_log_info_repository = TABEL;

Setelah slave restart, kita dapat mulai membuat saluran dengan nama "master1" dan "master2"

Kerang

1

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

Kerang

1

2

budak > mulai budak untuk channel="master1";

budak > mulai budak untuk channel="master2";

Sekarang, kami ingin memeriksa status budak

Kerang

1

2

budak > tampilkan budak statusG

Kosong disetel (0. 00 dtk)

Oh, itu kosong. Kita harus menentukan lagi saluran mana yang ingin kita periksa

Kerang

1

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

Kerang

1

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

Kerang

1

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

Bagaimana cara mengatur replikasi multi sumber di MySQL?

Ada 2 cara untuk mengonfigurasi dalam Replikasi multi-sumber. 1) Replikasi berbasis pengidentifikasi transaksi global (GTID). 2) Replikasi berbasis posisi log biner. .
Jadi kita bisa menggunakan pernyataan berikut dalam skema kinerja. .
Ini akan menunjukkan nama saluran, source_UUID, thread_ID

Apakah MySQL mendukung replikasi multi master?

Replikasi multi-sumber MySQL memungkinkan replika untuk menerima transaksi dari berbagai sumber langsung secara paralel . Dalam topologi replikasi multi-sumber, replika membuat saluran replikasi untuk setiap sumber yang seharusnya menerima transaksi.

Apakah penyiapan replikasi dua arah tersedia di MySQL?

Dalam rilis ini, replikasi dua arah didukung untuk Oracle, MariaDB, MySQL, PostgreSQL, dan SQL Server .

Apa itu replikasi Gtid di MySQL?

GTID menghadirkan replikasi berbasis transaksi ke database MySQL . Dengan replikasi GTID, setiap transaksi dapat diidentifikasi dan dilacak karena dilakukan di server sumber asal dan diterapkan oleh replika. Anda tidak perlu merujuk ke file log apa pun saat memulai server replika.