DBの複製バージョンを作成するプロセスです。レプリケーションプロセスは、データベースをコピーするだけでなく、マスターからスレーブの1つに変更を同期します。ただし、これは、スレーブデータベースがマスターの同一のコピーであることを意味するものではありません。これは、テーブル、列、または行のスキーマのみがレプリケートされるようにレプリケーションを構成できるためです。つまり、部分レプリケーションです。レプリケーションにより、これらの特定の構成済みオブジェクトが異なるデータベース間で同期された状態に保たれます。
Mariadbレプリケーションの概念
バックアップ :レプリケーションはDBバックアップに使用できます。たとえば、マスター->スレーブレプリケーションがあります。マスターが失われた場合(たとえば、hddが失敗した場合)、マスターからデータベースを復元できます。
スケーリング :ソリューションのスケーリングには、マスター->スレーブレプリケーションを使用できます。たとえば、大きなクエリがいくつかあり、SQLクエリがある場合、replcationを使用すると、replcationsノードごとにこのクエリを分離できます。読み取り専用クエリではスレーブサーバーを使用できるため、SQLの書き込みはマスターでのみ実行する必要があります。
拡散ソリューション :配布にレプリケーションを使用できます。たとえば、さまざまな販売データをさまざまなデータベースに配布できます。
フェイルオーバーソリューション :たとえば、master-> slave(1)-> slave(2)-> slave(3)レプリケーションがあります。マスター監視用のスクリプトを作成できます。マスターに障害が発生した場合、スクリプトはすぐにslave(1)をマスターmaster-> slave(1)-> slave(2)に変更でき、アプリケーションはダウンタイムが発生するまで動作し続けます
レプリケーションの簡単な図式デモンストレーション
始める前に、バイナリログとIbdata1とは何かをよく理解してください。 バイナリログ データベース、データ、構造のすべての変更、および各ステートメントの実行にかかった時間に関するレコードが含まれています。ビンログは、セットログファイルとインデックスで構成されます。これは、CREATE、ALTER、INSERT、UPDATE、DELETEなどのメインSQLステートメントがこのログに入れられ、SELECTなどのステートメントはログに記録されないことを意味します。これらの情報は、一般的なquery.logファイルに記録できます。単純なIbdata1 は、dbに関するすべてのテーブルとすべての情報を含むファイルです。
マスターサーバーの構成
サーバーを更新しておくとよい
sudo yum install update -y && sudo yum install upgrade -y
CentOS7サーバーに取り組んでいます
sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
MariaDBをインストールする
sudo yum install mariadb-server -y
MariaDBを起動し、サーバーの起動時に起動できるようにします
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
出力:
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
MariaDBのステータスを確認する
sudo service mariadb status
または使用
sudo systemctl is-active mariadb.service
出力:
Redirecting to /bin/systemctl status mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
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-ルートパスワード。私の場合、「q」-パスワードを使用してから、ログインしてみます:
sudo mysql -u root -pSOME_ROOT_PASSWORD
出力:
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.
'help;'と入力しますまたは「\h」でヘルプを表示します。 '\ c'と入力して、現在の入力ステートメントをクリアします。
いくつかのデータを含むテーブルを使用してデータベースを作成しましょう
データベース/スキーマを作成する
sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;
場所:
test_repl - Name of shcema which will be replicated
出力:
Query OK, 1 row affected (0.00 sec)
Personsテーブルを作成する
mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
出力:
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)
データを挿入
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");
出力:
Query OK, 5 row affected (0.00 sec)
データを確認する
mysql> select * from Persons;
出力:
+----------+-----------+------------+----------+-------+
| 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 |
+----------+-----------+------------+----------+-------+
レプリケーション用にMariaDBを構成する
マスターサーバーのmy.cnfファイルを編集して、バイナリログを有効にし、サーバーのIDを設定する必要があります。私はviテキストエディタを使用しますが、nano、joeなど、あなたに適したものを使用できます。
sudo vi /etc/my.cnf
そして、そのような行の[mysqld]セクションのconfigに配置します。
log-basename=master
log-bin
binlog-format=row
server_id=1
出力:
次に、MariaDBを再起動します:
sudo service mariadb restart
MariaDBにログインし、バイナリログを確認します:
sudo mysql -u root -pq test_repl
mysql> SHOW MASTER STATUS;
出力:
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 3913 | | |
+--------------------+----------+--------------+------------------+
覚えておいてください: 「ファイル」と「位置」の値。スレーブサーバーでこの値が必要になります
レプリケーション用のユーザーを作成する
mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;
出力:
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
dbでユーザーを確認する
mysql> select * from mysql.user WHERE user="replication_user"\G;
出力:
mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....
マスターからDBダンプ(複製されるすべてのデータのスナップショット)を作成します
mysqldump -uroot -pSOME_ROOT_PASSWORD test_repl > full-dump.sql
場所:
SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;
スレーブサーバーでmysqlダンプ(full-dump.sql)を回復する必要があります。複製に必要です。
スレーブサーバーの構成
スレーブサーバーで実行する必要のあるこのすべてのコマンド
最新のmariaDBサーバーを備えた新しい/更新されたCentOS7.xサーバーがあり、maria DBサーバーにrootとしてログインできると仮定します(これは記事の最初の部分で説明されています)
Maria DBコンソールにログインし、DBを作成します
mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;
スレーブサーバーでマスターからデータを回復する
mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql
場所:
full-dump.sql - its DB Dump that you have create at test server.
Maria DBにログインし、レプリケーションを設定します
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;
場所:
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
スレーブモードを開始
mysql> slave start;
出力:
Query OK, 0 rows affected (0.00 sec)
スレーブの状態を確認する
mysql> show slave status\G;
出力:
*************************** 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)
このステップでは、すべてが大丈夫であり、エラーがここにあるべきではありません。
レプリケーションをテストする
MAIN/MASTERサーバーでいくつかのエンティティを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");
次に、SLAVEサーバーに移動し、複製されたデータを確認します
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 |
+----------+-----------+------------+----------+-------+
データがスレーブサーバーに複製されていることがわかります。これは、レプリケーションが機能していることを意味します。あなたが記事を楽しんだことを望みます。ご不明な点がございましたら、お気軽にお問い合わせください。