Bahkan ketika beberapa orang IT mendengar ungkapan “Replikasi database “, mereka sering mengaitkannya dengan kebutuhan memiliki banyak salinan dari informasi yang sama untuk menghindari kehilangan data jika terjadi kegagalan perangkat keras atau kerusakan data. Meskipun hal itu benar dalam beberapa hal, replikasi database lebih dari sekadar konsep umum untuk mencadangkan database dan ketersediaan data.
Di antara manfaat lain dari replikasi basis data dalam pengaturan master-slave yang dapat kami sebutkan:
- Pencadangan dapat dilakukan di server slave tanpa mempengaruhi (dan dipengaruhi oleh) operasi tulis di master.
- Operasi intensif sumber daya (seperti analisis data) dapat dilakukan pada slave tanpa memengaruhi kinerja master.
Dalam artikel ini kami akan menjelaskan cara mengatur replikasi master-slave di MariaDB 10.1 . Berbeda dengan replikasi klasik, MariaDB memperkenalkan konsep ID Transaksi Global (GTID ) di v10.0 , yang memungkinkan untuk mengubah budak untuk terhubung dan mereplikasi dari master yang berbeda dengan mudah. Selain itu, status slave dicatat dengan cara yang aman dari gangguan (pembaruan status dilakukan dalam transaksi yang sama dengan pembaruan data).
Jika Anda mencari MySQL replikasi di bawah CentOS/RHEL 6 , ikuti panduan ini Setup Replikasi MySQL (Master-Slave) di CentOS/RHEL 6
Menginstal MariaDB 10.1 di CentOS/RHEL 7 dan Debian 8/9
Lingkungan pengujian kami terdiri dari mesin-mesin berikut (keduanya CentOS 7 ):
Tuan:192.168.0.18Budak:192.168.0.19
Untuk menginstal versi terbaru MariaDB, kita perlu menambahkan repositori mereka ke server kita. Jika Anda menggunakan versi lama MariaDB katakanlah 5.5, pertimbangkan untuk memutakhirkan ke versi 10.1 terbaru menggunakan artikel di bawah ini.
- Tingkatkan MariaDB 5.5 ke MariaDB 10.1
Dalam CentOS/RHEL
Buat file bernama MariaDB.repo
di dalam /etc/yum.repos.d dengan konten berikut di kedua Master dan Budak sistem:
# Daftar repositori MariaDB 10.1 CentOS - dibuat 23-01-2016 14:16 UTC# http://mariadb.org/mariadb/repositories/[mariadb]name =MariaDBbaseurl =http://yum.mariadb.org/ 10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1
Simpan file dan instal MariaDB di kedua server menggunakan yum:
# yum update &&yum install MariaDB-server MariaDB-client
Di Debian/Ubuntu
Tambahkan kunci untuk mengotentikasi paket dan repositori MariaDB:
# apt-get install software-properties-common# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db# add-apt-repository 'deb [arch=amd64,i386] http:/ /mirror.edatel.net.co/mariadb/repo/10.1/debian jessie utama'
Catatan :Ganti distribusi nama dan nama kode di baris yang disorot di atas.
Instal menggunakan apt-get perintah:
# apt-get update# apt-get install mariadb-server
Setelah Anda menginstal MariaDB, jalankan mysql_secure_installation
prosedur pada master dan slave, mari siapkan database pengujian sampel di mesin master.
Menyiapkan Contoh Database MySQL di Master
Kami sekarang akan mengatur di server master Employees
basis data dari https://github.com/datacharmer/test_db (yang menyediakan kumpulan data 4 juta catatan tersebar di enam tabel) dalam dua langkah sederhana:
Kloning repositori dan gunakan untuk mengimpor database sampel ke instalasi MariaDB Anda:
# git clone https://github.com/datacharmer/test_db# cd test_db# mysqlMengonfigurasi Server MySQL di Master
Untuk mengonfigurasi master, ikuti langkah-langkah berikut:
LANGKAH 1: Edit
/etc/my.cnf
mengajukan. Di bawah[mysqld]
bagian, tambahkan empat baris berikut:log-binserver_id=1replicate-do-db=employeesbind-address=192.168.0.18dan mulai ulang MariaDB:
# systemctl restart mariadbLANGKAH 2: Masuk ke server MariaDB sebagai root, buat budak pengguna dan tetapkan hibah yang diperlukan:
MariaDB [(none)]> BUAT PENGGUNA 'slave'@'localhost' DIIDENTIFIKASI DENGAN 'SlavePassword';MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* ATAS slave DIIDENTIFIKASI OLEH 'SlavePassword' WITH GRANT OPTION;MariaDB [(none)]> HAK ISTIMEWA FLUSH;MariaDB [(none)]> FLUSH TABLES DENGAN READ LOCK;MariaDB [(none)]> TUNJUKKAN STATUS MASTER;terakhir perintah (TAMPILKAN STATUS MASTER ) mengembalikan posisi saat ini dalam log biner (koordinat tepat yang menunjukkan pada titik mana slave harus mulai mereplikasi dari:
LANGKAH 3: Keluar dari perintah MariaDB (dengan
exit;
) dan gunakan perintah berikut untuk mengambil snapshot dari database karyawan. Saat Anda menekan Enter , Anda akan diminta untuk mengetikkan kata sandi untuk root yang Anda atur sebelumnya melaluimysql_secure_installation
:# mysqldump -u root -p karyawan> karyawan-dump.sqlSetelah dump selesai, sambungkan ke server database lagi untuk membuka kunci tabel dan kemudian keluar:
MariaDB [(none)]> BUKA TABEL;MariaDB [(none)]> keluar;LANGKAH 4: Salin dump ke slave:
# scp employee-dump.sql [email protected]:/root/LANGKAH 5: Jalankan
mysql_upgrade
prosedur untuk memutakhirkan tabel sistem (Anda akan diminta memasukkan kata sandi root MariaDB):# mysql_upgrade -u root -pLANGKAH 6: Izinkan layanan database melalui firewall:
# firewall-cmd --add-service=mysql# firewall-cmd --add-service=mysql --permanent# firewall-cmd --reloadSekarang mari kita konfigurasikan slave.
Mengonfigurasi Server MySQL pada Slave
Untuk mengkonfigurasi budak, ikuti langkah-langkah berikut:
LANGKAH 1: Buat akun untuk melakukan tugas replikasi. Hubungkan ke server MariaDB lokal dengan:
# mysql -u root –pdan masukkan kata sandi yang Anda buat sebelumnya.
LANGKAH 2: Setelah terhubung ke server database, buat pengguna dan database kosong, dan berikan izin:
MariaDB [(none)]> BUAT karyawan DATABASE;MariaDB [(none)]> BERIKAN SEMUA HAK ISTIMEWA PADA karyawan.* KEPADA 'slave'@'localhost' DENGAN GRANT OPTION;MariaDB [(none)]> HAK ISTIMEWA;LANGKAH 3: Keluar dari perintah MariaDB dan muat dump yang dibuat di server master:
# mysql -u root -p karyawanLANGKAH 4: Edit
/etc/my.cnf
file untuk menetapkan ID server ke budak di bawah[mysqld]
bagian. Perhatikan bahwa itu harus berupa bilangan bulat yang berbeda dari 1 , seperti yang kami gunakan 1 di master:server_id=2replicate-do-db=karyawanMulai ulang server basis data:
# systemctl restart mariadbLANGKAH 5: Jalankan
mysql_upgrade
prosedur untuk memutakhirkan tabel sistem (Anda akan diminta memasukkan kata sandi root MariaDB):# mysql_upgrade -u root -pLANGKAH 6: Setelah dump telah diimpor ke slave, kita tinggal beberapa langkah lagi untuk mulai mereplikasi. Masuk ke database dan jalankan perintah berikut di prompt MariaDB. Berikan perhatian khusus pada
MASTER_LOG_FILE
danMASTER_LOG_POS
variabel, yang harus cocok dengan nilai yang dikembalikan oleh SHOW MASTER STATUS di LANGKAH 2 dari “Mengonfigurasi master” di atas.MariaDB [(none)]> GANTI MASTER KE MASTER_HOST='192.168.0.18', MASTER_USER='slave', MASTER_PASSWORD='SlavePassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=314, MASTER_CONNECT_RETRY=10, MASTER_USE_GT;LANGKAH 7: Mulai slave dan periksa statusnya tanpa keluar dari perintah MariaDB:
MariaDB [(none)]> MULAI BUDAK;MariaDB [(none)]> TAMPILKAN STATUS BUDAK\G;Bukan berarti Anda membutuhkan ini sekarang, tetapi perhatikan bahwa Anda dapat menghentikan slave dengan:
MariaDB [(none)]> HENTIKAN BUDAK;jika
SHOW SLAVE STATUS\G;
perintah mengembalikan kesalahan apa pun. Gunakan kesalahan tersebut untuk memecahkan masalah dan kemudian jalankanSTART SLAVE;
untuk menguji lagi.Uji Replikasi Database MySQL/MariaDB
Mari tambahkan rekor ke karyawan tabel di server master:
MariaDB [(none)]> INSERT INTO karyawan (emp_no, tanggal_lahir, nama_depan, nama_belakang, jenis kelamin, tanggal_pekerjaan) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');Kemudian verifikasi bahwa perubahan ini telah direplikasi di slave:
MariaDB [(none)]> GUNAKAN karyawan;MariaDB [(none)]> PILIH * DARI karyawan WHERE emp_no=500000;Seperti yang Anda lihat, replikasi bekerja dengan benar dari master ke slave.
Ringkasan
Pada artikel ini kami telah menjelaskan cara menginstal versi terbaru MariaDB di CentOS/RHEL 7 dan Debian 8/9, dan membahas cara menyiapkan replikasi master-slave dengan GTID. Untuk informasi lebih lanjut, Anda mungkin ingin merujuk ke Panduan Replikasi MariaDB, dan jangan ragu untuk menghubungi kami menggunakan formulir di bawah ini jika Anda memiliki pertanyaan atau komentar.