Ini adalah proses membuat versi duplikat dari DB. Proses replikasi tidak hanya menyalin database, tetapi juga menyinkronkan perubahan dari master ke salah satu budak. Tetapi ini tidak berarti bahwa database budak adalah salinan identik dari master, karena replikasi dapat dikonfigurasi bahwa hanya skema tabel atau kolom atau baris yang akan direplikasi, yaitu replikasi parsial. Replikasi memastikan bahwa objek yang dikonfigurasi secara spesifik tetap sinkron di antara database yang berbeda.
Konsep Replikasi Mariadb
Cadangan :Replikasi dapat digunakan untuk backup DB. Misalnya, Anda memiliki master -> replikasi budak. Jika master hilang (hdd gagal, misalnya) Anda dapat memulihkan db Anda dari master.
Penskalaan :Anda dapat menggunakan master -> replikasi budak untuk solusi penskalaan. Misalnya, jika Anda memiliki beberapa kueri besar dan memiliki SQL, menggunakan replcation Anda dapat memisahkan kueri ini untuk setiap node replika. Menulis SQL harus dilakukan hanya pada master, untuk query read-only server slave dapat digunakan.
Menyebarkan solusi :Anda dapat menggunakan replikasi untuk distribusi. Misalnya, Anda dapat mendistribusikan data penjualan yang berbeda ke database yang berbeda.
Solusi kegagalan :Misalnya Anda memiliki, master -> slave(1) -> slave(2) -> slave(3) replikasi. Anda dapat menulis skrip untuk pemantauan master, jika master gagal, skrip dapat dengan cepat mengubah slave(1) baru untuk master master -> slave(1) -> slave(2) dan aplikasi Anda akan terus bekerja tanpa downtime
Demonstrasi diagram sederhana dari replikasi
Sebelum Anda mulai, ketahuilah apa itu log biner dan Ibdata1. Log biner berisi catatan tentang semua perubahan dalam db, data dan struktur, serta berapa lama waktu yang dibutuhkan setiap pernyataan untuk dieksekusi. Log bin terdiri dari kumpulan file log dan indeks. Artinya pernyataan SQL utama seperti CREATE, ALTER, INSERT, UPDATE dan DELETE akan dimasukkan ke log ini, pernyataan seperti SELECT tidak akan dicatat. Info ini dapat dicatat ke file query.log umum. Secara sederhana Ibdata1 adalah file yang berisi semua tabel dan semua info tentang db.
Konfigurasi server utama
Bagus untuk memperbarui server
sudo yum install update -y && sudo yum install upgrade -y
Kami sedang mengerjakan server centos 7
sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
Instal MariaDB
sudo yum install mariadb-server -y
Mulai MariaDB dan aktifkan untuk memulai saat server boot
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Keluaran:
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
Periksa status MariaDB
sudo service mariadb status
atau gunakan
sudo systemctl is-active mariadb.service
Keluaran:
Redirecting to /bin/systemctl status mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
Setel kata sandi MariaDB
mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit
SOME_ROOT_PASSWORD - kata sandi root Anda. Saya kasus saya, saya akan menggunakan "q" - kata sandi, lalu coba masuk:
sudo mysql -u root -pSOME_ROOT_PASSWORD
Keluaran:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Ketik 'bantuan;' atau '\h' untuk bantuan. Ketik '\c' untuk menghapus pernyataan input saat ini.
Mari kita buat database dengan tabel dengan beberapa data
Buat database/skema
sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;
Dimana:
test_repl - Name of shcema which will be replicated
Keluaran:
Query OK, 1 row affected (0.00 sec)
Buat tabel Orang
mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Keluaran:
mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)
Masukkan beberapa data
mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");
Keluaran:
Query OK, 5 row affected (0.00 sec)
Periksa data
mysql> select * from Persons;
Keluaran:
+----------+-----------+------------+----------+-------+
| PersonID | LastName | FirstName | Address | City |
+----------+-----------+------------+----------+-------+
| 1 | LastName1 | FirstName1 | Address1 | City1 |
| 1 | LastName1 | FirstName1 | Address1 | City1 |
| 2 | LastName2 | FirstName2 | Address2 | City2 |
| 3 | LastName3 | FirstName3 | Address3 | City3 |
| 4 | LastName4 | FirstName4 | Address4 | City4 |
| 5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+
Konfigurasikan MariaDB untuk replikasi
Anda harus mengedit file my.cnf di server Master untuk mengaktifkan pencatatan biner dan mengatur id server. Saya akan menggunakan editor teks vi, tetapi penggunaan dapat menggunakan apa saja yang cocok untuk Anda seperti nano, joe dll.
sudo vi /etc/my.cnf
dan masukkan ke config di bagian [mysqld] baris seperti itu.
log-basename=master
log-bin
binlog-format=row
server_id=1
Keluaran:
Kemudian restart MariaDB:
sudo service mariadb restart
Masuk ke MariaDB dan periksa log biner:
sudo mysql -u root -pq test_repl
mysql> TAMPILKAN STATUS MASTER;
Keluaran:
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 3913 | | |
+--------------------+----------+--------------+------------------+
Ingat : Nilai "File" dan "Posisi". ANDA MEMBUTUHKAN NILAI INI DI SERVER SLAVE
Buat pengguna untuk replikasi
mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;
Keluaran:
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Periksa pengguna di db
mysql> select * from mysql.user WHERE user="replication_user"\G;
Keluaran:
mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....
Buat DB dump (snapshot dari semua data yang akan direplikasi) dari master
mysqldump -uroot -pSOME_ROOT_PASSWORD test_repl > full-dump.sql
Dimana:
SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;
Anda perlu memulihkan mysql dump (full-dump.sql) di server budak. Ini diperlukan untuk replikasi.
Konfigurasi server budak
Semua perintah ini perlu Anda lakukan di server budak
Mari kita asumsikan bahwa kita memiliki server CentOS 7.x yang baru / diperbarui dengan server mariaDB terbaru dan Anda dapat login sebagai root ke server maria DB (ini dijelaskan di bagian pertama artikel)
Masuk ke konsol Maria DB dan buat DB
mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;
Pulihkan data dari master di server budak
mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql
Dimana:
full-dump.sql - its DB Dump that you have create at test server.
Masuk ke Maria DB dan atur replikasi
mysql> CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;
Dimana:
MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master
Mulai mode budak
mysql> slave start;
Keluaran:
Query OK, 0 rows affected (0.00 sec)
Periksa status budak
mysql> show slave status\G;
Keluaran:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4175
Relay_Log_Space: 1089
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
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
1 row in set (0.00 sec)
Pada langkah ini semua harus baik-baik saja, dan bukan kesalahan yang seharusnya ada di sini.
Uji replikasi
Di server MAIN/MASTER tambahkan beberapa entitas ke DB
mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");
Lalu pergi ke server SLAVE dan periksa data yang direplikasi
mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName | FirstName | Address | City |
+----------+-----------+------------+----------+-------+
...................
| 6 | LastName6 | FirstName6 | Address6 | City6 |
| 7 | LastName7 | FirstName7 | Address7 | City7 |
| 8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+
Anda dapat melihat data direplikasi ke server budak. Ini berarti bahwa replikasi bekerja. Semoga Anda menikmati artikelnya. Beri tahu kami jika Anda memiliki pertanyaan.