GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOSLinuxでMariaDBレプリケーションを構成する方法

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 |
+----------+-----------+------------+----------+-------+

データがスレーブサーバーに複製されていることがわかります。これは、レプリケーションが機能していることを意味します。あなたが記事を楽しんだことを望みます。ご不明な点がございましたら、お気軽にお問い合わせください。


Cent OS
  1. Linux / CentOS/RedhatでLVMを構成する方法

  2. Linux / Centos/RedhatでYUMリポジトリを設定する方法| Linux / Centos/RedhatのYUM

  3. CentOS7でOpenSSHを構成する方法

  1. Rocky Linux /Centos8でdockerをインストールして構成する方法

  2. Rocky Linux /Centos8にRedis6をインストールして構成する方法

  3. Rocky Linux /CentOS8にAnsibleをインストールして構成する方法

  1. RHEL 8 / CentOS8LinuxシステムにRをインストールして構成する方法

  2. Rocky Linux / Alma Linux /CentOS8にErlangをインストールする方法

  3. RockyLinux8およびCentOS8にMonoをインストールして構成する方法