MySQL マスター/スレーブ レプリケーション (1 つのマスターと 1 つのスレーブ)

MySQL マスター/スレーブ レプリケーション (1 つのマスターと 1 つのスレーブ)

マスタースレーブレプリケーションとは

MySQL のマスター/スレーブ レプリケーションとは、MySQL データベース サーバーのマスター ノードから 1 つ以上のスレーブ ノードにデータをコピーできることを意味します。マスター ノードはすべての書き込み操作を記録し、これらの書き込み操作をバイナリ ログに記録します。スレーブノードはマスターノードに接続することでこれらのバイナリログを取得・適用することでデータレプリケーションを実現します。

MySQL はデフォルトで非同期レプリケーションを使用します。つまり、マスター ノードが書き込み操作を実行した後、スレーブ ノードがこれらの操作を適用するのを待たずに、ただちにクライアントに操作を返します。スレーブ ノードは、マスター ノードのバイナリ ログを非同期で受信して適用し、マスター ノード データとの一貫性を維持します。

スレーブ ノードはマスター ノード内のすべてのデータベースを複製することも、特定のデータベースまたは特定のテーブルを複製することを選択することもできます。マスターノードとスレーブノードのパラメータを設定することで、対応した設定を行うことができます。

マスタースレーブレプリケーションの原理

画像-20230714173923619

マスターサーバーはデータの変更を記録し、これらの変更をバイナリログに書き込みます。

スレーブ サーバーはマスターのバイナリ ログを定期的にチェックします。変更が見つかった場合は、マスターにバイナリ イベントの送信を要求します。マスターは I/O スレッドを開き、バイナリ イベントをスレーブに送信し、ファイルに保存します。スレーブノードのローカルリレーログ。

スレーブ ノードは SQL スレッドを開始し、リレー ログからバイナリ ログを読み取り、それをローカルで再生して、スレーブ ノードのデータをマスター ノードと一致させます。

最後に、I/O スレッドと SQL スレッドはスリープ状態になり、次に目覚めるまで待機します。

マスター/スレーブ レプリケーションの利点

  • 可用性の向上: マスター ノードに障害が発生した場合、すぐにスレーブ ノードに切り替わり、データベースの継続的な可用性が確保されます。

  • 負荷分散: 書き込みリクエストをマスター ノードに分散し、読み取り操作をスレーブ ノードに分散して、マスター ノードの負荷を軽減し、パフォーマンスを向上させます。

  • データのバックアップ: スレーブ ノードをマスター ノードのバックアップとして使用して、データ損失を防ぐことができます。

準備

サーバーを 2 台用意し、MySQL を別々にインストールします。

IP タイプ
192.168.200.10 マスターノード
192.168.200.20 スレーブノード

ステップ 1: ホスト名を変更する

ホスト名 192.168.200.10 をマスターに変更します

192.168.200.20スレーブのホスト名を変更します

[root@master ~]# hostname -I
192.168.200.10 
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# 

[root@slave ~]# hostname -I
192.168.200.20 
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# bash
[root@slave ~]# 

ステップ 2: yum を使用してインストールする

[root@master ~]# yum install -y mariadb-server mariadb
[root@slave ~]# yum install -y mariadb-server mariadb

ステップ 4: mysql サービスを開始し、起動時に自動的に開始するように設定します。

[root@master ~]# systemctl enable mariadb --now
[root@slave ~]# systemctl enable mariadb --now
# 查看状态
[root@slave ~]# systemctl status mariadb
  
[root@slave ~]# systemctl status mariadb

ステップ 5: ポートが公開されているかどうかを確認する

[root@master ~]# netstat -tlnp |grep 3306
tcp        0      0 0.0.0.0:3306   0.0.0.0:*       LISTEN      15802/mysqld    

[root@slave ~]# netstat -tlnp |grep 3306
tcp        0      0 0.0.0.0:3306       0.0.0.0:*     LISTEN      15991/mysqld   

ステップ 6: データベースを初期化してログインをテストする

[root@master ~]# mysql_secure_installation 
[root@slave ~]#  mysql_secure_installation 

[root@master ~]# mysql -uroot -p000000
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
# root 用户授予所有数据库的所有权限,并设置密码为 '000000'
MariaDB [(none)]> exit;

[root@slave ~]# mysql -uroot -p000000
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000';flush privileges;
MariaDB [(none)]> exit;

ステップ 7: ファイアウォールがポート 3306 を解放する

[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload
success
success

[root@slave ~]#  firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload
success
success

SQLyogで接続する

画像-20230714182151902

画像-20230714182158683

メインデータベースマスターを構成する

MySQLデータベースの設定ファイルを変更する

[root@master ~]# vim /etc/my.cnf
[mysqld]
# 添加如下两行信息
server-id=10
log_bin

mysqlサービスを再起動します

[root@master ~]# systemctl restart mariadb

コピー用のアカウントを作成して許可する

スレーブ ノードにマスター/スレーブ レプリケーションを実行する権限を与えます。このコマンドを実行すると、スレーブ ノード ユーザーにはcsqレプリケーション権限が付与され、パスワードを使用して000000レプリケーションのためにマスター ノードに接続できるようになります。

MariaDB [(none)]> grant replication slave on *.* to 'csq'@'192.168.200.%' identified by '000000';

mysqlにログイン

マスターノード上のバイナリログファイルのリストを表示します。

记住下面的Log_name 和File_size,配置从数据库要用

MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000001 |       398 |
+--------------------+-----------+
# Log_name 列显示二进制日志文件的名称
# File_size 列显示二进制日志文件的大小

スレーブデータベースの設定 スレーブ

mysqlデータベース構成ファイルを変更する

[root@slave ~]# vim /etc/my.cnf
[mysqld]
# 添加如下信息
server-id=20

mysqlサービスを再起動します

[root@slave ~]# systemctl restart mariadb

mysqlにログイン

メインデータベースに接続するための情報を設定します

# 因为配置主数据库的信息参数有很多当你忘记的时候可以查看如下命令
mysql> help change master to;

画像-20230714190102613

コピーして少し変更することもできます

这里要设置刚刚创建的用户账号信息,以及主数据库的IP

MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.200.10',
    ->   MASTER_USER='csq',
    ->   MASTER_PASSWORD='000000',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mariadb-bin.000001',
    ->   MASTER_LOG_POS=398;
# MASTER_LOG_FILE 和  MASTER_LOG_POS 
# 这两个参数就是指定主数据库的二进制日志文件名称和位置
# 从节点可以确定从哪个位置开始复制数据

スレーブ ノードでマスター/スレーブ レプリケーション プロセスを開始します。

MariaDB [(none)]> start slave;
# 执行该命令后,从节点将开始连接主节点,并开始复制主节点上的二进制日志

スレーブデータベースのステータスを確認する

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.200.10
                  Master_User: csq
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000001
          Read_Master_Log_Pos: 398
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 531
        Relay_Master_Log_File: mariadb-bin.000001
             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: 398
              Relay_Log_Space: 827
              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: 10

テスト

マスター データベースはデータベース CSQ を作成します

MariaDB [(none)]> create database CSQ;

データベースから見る

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| CSQ                |
| mysql              |
| performance_schema |
+--------------------+

SQLyogビュー

画像-20230714191624035

画像-20230714191646058

完了

おすすめ

転載: blog.csdn.net/qq_52089863/article/details/131730574