MySQL データベースはマスター間同期を実装します

序文

MySQL のマスターとマスターの同期は、実際にはマスターとスレーブの同期に基づいて从数据库アップグレードされ主数据库、相互にデータベースの読み書きができるようになり、スレーブ データベースがマスター データベースになり、マスターとスレーブの相互認証接続により、互いの binlog ログが読み取られます。その過程で、相手のデータが変更される限り、それに応じて自分も変更されます。
ここに画像の説明を挿入

1. マスタ間同期のメリットとデメリット

実はそれぞれの技術には一長一短があり、機能の中から自分の用途により適した技術サービスを選択する必要があります。
マスター間同期のメリット

  • データの可用性の向上: MySQL のマスター間同期により、複数の MySQL サーバー間でデータを同期でき、サーバーの 1 つに障害が発生した場合でも、他のサーバーがサービスを提供し続けることができるため、データの可用性が向上します。
  • データセキュリティの強化:MySQLのマスターとマスターの同期により、データのバックアップとレプリケーションを実現し、一方のサーバーでデータが紛失または破損した場合、他のサーバーがバックアップデータを提供できるため、データのセキュリティが強化されます。
  • 読み取りと書き込みの分離のサポート: MySQL のマスターとマスターの同期により、読み取りと書き込みの分離が実現できます。つまり、読み取りリクエストと書き込みリクエストを異なる MySQL サーバーに分散することで、データベースの読み取りと書き込みのパフォーマンスが向上します。

マスター間同期のデメリット

  • データ同期の遅延: MySQL のマスターとマスターの同期には、データ同期の遅延という問題があります。つまり、データの同期中にデータの不整合が発生する可能性があります。MySQL サーバーがデータを変更すると、他のサーバーはデータ同期を完了するまでに一定の時間がかかるため、データ同期の遅延が発生する可能性があります。
  • 複数の MySQL サーバーを調整する必要がある: M​​ySQL のマスターとマスターの同期では、複数の MySQL サーバー間のデータ同期を調整する必要があるため、構成、監視、トラブルシューティングなど、より多くの管理およびメンテナンス作業が必要になります。
  • データベースのパフォーマンスの低下: MySQL のマスターとマスターの同期により、データベースのパフォーマンスが低下する可能性があり、特にデータ同期のプロセスでは、多くのシステム リソースが占有され、データベースのパフォーマンスに影響を与える可能性があります。

要約すると、MySQL のマスターとマスターの同期には、データの可用性の向上、データのセキュリティの強化、読み取りと書き込みの分離のサポートという利点がありますが、データ同期の遅延、複数の MySQL サーバーを調整する必要性、データベースのパフォーマンスなどの欠点もあります。劣化。したがって、データベースの同期方法を選択する場合は、実際の状況を総合的に考慮する必要があります。

1. MySQL データベースをデプロイする

MySQL8.0 データベースを両方のサーバーに同時にインストールする必要があります。ここでは簡単なデモを示します。

1.1 早めの準備

実験手順全体を比較的スムーズに行うために、ファイアウォールと selinux を事前に閉じる必要があります。

iptables -F
systemctl stop firewalld.service
setenforce 0

ここでは、2 番目のサーバーはスレーブではなくなりましたが、両方ともマスター データベースになりました。

システム IP データベースのバージョン
CentOS7.9 192.168.116.166(マスター1) mysql8.0
CentOS7.9 192.168.116.128(マスター2) mysql8.0

1.2 データベースのインストール

両方のサーバーにデータベースをインストールする必要があります。これは前提条件であり、必ずインストールする必要があります。
詳細な手順については、「MySQL8.0 のインストールとデプロイ」を参照してください。

#备份源
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak

#下载网络源
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#清空现有的文件和软件包
[root@localhost yum.repos.d]# rpm -qa | grep mysql
[root@localhost yum.repos.d]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost yum.repos.d]# rpm -e mariadb-libs --nodeps

[root@localhost yum.repos.d]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/usr/lib64/mysql
[root@localhost yum.repos.d]# rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql

#下载安装MySQL8.0
[root@localhost yum.repos.d]# rpm -ivh https://repo.mysql.com/mysql80-community-release-el7.rpm
[root@localhost yum.repos.d]# yum install mysql-community-server -y
[root@localhost yum.repos.d]# systemctl restart mysqld

#找到初始化密码,为下一步登录修改密码做准备
[root@localhost yum.repos.d]# grep -iwa "Password" /var/log/mysqld.log 
2023-03-07T06:56:53.564861Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: h-Ijft/b/9W*

#修改数据库密码
[root@localhost yum.repos.d]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> alter user 'root'@'localhost' identified by 'Admin#123';
Query OK, 0 rows affected (0.00 sec)

mysql> exit

インストールしたら、マスター間同期の構成を開始できます。

1.3 アイデア

1台目のサーバーをマスターmaster1、2台目のサーバーをマスターmaster2に設定します。
マスターmaster1とマスターmaster2は、最初にマスタースレーブ同期を実行して相互にマスタースレーブになります。2回目は反転してマスターになります。奴隷として行動し、部下に決定させます。
これを踏まえると必ず設定ファイルを変更する必要があるので、まずmaster1を変更します。

2. マスター master1 を設定する

認識率を高めるために、最初のサーバーのホスト名を事前に変更してください

[root@localhost ~]# hostname master1
[root@localhost ~]# bash
[root@master1 ~]# 

2.1 設定ファイルを変更する

[root@master1 ~]# vim /etc/my.cnf
[root@master1 ~]# sed 4,+5p -n /etc/my.cnf
[mysqld]
server-id=11     
log-bin=mysql-bin  
auto_increment_increment=2  
auto_increment_offset=1
replicate-do-db=demo_db
  • server-id=11 #データベースの一意のID
  • log-bin=mysql-bin #ログ ファイルの場所を保存します
  • auto_increment_increment=2 #主キーの自動インクリメントのステップ サイズを制御し、複数のサーバーに対していくつかの値を設定します
  • auto_increment_offset=1 #自動インクリメントの開始値を設定します。これが最初のもの、次が 1、次が 2 です。
  • replicate-do-db=demo_db #同期するデータベースを選択します。

構成ファイルを変更した後は、忘れずにサービスを再起動してください。構成ファイルの変更は変数を再割り当てすることと同じであるためです。サービスを再起動しないと、ファイルの i ノード値はカーネルと同期されないため、サービスを再起動すると、カーネルはプロセスの新しい i ノード値を認識します。

[root@master1 ~]# systemctl restart mysqld

2.2 ユーザーmaster1の作成

データベースに master1 ユーザーを作成します

[root@master1 ~]# mysql -uroot -p'Admin#123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create user 'master1'@'%' identified with mysql_native_password by '#Master1';
Query OK, 0 rows affected (0.01 sec)

mysql>  grant replication slave on *.* to 'master1'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'master1'@'%';
+-------------------------------------------------+
| Grants for master1@%                            |
+-------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `master1`@`%` |
+-------------------------------------------------+
1 row in set (0.00 sec)
create user 'master1'@'%' identified with mysql_native_password by '#Master1';
  • このステートメントの意味は、master1 という名前のユーザーを作成することです。ユーザーの名前は自分で定義できます。@'%' はデータベースにリモートでログインできることを意味し、mysql_native_password で識別されるステートメントは固定の方法です。 MySQL8に書き込み、パスワードを設定します。
grant replication slave on *.* to 'master'@'%';
  • このステートメントは、このユーザーにデータベースを認可する権限を示します。 *. は基本的にすべてのアクセス許可を付与することを意味し、最初のステートメントはすべてのデータベースを示し、2 番目のステートメントはデータベース テーブルを示します。
flush privileges;
  • このステートメントは、以前に設定した内容をデータベースに同期できるようにデータベースを更新することを意味します。
show grants for 'master1'@'%';
  • 以前に設定した権限がデータベースに書き込まれているかどうかを確認し、表示された内容は書き込みが成功したことを示しています。

次に、master1 のステータスを確認し続けます。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      157 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  • File は、先ほど設定したログビンのストレージ ファイルで、mysql 操作のログ ファイルを記録するために使用されます。
  • 位置はオフセットを表します
  • Binlog_Do_DB 同期する必要があるデータベース
  • Binlog_Ignore_DB はデータベースを同期しません

このオフセットの値はデータベースを操作するたびに変化するため、状態を確認した後は、master1 データベースの内容を継続的に操作しないことをお勧めします。
次に、2 番目のデータベースの変更を開始します。

3. データベースからslave1を設定します。

この構成は 2 番目のサーバーで動作し、
ホスト名を変更します。

[root@localhost ~]# hostname master2
[root@localhost ~]# bash
[root@master2 ~]# 

3.1 設定ファイルを変更する

構成ファイルを変更します/etc/my.cnf。これは 2 番目のサーバーなので、idと の両方をauto_increment_offset2 に調整する必要があります。

[root@master2 ~]# vim /etc/my.cnf
[root@master2 ~]# sed 4,+5p -n /etc/my.cnf
[mysqld]
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=demo_db

それでも同じですが、構成ファイルを変更するにはサービスを再起動する必要があります

[root@master2 ~]# systemctl restart mysqld

3.2 メインの master1 データベースをバインドする

mysql> change master to master_host='192.168.116.166',
    -> master_user='master1',
    -> master_password='#Master1',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=157;
Query OK, 0 rows affected, 8 warnings (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.116.166
                  Master_User: master1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 157
               Relay_Log_File: master2-relay-bin.000002
                Relay_Log_Pos: 326
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: demo_db
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
......
1 row in set, 1 warning (0.00 sec)

実際、上記のステートメントで実行する必要がある文はほんの数文だけです。一緒に見てみましょう。
この情報のテンプレートは直接コピーでき、IP、ユーザー名、パスワード、ログ ファイル、独自の定義のオフセットは等号の後に変更する必要があります。

change master to master_host='192.168.116.166',  #填写您自己的IP
master_user='master1', 		#填写您自己在第一台服务器上创建的用户名称
master_password='#Master1',   #填写在第一台服务器上创建的用户密码
master_log_file='mysql-bin.000002',  #填写第一台服务器上master的日志信息
master_log_pos=157;  			#填写在第一台服务器上master的偏移量

このステートメントを使用して、スレーブ データベースのステータスを表示します。

show slave status \G

ここに画像の説明を挿入

これら 2 つの値が Yes であることは、同期が成功したことを意味します。

4.master2データベースを構成する

次に、現在の master2 サーバーの構成を続けます。

4.1 ユーザーmaster2の作成

master2という名前のユーザーを作成します

mysql> create user 'master2'@'%' identified with mysql_native_password by '#Master2';
Query OK, 0 rows affected (0.01 sec)

mysql>  grant replication slave on *.* to 'master2'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

マスター2のステータスを表示する

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      157 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

この時点では、操作を続ける必要はありません。または、mysql 管理システムを直接終了することもできます。
最初のサーバーに戻り、2 番目のデータベース ユーザーの同期を続けます。

5. スレーブ 2 データベースの構成

実際、slave2 は master1 でもあり、依然として同じ方法でバインドされています。

5.1 メインの master2 データベースをバインドして同期する

mysql> change master to master_host='192.168.116.128', master_user='master2',
    -> master_password='#Master2',master_log_file='mysql-bin.000004',
    -> master_log_pos=157;
Query OK, 0 rows affected, 8 warnings (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to source
                  Master_Host: 192.168.116.128
                  Master_User: master2
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 157
               Relay_Log_File: master1-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
              Replicate_Do_DB: demo_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: 157
              Relay_Log_Space: 157
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 2003
                Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 1 message: Can't connect to MySQL server on '192.168.116.128:3306' (113)
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
......
1 row in set, 1 warning (0.00 sec)

ご覧のとおり、スレーブのステータスを表示すると、Yes ではない値が表示されます。

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

ここに画像の説明を挿入
エラーの原因はここで確認できます。もちろん、IO の値に影響を与える原因はたくさんあります。接続中です。1 つずつ確認してみましょう。

5.2 解決策

エラーが発生することはそれほどひどいことではありません。以前に実行した手順を思い出して、前の手順に戻って、前の手順が正しく実行されているかどうかを確認できます。正しく実行されている場合は、selinux、ファイアウォール、ネットワーク、その他の問題がないかどうかを確認してください。

構成失敗の理由:

  • ネットワークが利用できません – Web サイトのドメイン名に ping を試みることができます
  • ファイアウォール、selinux が閉じられていません – 閉じられた操作を再実行してください
  • ユーザーパスワードが正しく入力されていません – 再設定し、明確に確認してから入力してください
  • IPエラー - ローカルサーバーのIPかどうかを確認してください
  • オフセットおよびログ ファイルのエラー - サービスを再起動し、再度構成します

両方のサーバーをチェックする必要があります

[root@master1 ~]# hostname -I 
192.168.116.166 192.168.122.1 
[root@master1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 五 2023-02-10 10:52:45 CST; 1 months 12 days ago
     Docs: man:firewalld(1)
 Main PID: 804 (code=exited, status=0/SUCCESS)

210 10:51:06 localhost.localdomain systemd[1]: Starting firewalld - dynamic f....
210 10:51:10 localhost.localdomain systemd[1]: Started firewalld - dynamic fi....
210 10:51:11 localhost.localdomain firewalld[804]: WARNING: AllowZoneDrifting ...
210 10:52:44 localhost.localdomain systemd[1]: Stopping firewalld - dynamic f....
210 10:52:45 localhost.localdomain systemd[1]: Stopped firewalld - dynamic fi....
Hint: Some lines were ellipsized, use -l to show in full.
[root@master1 ~]# ping -c 1 www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=53 time=37.8 ms

--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 37.807/37.807/37.807/0.000 ms
[root@master1 ~]# getenforce 
Permissive
[root@master1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

最初のサーバーテストはOKです


次に 2 番目のサーバーをテストします

[root@master2 ~]# hostname -I
192.168.116.128 192.168.122.1 

[root@master2 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2023-03-25 15:28:38 CST; 2s ago
     Docs: man:firewalld(1)
 Main PID: 70425 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─70425 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

325 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
3月 25 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
325 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
3月 25 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...e.
325 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...e.
3月 25 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
325 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
3月 25 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
325 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
3月 25 15:28:39 master2 firewalld[70425]: WARNING: COMMAND_FAILED: '/usr/sbin/ipt...).
Hint: Some lines were ellipsized, use -l to show in full.

2 番目のサーバーのファイアウォールが閉じられていないことが判明し、これらの問題の影響を受けた可能性が高く、ファイアウォールがオフにされました。

[root@master2 ~]# systemctl stop firewalld.service 

閉じた後、最初のサーバーでサーバーのバインドを続けます。
ファイアウォールの問題に対処するには、まずスレーブを閉じてリセットし、その後スレーブを開くと簡単に対処できます。

stop slave;
reset slave;
start slave;
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> reset slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.116.128
                  Master_User: master2
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 157
               Relay_Log_File: master1-relay-bin.000006
                Relay_Log_Pos: 373
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: demo_db
          Replicate_Ignore_DB: 
......
1 row in set, 1 warning (0.00 sec)

両方の値が「yes」であることを確認し、同期が成功したことを示します。

6. 試験結果

以上がマスター間同期の全体内容ですが、完全に成功したかどうかを確認してみます。
最初の master1 で同期することを選択したデータベースを作成し、次にこのデータベースのテーブルを作成し、そのテーブルに数行の情報を挿入します。

6.1 最初のデータベーステスト

[root@master1 ~]# mysql -uroot -pAdmin#123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database demo_db;
Query OK, 1 row affected (0.01 sec)

mysql> use demo_db
Database changed
mysql> create table demo_tb(id int not null,name varchar(20) default 'username');
Query OK, 0 rows affected (0.02 sec)

mysql> insert into demo_tb values(1,'zhangsan'), (2,'lisi'), (3,'kunkun');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

6.2 2 回目のデータベース テスト

[root@master2 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| demo_db            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select * from demo_db.demo_tb;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | kunkun   |
+----+----------+
3 rows in set (0.01 sec)

mysql> use demo_db
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into demo_tb values(4,'liao'),
    -> (5,'chengpi'),
    -> (6,'mahua');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

最初のデータベースで、2 番目のデータベースによって挿入されたコンテンツも正常に書き込まれるかどうかを確認します。

mysql> select * from demo_tb;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | kunkun   |
|  4 | liao     |
|  5 | chengpi  |
|  6 | mahua    |
+----+----------+
6 rows in set (0.00 sec)

2 番目のデータベースの入力内容を確認すると、最初のデータベースと同期でき、成功したことがわかります。

要約する

以上がこの記事の全内容ですが、昨日の「MySQLデータベースがマスター・スレーブ同期を実現する」を読んでいただければわかると思いますが、マスター・スレーブ同期はマスター・スレーブ同期の上のマスター・スレーブ同期でしかありません。上記の内容で良いと思ったら、いいねしてサポートしてください!
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/rhn_111/article/details/129764802