Bagaimana cara memulai replikasi mysql?

Berikut cara mengatur replikasi antara dua MySQL 5. 7 server berjalan di Ubuntu 16. 04 LTS. Replikasi biasanya digunakan untuk meningkatkan ketersediaan atau memiliki node tambahan untuk menjalankan kueri dan laporan analitik. Kami juga menunjukkan bagaimana Anda dapat dengan mudah menggunakan OpsDash untuk memantau status replikasi

Ubuntu 16. Repositori 04 LTS hadir dengan versi 5. 7 dari MySQL, jadi menginstalnya hanya masalah

$ sudo apt-get install mysql-server

Posting selanjutnya menganggap Anda telah menyiapkan dua node identik yang menjalankan MySQL, yang dapat berbicara satu sama lain melalui jaringan pribadi, dan bahwa node tersebut memiliki IP.

master IP: 10.0.0.156
slave IP:  10.0.0.157
_

Penyiapan utama

Pertama mari kita atur masternya. Proses ini perlu mengambil snapshot database yang konsisten, yang melibatkan penempatan kunci baca global. Ini berarti database akan bersifat hanya-baca dan semua penulisan akan diblokir selama penguncian berlangsung. Anda harus merencanakan waktu henti ini

1) Perbarui konfigurasi

Di dalam file /etc/mysql/mysql. conf. d/mysqld. cnf batalkan komentar atau atur yang berikut ini

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log

Ini membuat master mendengarkan IP pribadi, menyetelnya

master IP: 10.0.0.156
slave IP:  10.0.0.157
9 (yang harus unik untuk setiap node di antara kumpulan node master dan slave yang terhubung) ke 1, dan mengaktifkan logging biner

2) Mulai ulang layanan MySQL agar perubahan diterapkan

sudo systemctl restart mysql
_

3) Buat pengguna untuk replikasi

Kami akan menyiapkan budak untuk terhubung ke master melalui akun khusus. Akun membutuhkan

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
0 hak istimewa. Di sini kami menggunakan nama pengguna
bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
1

$ mysql -u root -p
Password:

mysql> CREATE USER 'repl'@'10.0.0.157' IDENTIFIED BY 'slavepass';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.157';
Query OK, 0 rows affected (0.00 sec)

4) Kunci masternya

Selanjutnya kita perlu mengunci master untuk mendapatkan snapshot yang konsisten untuk mem-bootstrap budak

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
_

Perhatikan bahwa kunci ini dilepaskan saat Anda keluar dari klien mysql CLI, atau saat Anda mengeluarkan

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
2. Kunci harus tetap di tempatnya sampai
bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
3 pada langkah 6 di bawah selesai

5) Catat posisi log replikasi master

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      613 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Informasi ini akan diperlukan untuk menginisialisasi budak di langkah berikutnya

6) Buang master db

$ mysqldump -u root -p --all-databases --master-data > dbdump.sql

Catatan. Anda juga dapat menghentikan mysqld dan mentransfer file db. Halaman ini memiliki detail lebih lanjut

7) Buka kunci database master

Anda dapat melakukannya dengan keluar dari shell mysql CLI Anda, atau dengan menjalankan

mysql> UNLOCK TABLES;

8) Salin file ke budak

Transfer file dump dengan aman ke slave, misalnya. g. , menggunakan

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
_4

$ scp dbdump.sql 10.0.0.157:/tmp

Pengaturan budak

1) Perbarui konfigurasi

Dalam file /etc/mysql/mysql. conf. d/mysqld. cnf, batalkan komentar atau atur yang berikut ini

master IP: 10.0.0.156
slave IP:  10.0.0.157
_0

Seperti untuk master di atas, ini membuat budak mendengarkan IP pribadi, menyetelnya

master IP: 10.0.0.156
slave IP:  10.0.0.157
9 (kali ini ke 2), dan mengaktifkan logging biner. Meskipun logging biner tidak sepenuhnya diperlukan, masuk akal untuk menjaga konfigurasi budak sedekat mungkin dengan master, jika budak dipromosikan menjadi master. Itu juga memungkinkan budak ini bertindak sebagai master untuk budak lain

2) Mulai ulang layanan MySQL agar perubahan diterapkan

master IP: 10.0.0.156
slave IP:  10.0.0.157
_1

3) Impor dump db

Impor file dump yang Anda buat di master dan salin ke budak ini

master IP: 10.0.0.156
slave IP:  10.0.0.157
_2

4) Siapkan budak untuk berbicara dengan master

master IP: 10.0.0.156
slave IP:  10.0.0.157
_3

Pada titik ini, budak sinkron dengan master dan siap menerima dan memutar ulang perubahan yang dilakukan pada master. Nilai

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
_6 dan
bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
7 berasal dari output
bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
8 yang Anda jalankan sebelumnya

Uji apakah replikasi berfungsi

Dan Anda selesai. Jika Anda sampai sejauh ini tanpa kesalahan, buat tabel/baris baru di master. Perubahan harus disebarkan kurang lebih secara instan ke budak. Periksa apakah perubahan muncul pada budak

Pengaturan Pemantauan

OpsDash adalah server yang dihosting sendiri dan solusi pemantauan layanan, yang dapat memantau instance MySQL. Ini gratis untuk digunakan hingga 5 server dan layanan. Mari kita lihat cara menyiapkannya untuk kasus ini

1) Instal server OpsDash

Unduh dan instal server OpsDash di mesin apa pun yang dapat terhubung ke server MySQL

master IP: 10.0.0.156
slave IP:  10.0.0.157
_4

OpsDash harus aktif dan berjalan setelah perintah ini. Anda dapat menelusuri

bind-address = 10.0.0.156
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
9 untuk melihat UI OpsDash, di mana
sudo systemctl restart mysql
0 adalah IP server tempat Anda menginstal OpsDash. Ingatlah untuk membuka port di firewall Anda jika perlu

2) Buat pengguna MySQL

OpsDash perlu terhubung ke server MySQL dan mengumpulkan metrik. Mari buat pengguna baru untuk ini

master IP: 10.0.0.156
slave IP:  10.0.0.157
_5

Hak istimewa

sudo systemctl restart mysql
1 dan
sudo systemctl restart mysql
2 memungkinkan OpsDash untuk menanyakan status replikasi. Anda juga dapat mengganti
sudo systemctl restart mysql
3 dengan IP server OpsDash yang sebenarnya

3) Beri tahu OpsDash tentang server MySQL

Dari UI OpsDash, mari tambahkan entri untuk setiap instance MySQL. Dari halaman Pengaturan Sistem -> Layanan, tambahkan layanan MySQL, berikan IP, nama pengguna ("opsdash") dan kata sandi ("opsdashpass")

Bagaimana cara memulai replikasi mysql?

4) Lihat dasbor

Dasbor untuk master (Sumber -> "master") menunjukkan berbagai metrik kesehatan dan kinerja, termasuk jumlah budak aktif (yang seharusnya 1). Anda dapat mengeklik grafik dan menyetel peringatan saat turun di bawah 1. OpsDash dapat memberi tahu Anda melalui email, Slack, HipChat, PagerDuty, atau Pushbullet saat peringatan terjadi

Bagaimana cara memulai replikasi mysql?

Dasbor budak menyertakan kelambatan replikasi (dalam detik), serta jumlah utas budak (harus ada 1 utas I/O budak dan 1 utas SQL budak yang berjalan dalam jalur normal)

Bagaimana cara memulai replikasi mysql?

Kegagalan Manual

Terakhir, mari kita lihat bagaimana slave MySQL dapat dipromosikan menjadi master secara manual. Perhatikan bahwa ini tidak mencakup failover yang tidak direncanakan/otomatis, hanya kasus ketika failover telah direncanakan dan dijalankan secara manual – seperti untuk peningkatan versi atau peningkatan perangkat keras

1) Hentikan modifikasi pada master

Koneksi ke master harus dihentikan terlebih dahulu, agar tidak ada lagi perubahan yang terjadi pada master

2) Tunggu hingga replikasi selesai

Semua perubahan harus direplikasi ke budak, dan budak harus menyelesaikan penerapannya. Anda dapat memeriksanya dengan menjalankan "SHOW PROCESSLIST" pada master

master IP: 10.0.0.156
slave IP:  10.0.0.157
_6

Negara harus membaca “Tuan telah mengirim semua binlog ke budak; . Ini berarti master telah menyelesaikan bagian dari replikasi

Pada budak, menjalankan "SHOW SLAVE STATUS\G" memberikan status budak

master IP: 10.0.0.156
slave IP:  10.0.0.157
_7

Kolom Slave_SQL_Running_State harus bertuliskan “Slave telah membaca semua log relai;

3) Promosikan budak

Sekarang Anda dapat mempromosikan budak dengan perintah

master IP: 10.0.0.156
slave IP:  10.0.0.157
_8

Setelah perintah ini, node slave tidak lagi berbicara dengan master

4) Konfigurasi ulang aplikasi

Semua aplikasi dan pekerjaan harus dikonfigurasi untuk berbicara dengan master baru. Ini melengkapi failover

Bacaan lebih lanjut

Manual Referensi MySQL memiliki bab tentang replikasi, yang mendokumentasikan semua ini dan lebih banyak lagi. Anda juga dapat membaca tentang pengaturan lain seperti replikasi multi-master dan replikasi semisinkron, dan teknik seperti replikasi tertunda dan mengambil cadangan dari budak

Utilitas MySQL berisi alat yang dapat digunakan untuk mengotomatiskan langkah-langkah penyiapan replikasi dan kegagalan

Anda dapat mengetahui lebih lanjut tentang OpsDash di sini. OpsDash adalah server yang dihosting sendiri dan solusi pemantauan layanan dengan dukungan terintegrasi untuk pemantauan replikasi MySQL

Bagaimana cara memulai dan menghentikan replikasi di MySQL?

Untuk menghentikan pemrosesan log biner dari sumber, gunakan STOP REPLICA. .
mysql> BERHENTI BUDAK; . 0. .
mysql> BERHENTI BUDAK IO_THREAD; . 0. .
mysql> MULAI BUDAK; . 0. .
mysql> MULAI BUDAK IO_THREAD; . 0

Bagaimana cara memulai replikasi?

Sambungkan ke Publisher di Management Studio, lalu perluas node server dan folder Replikasi. Luaskan folder Publikasi Lokal, lalu klik kanan sebuah publikasi. Klik Lihat Status Agen Snapshot atau Lihat Status Agen Pembaca Log. Klik Mulai atau Berhenti

Bagaimana cara kerja replikasi MySQL?

Replikasi memungkinkan data dari satu server database MySQL (dikenal sebagai sumber) untuk disalin ke satu atau lebih server database MySQL (dikenal sebagai replika). Replication is asynchronous by default; replicas do not need to be connected permanently to receive updates from a source.

Bagaimana cara mengkonfigurasi replikasi di server MySQL?

Langkah 1. Instal MySQL di Server Master dan Slave. Kami akan memulai dengan menginstal database MySQL di server master dan slave. .
Langkah 2. Amankan MySQL di Server Master dan Slave. .
Langkah 3. Konfigurasi Node Master (Server).
Langkah 4. Konfigurasikan Node Budak (Server).
Langkah 4. Menguji Replikasi Master-Slave MySQL