GNU/Linux >> Linux の 問題 >  >> Linux

CentOS7でMariaDBマスタースレーブレプリケーションを設定する方法

データベースレプリケーションの概念により、マスターサーバーから複数のサーバーにデータが確実にコピーされます。これにより、データの冗長性が提供され、マスターノードに障害が発生した場合にデータが失われないようになります。この記事では、CentOS7でのMariaDBマスタースレーブレプリケーションについて説明します。マスターノードにあるデータベースからスレーブシステムにある別のデータベースにデータをコピーする方法を示します。

MariaDBマスター/スレーブレプリケーションシナリオ

レプリケーションの設定は次のとおりです:



Master node (CentOS 7 64 bit) : IP 173.82.2.236

Slave node: (CentOS 7 64 bit) : IP 173.82.94.57

ステップ1:マスターノードとスレーブノードの両方にMariaDBをインストールします

開始するには、マスターノードとスレーブノードの両方にログインし、次のコマンドを実行してMariaDBサーバーをインストールします

yum install mariadb-server mariadb

サンプル出力

MariaDBサービスを開始し、起動時に有効にします



# systemctl start mariadb
# systemctl enable mariadb

サンプル出力

ステップ2:マスターとスレーブの両方にMariaDBパスワードを設定する

デフォルトでは、MariaDB / MySQLのパスワードは通常空であり、許可されていないユーザーがデータベースにアクセスできます。パスワードを構成し、他のいくつかの設定で強化することにより、パスワードを安全にする必要があります。これを実現するには、マスターノードとスレーブノードの両方で以下のコマンドを実行します

mysql_secure_installation

サンプル出力

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y ## Enter Y and press Enter
New password:   ## Enter new password
Re-enter new password:  ## Enter password again
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y  ## Enter Y and press Enter
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y  ## Enter Y and press Enter
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y  ## Enter Y and press Enter
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y  ## Enter Y and press Enter
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

ステップ3:マスターノードの構成

両方のノードでMariaDBインスタンスを強化したので、マスターノードを構成しましょう。

まず、MariaDBのポート3306を許可する必要があります CentOS7ファイアウォールを越えて。これを行うには、コマンドを実行します

# firewall-cmd --add-port=3306/tcp --zone=public --permanent

サンプル出力

ファイアウォールをリロードして変更を有効にします

# firewall-cmd --relaod

サンプル出力

次に、/etc/my.cnfにいくつかの変更を加えます ファイル

vim /etc/my.cnf

[mysqld]に次の行を追加します セクション



[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=replica_db
[...]

ここでは、レプリカ_db は、作成してスレーブ全体に複製するデータベースです。

次に、コマンドを使用してMariaDBサービスを再起動します:

systemctl restart mariadb

次に、rootユーザーとしてMariaDBにログインします:

mysql -u root -p

次のステップは、レプリカ_dbを作成することです データベース

MariaDB [(none)]> CREATE DATABASE replica_db;

次に、スレーブユーザーとパスワードを作成します。たとえば、 slave_userを使用します スレーブユーザー名およびP@ ssword100として パスワードとして:


MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'P@ssword100';
Query OK, 0 rows affected (0.00 sec)

次に、示されているように特権をフラッシュします


MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

次に、以下のコマンドを実行してマスターステータスを表示します

SHOW MASTER STATUS;

ステップ4:マスターサーバーでデータベースをバックアップし、スレーブに転送する

次に、以下のコマンドを実行して、すべてのマスターデータベースをバックアップします

 # mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql

これにより、 masterdatabase.sqlというファイルが作成されます。 現在の作業ディレクトリにあります。

再度rootユーザーとしてMySQLにログインします:

mysql -u root -p

そして、テーブルのロックを解除します:



MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

次に、 masterdatabase.sqlをコピーします スレーブサーバーにファイルします。

したがって、コマンドは次のようになります。

scp masterdatabase.sql [email protected]:/home

173.82.94.57がMariaDBスレーブサーバーであることを思い出してください。

ステップ4:MariaDBスレーブの構成

次に、MariaDBスレーブノードを構成します

/etc/my.cnfファイルを編集します ファイル

vim /etc/my.cnf

[mysqld]の下に次のエントリを追加します 示されているセクション

 
[mysqld]
server-id = 2
replicate-do-db=replica_db
[...]

ここで、replica_dbは、マスターサーバーノード上に作成されたデータベースです。また、マスターサーバーとスレーブサーバーの両方に異なるサーバーIDを使用するように注意してください。この場合、server-idは2です

ファイルを保存して終了します。

次に、図のようにマスターデータベースをインポートします

mysql -u root -p < /home/masterdatabase.sql 

masterdatabase.sqlファイルをマスターサーバーからスレーブサーバーの/home/ディレクトリにすでにコピーしていることに注意してください。

MariaDBサービスを再起動して、変更を有効にします。

systemctl restart mariadb

次に、rootユーザーとしてMariaDBにログインします

mysql -u root -p

スレーブを停止します。マスターログファイルの場所をスレーブに指示し、スレーブを起動します。


MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='173.82.2.236', MASTER_USER='slave_user', MASTER_PASSWORD='P@ssword100', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=473;
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

次に、以下のコマンドを実行して、スレーブのステータスを表示します

MariaDB [(none)]> SHOW SLAVE STATUS\G;

MariaDBレプリケーションのテスト

マスター側:

MariaDBマスターサーバーに移動し、次のコマンドを使用してMariaDBインスタンスにログインします

mysql -u root -p

データベースreplica_dbを作成します

次に、テーブルPersonsを作成します

図のようにレコードを追加します

最後に、テーブルを表示します

スレーブ側:

次に、スレーブサーバーでMariaDBデータベースインスタンスにログインします

mysql -u root -p

次に、以下のコマンドを使用してデータベースを表示します

SHOW DATABASES;

ご覧のとおり、 reply_db データベースが存在し、複製されたことを意味します!

先に進んでデータベース内を調べ、テーブルが存在するかどうかを確認しましょう。実行

use replica_db;

次に

show tables;

ご覧のとおり、テーブル マスターノードで以前に作成されたものが存在します。完璧です!

データベースが完全に複製されていることを確認して、そのレコードが完全に複製されていることを明らかにしましょう

select *from replica_db;

観察されたように、すべての内容は複製されており、正確です。行く方法!

この記事では、CentOS7でMariaDBマスタースレーブレプリケーションをセットアップする方法を学習しました。試してみて、気軽に試してみてください。


Linux
  1. MySQLまたはMariaDBのルートパスワードをリセットする方法

  2. Mutt:パスワードを安全に保存する方法は?

  3. CentOS8でVSFTPDを設定する方法

  1. CentOS7にMariaDBをインストールする方法

  2. CentOS8でWireGuardVPNを設定する方法

  3. CentOS 7.xにMySQLをインストールする方法は?

  1. CentOS7でMySQLマスタースレーブレプリケーションを構成する方法

  2. Debian 10でMySQL(MariaDB)マスタースレーブレプリケーションを構成する方法

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