Mysql8.0マスタースレーブGTIDレプリケーション

(1) GTIDとは

GTIDは、グローバル・トランザクション識別子(と呼ばれているグローバル・トランザクション識別子)。GTIDは一意であり、メインサーバに送信し、各トランザクションに関連付けられている。クライアントは、メインサーバにトランザクションを送信した場合、それは新しい割り当てられますGTIDをGTIDそれは単調です増加しています。この識別子は、プライマリデータベースに固有であるだけでなく、特定のレプリケーショントポロジ内のすべてのサーバーで一意です。データベースmysql.gtid_executedテーブルに格納されているGTID情報。このテーブルには、GTIDまたはグループGTID、発信元サーバーのUUID、およびトランザクションの開始と終了を表す行が含まれています

 

特定のGTIDを持つトランザクションがサーバーで実行を開始したが、コミットまたはロールバックされていない場合、同じGTID持つサーバー同時トランザクションを開始しようとする試みすべてブロックされます。サーバーは同時トランザクションの実行を開始せず、クライアントに制御を返しません。トランザクションのコミットまたはロールバックを最初に試行すると、同じGTIDでブロックされた同時セッションが続行される場合があります。ロールバックが初めて試行された場合、1つの同時セッションが引き続きトランザクションを試行し、同じGTIDでブロックさている他のすべての同時セッションはブロックされたままになります。最初の試行が行われると、すべての同時セッションはブロックを停止し、トランザクションのすべてのステートメントを自動的にスキップします。

(2) GTIDを使用してレプリケーション構成ます

(1)GTIDをオンにします(マスターとスレーブの両方を構成する必要があります)

GTIDベースのレプリケーションを有効にするには、gtid_mode変数をONに設定し、変数enforce_gtid_consistencyONに設定する必要があります

vim /etc/my.cnf 

[mysqld]

#GTIDを有効にする

gtid_mode = ON

強制-gtid-consistency = ON

構成が完了したら、データベースを再起動して有効にします。show master statusを使用して、gtidを表示できます。

(3)トランザクションを開き、トランザクションをコミットし、ロールバックするためのテスト

mysql>クラスvalues(1、 'notebook '、 ' Beijing ');に挿入します

クエリOK、影響を受ける1行(0.11秒) 

mysql>クラスvalues(2、 'CPU'、 '天津');に挿入します

クエリOK、影響を受ける1行(0.01秒)

mysql>クラスvalues(3、 'display '、 ' Shanghai ');に挿入します

クエリOK、影響を受ける1行(0.01秒)

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | 住所|

+ ---- + ----------- + --------- +

| 1 |ノートブック    北京    |

| 2 | CPU |天津    |

| 3 |ディスプレイ    上海    |

+ ---- + ----------- + --------- +

セットの3行(0.00秒)

 

mysql>トランザクションの開始;   

クエリOK、影響を受ける行は0(0.00秒)

 

mysql>クラスvalues(4、 'graphics card '、 ' Hunan ');に挿入します。

クエリOK、影響を受ける1行(0.01秒)

 

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | 住所|

+ ---- + ----------- + --------- +

| 1 |ノートブック    北京    |

| 2 | CPU |天津    |

| 3 |ディスプレイ    上海    |

| 4 |グラフィックカード      湖南    |

+ ---- + ----------- + --------- +

セットで4行(0.00秒)

 

mysql> rollback; #rollback

クエリOK、影響を受ける行は0(0.01秒)

クエリにはID4データはありません。プロンプトトランザクションがない限り、ロールバックできます。

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | 住所|

+ ---- + ----------- + --------- +

| 1 |ノートブック    北京    |

| 2 | CPU |天津    |

| 3 |ディスプレイ    上海    |

+ ---- + ----------- + --------- +

セットの3行(0.00秒)

图片


(4)gtidをオンにした後、 Executed_Gtid_Setに値を設定する前に、データベースを実行する必要があります。

图片

(1)创建用于复制的用户()

每个从服务器都需要使用MySQL的用户和密码连接到主服务器上,因此需要在主服务器上创建MySQL的用户,用于进行复制操作。可以为每个从库单独创建一个账号,也可以使用同一个账号。账号需具有“replication slave”权限

mysql> CREATE USER 'repl'@'192.168.20.%' IDENTIFIED by '123456';

Query OK, 0 rows affected (0.02 sec)

mysql>  grant replication slave on *.* to 'repl'@'192.168.20.%';

Query OK, 0 rows affected (0.02 sec)

(2)初始化从库()

备份主数据库,直接在备库节点执行

[root@slavedbdb ~]# mysqldump  -uroot -p123456 -h 192.168.20.40 -p3306 --single-transaction  --master-data=2 --flush-logs --flush-privileges --events --routines  --all-databases > /root/master.sql

[root@slavedb ~]# mysql -uroot -p123456 < /root/master.sql

(3)将从数据库添加到复制环境()

注意:这里和使用二进制日志文件复制不同,使用GTID时,MySQL会自动查找位置

mysql> CHANGE MASTER TO

    -> master_host='192.168.20.40',

    -> master_port=3306,

    -> master_user='repl',

    -> master_password='123456',

    -> MASTER_AUTO_POSITION = 1;

Query OK, 0 rows affected, 2 warnings (0.00 sec)

启动从库复制

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

(4)确认主从复制

在从库执行show slave status 

 

mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.20.40

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 40

              Master_Log_File: master-bin.000001

          Read_Master_Log_Pos: 587

               Relay_Log_File: slavedb-relay-bin.000002

                Relay_Log_Pos: 4

        Relay_Master_Log_File: master-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: 


相关阅读:

1、Mysqlbinlog日志的清理与切换

2、mysqldump+binlog恢复被删除的数据

3、Mysql8.0 主从复制

4、Mysql8.0安装实战


请 扫 描 关 注

图片


おすすめ

転載: blog.51cto.com/15127516/2657667