MySQL adalah sistem manajemen basis data relasional yang merupakan salah satu proyek sumber terbuka paling populer. Meskipun dikenal dengan stabilitasnya, MySQL bahkan lebih dapat diandalkan jika replikasi sumber-replika dikonfigurasi. Dalam replikasi, satu server MySQL biasanya ditunjuk sebagai sumber . Sebuah sumber mengirimkan perubahan basis data dan pembaruan data ke satu atau beberapa replika server basis data. Prosedur replikasi data MySQL fleksibel, dan server replika tidak perlu terhubung secara permanen ke sumbernya. Panduan ini menjelaskan cara mengonfigurasi replikasi data sumber-replika di MySQL.
Cara Kerja Replikasi Data MySQL
Proses replikasi menyimpan data dalam database sumber terlebih dahulu dan kemudian menyalinnya ke replika apa pun. Setelah memproses instruksi, server database sumber melacak perubahan dalam log biner. Log berfungsi sebagai catatan berurutan dari semua perubahan pada struktur dan konten database. SELECT
pernyataan tidak direkam karena tidak mengubah isi database.
Pembaruan terjadi secara tidak sinkron, sehingga replika tidak harus terus terhubung. Ini kontras dengan arsitektur sinkron dari sistem dengan keandalan tinggi. Jika sinkronisasi waktu nyata diperlukan, MySQL merekomendasikan penggunaanNDB Cluster .
Setiap replika menarik data dari sumber dengan meminta konten log biner sumber. Replika kemudian menerapkan pernyataan secara berurutan, secara efektif memutar ulang peristiwa yang terjadi pada sumbernya. Setiap replika independen dan melacak posisinya saat ini dengan log biner sumber. Selain itu, setiap replika dapat disinkronkan dengan sumber sesuai dengan jadwalnya sendiri. Data dapat dibaca dari server mana pun, termasuk replikanya.
MySQL memungkinkan tingkat granularity yang tinggi. Dimungkinkan untuk mereplikasi database tertentu atau bahkan tabel tertentu dalam database. Format replikasi default adalah Replikasi Berbasis Pernyataan (SBR), di mana seluruh pernyataan SQL direplikasi. Namun, Replikasi Berbasis Baris (RBR) juga tersedia. Format ini mereplikasi baris yang telah diubah. Dimungkinkan juga untuk mengonfigurasi konfigurasi banyak-ke-banyak yang lebih rumit. Lihat Dokumentasi MySQL untuk informasi lebih lanjut tentang opsi replikasi yang berbeda.
Catatan MySQL sebelumnya menyebut Replikasi Sumber-Replika sebagai "Replikasi Master-Slave". Organisasi MySQL baru-baru ini mengubah terminologi, menjelaskan alasan mereka dalam pembaruan terminologi. Istilah lama "master" telah diubah menjadi "sumber", sementara "budak" sekarang disebut sebagai "replika". Istilah lama mungkin masih muncul di perintah dan tampilan keluaran tertentu saat MySQL memperbarui basis kodenya. Panduan ini menggunakan istilah pilihan MySQL di seluruh instruksi.
Kelebihan Replikasi Data MySQL
Mengaktifkan replikasi sumber-replika menawarkan banyak keuntungan signifikan dibandingkan sistem non-redundan. Daftar di bawah ini memberikan ikhtisar tentang beberapa manfaat:
-
Sangat mudah untuk membuat salinan cadangan langsung kapan saja. Karena proses replikasi tidak sinkron, replikasi dapat terjadi sesuai dengan jadwal apa pun. Replika tidak harus disinkronkan dengan sumbernya agar berfungsi dengan andal.
-
Menambahkan replika dapat meningkatkan waktu kerja dan keandalan untuk keseluruhan sistem. Kontrol utama dapat beralih ke replika jika pemeliharaan diperlukan atau database sumber tidak tersedia.
-
Setiap replika menyediakan contoh database lain yang dapat dibaca. Hal ini memungkinkan program data mining atau analisis untuk menanyakan replika tanpa menempatkan beban tambahan pada database sumber asli.
-
Arsitektur ini meningkatkan skalabilitas dan kinerja. Basis data dibaca dan
SELECT
pernyataan dapat diseimbangkan antara server, mengurangi latensi. -
Pihak ketiga dapat memperoleh akses baca-saja ke database melalui replika, dan tidak lagi memerlukan akses ke sumbernya. Basis data replika dapat dibuat sesuai permintaan saat diperlukan dan dihancurkan saat tidak lagi diperlukan. Teknik ini meningkatkan keamanan dan memastikan tidak mungkin untuk mengubah data asli.
Sebelum Anda Mulai
-
Jika Anda belum melakukannya, buat akun Linode dan Compute Instance. Lihat panduan Memulai Linode dan Membuat Instans Komputasi.
-
Ikuti panduan Menyiapkan dan Mengamankan Instans Komputasi untuk memperbarui sistem Anda. Anda mungkin juga ingin mengatur zona waktu, mengkonfigurasi nama host Anda, membuat akun pengguna terbatas, dan memperkuat akses SSH.
-
Anda harus memiliki setidaknya dua Linode terpisah untuk mengonfigurasi replikasi sumber-replika MySQL. Satu Linode meng-host database sumber, sementara node lain diperlukan untuk server replika.
Catatan Langkah-langkah dalam panduan ini ditulis untuk pengguna non-root. Perintah yang memerlukan hak istimewa yang lebih tinggi diawali dengansudo
. Jika Anda tidak terbiasa dengansudo
perintah, lihat panduan Pengguna dan Grup Linux.
Konfigurasi Replikasi Sumber-Replika di MySQL
Untuk mengkonfigurasi replikasi sumber-replika, MySQL harus diinstal pada dua server terpisah yang dapat berkomunikasi satu sama lain. Instruksi ini ditujukan untuk distribusi Ubuntu tetapi umumnya berlaku untuk semua distribusi Linux. Prosesnya terdiri dari langkah-langkah berikut:
- Instal MySQL.
- Konfigurasi Database Sumber MySQL.
- Konfigurasikan Pengguna MySQL Baru untuk Replika.
- Siapkan Data MySQL untuk Replikasi.
- Konfigurasi Database Replika MySQL.
- Impor Data MySQL yang Direplikasi dan Aktifkan Replikasi.
Instal MySQL
Jika MySQL belum tersedia di kedua Linode, instal menggunakan langkah-langkah berikut:
-
Tingkatkan Linode.
sudo apt-get update && sudo apt-get upgrade
-
Instal server MySQL dan aplikasi klien pada server sumber dan replika.
sudo apt-get install mysql-server mysql-client -y
-
Konfigurasikan opsi keamanan, termasuk kata sandi root, menggunakan
mysql_secure_installation
perintah.sudo mysql_secure_installation
-
Jika Anda menggunakan firewall seperti
ufw
, pastikan itu memungkinkan lalu lintas MySQL melalui. Tambahkan aturan berikut untuk membuka port3306
di firewall.ufw allow mysql
Konfigurasi Database Sumber MySQL
Untuk mengaktifkan replikasi MySQL, edit beberapa variabel di file konfigurasi MySQL utama. Buat perubahan berikut pada konfigurasi database sumber.
-
Temukan file konfigurasi MySQL utama di server database sumber. File ini biasanya ditemukan di
/etc/mysql/mysql.conf.d/mysqld.cnf
. Namun dalam instalasi sebelumnya, mungkin terletak di/etc/my.cnf
atau/etc/mysql/my.cnf
. Itu juga dapat dirujuk dari salah satu file melaluiincludedir
arahan. -
Buka file konfigurasi MySQL dan ubah
bind-address
ke alamat IP server sumber.- File:/ etc/mysql/mysql.conf.d/mysqld.cnf
1 2
bind-address = <source_ip_address>
-
Batalkan komentar atau tambahkan baris untuk
server-id
danlog-bin
. Setelserver-id
ke1
, danlog-bin
ke/var/log/mysql/mysql-bin.log
.Catatan Pastikan
skip_networking
variabel tidak dideklarasikan dimanapun. Beri komentar jika muncul di dalam file ini. Untuk mereplikasi database tunggal, tambahkan barisbinlog_do_db = <database_name>
ke file.- File:/ etc/mysql/mysql.conf.d/mysqld.cnf
1 2 3
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
-
Mulai ulang layanan MySQL.
sudo systemctl restart mysql
-
Verifikasi status MySQL dan pastikan statusnya
active
.sudo systemctl status mysql
mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-05-30 13:06:47 UTC; 1 day 1h ago
Konfigurasikan Pengguna MySQL Baru untuk Replika
Anda harus membuat pengguna baru di server sumber untuk mewakili replika. Pengguna baru dibuat di dalam shell MySQL.
-
Masukkan shell MySQL.
sudo mysql -u root -p
-
Tambahkan pengguna untuk akun replika menggunakan
CREATE USER
MySQL sintaksis. Nama pengguna harus terdiri dari nama akun replika,@
simbol, dan alamat IP server replika. Pilih kata sandi yang lebih aman untuk akun sebagai gantiREPLICA_PASSWORD
.CREATE USER 'replica_account_name'@'replica_ip_address‘ IDENTIFIED WITH sha256_password BY 'REPLICA_PASSWORD';
Catatan Agar replika dapat terhubung dari alamat mana pun, tentukan pengguna sebagai
'replica_account_name'@'%'
.%
simbol mewakili alamat atau domain apa pun. Ini memberikan fleksibilitas ekstra dengan mengorbankan beberapa keamanan. -
Berikan hak replikasi kepada pengguna replika jarak jauh.
GRANT REPLICATION SLAVE ON *.* TO 'replica_account_name'@'replica_ip_address';
Siapkan Data MySQL untuk Replikasi
Pada titik ini, perlu untuk mem-flush dan mengunci database sumber untuk menyusun data untuk replikasi.
-
Tetap berada di dalam shell MySQL dan hapus hak istimewa untuk memuat ulang tabel hibah tanpa memulai ulang database.
FLUSH PRIVILEGES;
-
Kunci database untuk membekukan database pada titik stabil untuk mengekspor data. Tetap jalankan klien MySQL hingga Anda mengekspor database. Memasukkan perintah tulis apa pun atau keluar dari shell MySQL akan melepaskan kunci.
FLUSH TABLES WITH READ LOCK;
Hati-hati Perintah ini memblokir semua komit ke database sumber. Ekspor data sebelum mengizinkan sumber memproses komit lagi. Jika tidak, database replika bisa rusak atau tidak konsisten dengan database sumber. Selesaikan dua langkah tersisa di bagian ini sesegera mungkin.
-
Verifikasi status database menggunakan perintah berikut. Perintah ini menampilkan file log saat ini bersama dengan posisi catatan terakhir dalam file ini. Catat informasi ini karena diperlukan untuk memulai replikasi pada replika nanti.
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 1301 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
-
Menggunakan shell Linux dari konsol yang berbeda, ekspor database menggunakan
mysqldump
alat. Pilih nama yang mudah diingat untuk file tujuan. Sertakan–master-data
opsi untuk menambahkan informasi tentang file log dan posisi catatan saat ini ke log.sudo mysqldump -u root -p -–all-databases -–master-data > databasecopy.sql
Catatan Untuk mengekspor satu database, sertakan
--opt <database_name>
pilihan daripada-–all-databases
. -
Kembali ke shell MySQL asli, buka kunci database sumber.
UNLOCK TABLES;
-
Keluar dari shell MySQL.
QUIT;
-
Salin file database yang diekspor ke server database replika, menggunakan
ftp
,scp
, atau metode lain untuk mentransfer file.scp databasecopy.sql [email protected]<replica_ip_address>
Konfigurasi Database Replika MySQL
Konfigurasi berikut harus diterapkan ke konfigurasi database replika. Untuk menginstal MySQL di server replika, lihat bagian Instal MySQL.
-
Buka file MySQL utama, biasanya terletak di
/etc/mysql/mysql.conf.d/mysqld.cnf
, dan ubahbind-address
untuk mencocokkan alamat IP server replika.- File:/ etc/mysql/mysql.conf.d/mysqld.cnf
1 2
bind-address = xx.xx.xx.xx
-
Batalkan komentar atau tambahkan baris untuk
server-id
danlog-bin
.server-id
harus disetel ke2
pada replika, sedangkanlog-bin
variabel harus disetel ke/var/log/mysql/mysql-bin.log
. Tambahkan variabel untukrelay-log
dan atur ke/var/log/mysql/mysql-relay-bin.log
.Catatan Pastikan
skip_networking
variabel tidak disetel di mana pun di dalam file ini. Untuk mereplikasi database tunggal, tambahkan direktif berikut ke filebinlog_do_db = database_name
. Untuk mengonfigurasi lebih dari satu replika, beri nomorserver-id
nilai secara berurutan meningkat. Misalnya, replika kedua akan memilikiserver-id
dari3
.- File:/ etc/mysql/mysql.conf.d/mysqld.cnf
1 2 3 4
server-id = 2 log_bin = /var/log/mysql/mysql-bin.log relay-log = /var/log/mysql/mysql-relay-bin.log
-
Mulai ulang layanan MySQL untuk memasukkan perubahan.
sudo systemctl restart mysql
-
Verifikasi status MySQL dan pastikan statusnya
active
.sudo systemctl status mysql
mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:> Active: active (running) since Mon 2021-05-31 16:29:48 UTC; 6s ago
-
(Opsional ) MySQL merekomendasikan penggunaan SSL untuk terhubung ke sumber untuk keamanan yang lebih baik. Informasi lebih lanjut tentang mengkonfigurasi SSL dapat ditemukan di Dokumentasi SSL MySQL. Alat Penyiapan RSA dapat digunakan untuk mempercepat proses ini.
Impor Data MySQL yang Direplikasi dan Aktifkan Replikasi
Langkah selanjutnya adalah mengimpor salinan data database, mengatur sumber replikasi, dan memulai ulang server database replika. Replika kemudian harus sinkron dan siap digunakan.
-
Masukkan perintah berikut dari shell Linux untuk mengimpor database sumber. Tentukan nama database yang digunakan untuk mengekspor data tadi.
sudo mysql -u root -p < databasecopy.sql
-
Masuk ke shell MySQL.
sudo mysql -u root -p
-
Hentikan replikanya.
STOP REPLICA;
-
Masukkan
CHANGE REPLICATION SOURCE
perintah, bersama dengan rincian berikut. Gantikan alamat IP server database sumber dengansource_ip_address
. UntukSOURCE_USER
danSOURCE_PASSWORD
, masukkan detail nama pengguna dan kata sandi replika dari dalam Konfigurasi Pengguna MySQL baru untuk bagian Replika. UntukSOURCE_LOG_FILE
danSOURCE_LOG_POS
nilai, masukkan informasi yang Anda rekam dariSHOW MASTER STATUS;
perintah.CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
Catatan Untuk menggunakan SSL untuk koneksi, yang direkomendasikan MySQL, tambahkan atribut
SOURCE_SSL=1
ke perintah. Informasi lebih lanjut tentang menggunakan SSL dalam konteks replikasi sumber-replika dapat ditemukan di dokumentasi MySQL. -
Mulai ulang replika.
START REPLICA;
-
Verifikasi status replika. Replika harus menunggu acara, dan tidak boleh ada
Last_IO_Error
atauLast_Error
acara.Slave_SQL_Running_State
entri harus menyatakan replika telah membaca log relai.SHOW REPLICA STATUS\G
Slave_IO_State: Waiting for master to send event Master_Host: 178.79.153.39 Master_User: replica Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000006 Read_Master_Log_Pos: 156 Relay_Log_File: mysql-relay-bin.000006 Relay_Log_Pos: 371 Relay_Master_Log_File: mysql-bin.000006 Slave_IO_Running: Yes Slave_SQL_Running: Yes .. Last_Errno: 0 Last_Error: .. Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 5bed9d10-c140-11eb-bc63-f23c92a2a6ac Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Uji Replikasi Sumber-Replika MySQL
Jika database sumber sudah diisi sebelum replika dibuat, pengujian tambahan diperlukan. Dalam hal ini, verifikasi database dan tabel yang ada di sumber ada di replika setelah data diimpor. Dalam SHOW REPLICA STATUS
menampilkan Slave_SQL_Running_State
entri harus membaca Slave has read all relay log
.
Untuk memverifikasi replikasi terjadi dengan benar, buat database atau tabel baru di sumbernya. Setelah beberapa detik, entri baru akan muncul di replika. Validasi keberadaan database menggunakan SHOW DATABASES;
memerintah. Untuk mengonfirmasi keberadaan tabel, alihkan ke database menggunakan USE databasename;
, dan masukkan SHOW TABLES;
. Sebaiknya jalankan SHOW REPLICA STATUS
perintah dan meneliti output untuk setiap kesalahan. Last_Error
dan Last_IO_Error
kolom harus kosong dan replika harus tetap terhubung.
Pelajari Lebih Lanjut Tentang Replikasi Sumber-Replika MySQL
Sumber terbaik untuk informasi tentang replikasi sumber-replika adalah dokumentasi resmi MySQL. Bagian replikasi berisi informasi yang lebih luas tentang arsitektur dan proses instalasi. Forum MySQL mungkin juga membantu.
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.
- Dokumentasi MySQL