Apa itu Replikasi Master-Master MySQL?
Replikasi MySQL Master-Master menambah kecepatan dan redundansi untuk situs web aktif. Dengan replikasi, dua server MySQL terpisah bertindak sebagai sebuah cluster. Pengelompokan basis data sangat berguna untuk konfigurasi situs web ketersediaan tinggi. Gunakan dua Linode terpisah untuk mengonfigurasi replikasi database, masing-masing dengan alamat IPv4 pribadi.
CatatanPanduan ini ditulis untuk pengguna non-root. Perintah yang memerlukan hak istimewa yang lebih tinggi diawali dengan
sudo
. Jika Anda tidak terbiasa dengansudo
perintah, Anda dapat memeriksa panduan Pengguna dan Grup kami.Panduan ini ditulis untuk Debian 9, Ubuntu 18.04, dan Ubuntu 20.04.
Jika Anda tidak yakin versi MySQL mana yang telah diinstal pada sistem Anda saat mengikuti langkah-langkah di bawah ini, masukkan perintah berikut:
mysql --version
Instal MySQL
-
Gunakan perintah berikut untuk menginstal MySQL pada setiap Linode:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Jalankan perintah instalasi aman MySQL. Anda akan diminta untuk membuat kata sandi root. Anda disarankan memilih ya untuk semua pertanyaan:
mysql_secure_installation
Edit Konfigurasi MySQL
-
Edit
/etc/mysql/my.cnf
file pada masing-masing Linodes. Tambahkan atau ubah nilai berikut:Server 1:
- File:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 1 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 1
Catatan Jika menggunakan MySQL 8.0.25 atau yang lebih lama, ganti
log_replica_updates
denganlog_slave_updates
(dalam Server 1 dan 2). Lihat dokumentasi MySQL untuk detailnya.Server 2:
- File:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 2
Catatan Jika menggunakan MySQL 8.0.25 atau yang lebih lama, ganti
log_replica_updates
denganlog_slave_updates
(dalam Server 1 dan 2). Lihat dokumentasi MySQL untuk detailnya. -
Edit
bind-address
konfigurasi untuk menggunakan alamat IP pribadi, untuk setiap Linode.- File:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Setelah selesai, restart aplikasi MySQL:
sudo systemctl restart mysql
Buat Pengguna Replikasi
-
Masuk ke MySQL di setiap Linode:
mysql -u root -p
-
Konfigurasikan pengguna replikasi pada setiap Linode. Ganti
x.x.x.x
dengan alamat IP pribadi dari Linode lawan, danpassword
dengan kata sandi yang kuat:MySQL8 dan di atasnya
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Di bawah MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Jalankan perintah berikut untuk menguji konfigurasi. Gunakan alamat IP pribadi dari Linode lawan:
mysql -u replication -p -h x.x.x.x -P 3306
Perintah ini akan menghubungkan Anda ke instance MySQL server jauh.
Konfigurasi Replikasi Basis Data
-
Saat masuk ke MySQL di Server 1, tanyakan status master:
SHOW MASTER STATUS;
Perhatikan nilai file dan posisi yang ditampilkan:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Di Server 2 pada prompt MySQL, atur fungsionalitas replika untuk database itu. Ganti
x.x.x.x
dengan IP pribadi dari server pertama. Ganti juga nilai untuksource_log_file
dengan nilai file dari langkah sebelumnya, dan nilai untuksource_log_pos
dengan nilai posisi.MySQL 8.0.22 atau Lebih Tinggi:
STOP REPLICA; CHANGE REPLICATION SOURCE TO source_host='x.x.x.x', source_port=3306, source_user='replication', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=106; START REPLICA;
MySQL 8.0.22 atau Sebelumnya:
STOP SLAVE; CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=106; START SLAVE;
-
Di Server 2, tanyakan status master. Sekali lagi perhatikan nilai file dan posisi.
SHOW MASTER STATUS;
-
Atur status database replika di Server 1, menggunakan perintah serupa seperti pada langkah 2. Saat memasukkan perintah, gunakan alamat IP Server 2 dan nilai file dan posisi yang baru saja Anda kumpulkan di langkah sebelumnya.
-
Uji dengan membuat database dan menyisipkan baris:
Server 1:
create database test; create table test.flowers (`id` varchar(10));
Server 2:
show tables in test;
Saat ditanya, Anda akan melihat tabel dari Server 1 direplikasi di Server 2. Selamat, Anda sekarang memiliki cluster Master-Master MySQL!
Informasi Lebih Lanjut
Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.
- Manual Referensi MySQL