MySQL复制(三)--基于全局事物标识符(GTID)配置复制

基础环境:

  主库 从库
服务器IP地址 192.168.10.11 192.168.10.12
版本 5.7.24 5.7.24
已存在的数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lijiamandb         |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

(一)什么是GTID

GTID全称为全局事物标识符(global transaction identifiers),GTID具有唯一性,与主服务器上提交的每个事务相关联,如果客户端提交事务到主服务器上,则为其分配一个新的GTID,GTID是单调递增的。该标识符不仅对于主数据库是惟一的,而且在给定复制拓扑中的所有服务器上也是唯一的。GTID信息存储在数据库mysql.gtid_executed表中,该表中的一行包含它代表的每个GTID或一组GTID,始发服务器的UUID以及该组的起始和结束事务ID。

如果具有给定GTID的事务已开始在服务器上执行,但尚未提交或回滚,则在具有相同GTID的服务器上启动并发事务的任何尝试都将被阻止。服务器既不开始执行并发事务,也没有将控制权返回给客户端。一旦对事务的第一次尝试提交或回滚,在同一GTID上阻塞的并发会话可能会继续进行。如果第一次尝试回滚,则一个并发会话将继续尝试事务,并且在同一GTID上阻塞的任何其他并发会话将保持阻塞状态。如果进行了第一次尝试,则所有并发会话都将停止阻塞,并自动跳过事务的所有语句。

GTID由2部分构成:

GTID = source_id:transaction_id

其中source_id为server_uuid,对单台服务器来说,是一个固定值。transaction_id是事物的id。

GTID举例:

3E11FA47-71CA-11E1-9E33-C80AA9429562:23

(二)使用GTID配置复制

(2.1)开启GTID(主从都需配置)

要启用基于GTID的复制,必须将gtid_mode变量设置为ON,并启用变量enforce_gtid_consistency为ON。

[mysqld]
# 启用GTID
gtid_mode=ON
enforce-gtid-consistency=ON

配置完成,重启数据库生效。可以使用show master status来查看gtid值

-- 开启gtid后,数据库需要有事物执行,Executed_Gtid_Set才会有值

mysql> show master status;
+-------------------+----------+--------------+------------------+----------------------------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                      |
+-------------------+----------+--------------+------------------+----------------------------------------+
| master-bin.000027 |      352 |              |                  | caa64a22-481a-11ea-b0f1-000c29fb6200:1 |
+-------------------+----------+--------------+------------------+----------------------------------------+

(2.2)创建用于复制的用户(主)

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

mysql> grant replication slave on *.* to ‘rep‘@‘%‘ identified by ‘123‘;

(2.3)初始化从库(从)

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

[[email protected] ~]# mysqldump -uroot -p123456 -h 192.168.10.11 --single-transaction --all-databases --master-data=2  > master.sql

将备份还原到从库:

[[email protected] ~]# mysql -uroot -p123456 < master.sql

还原报错:

[[email protected] ~]# mysql -uroot -p123456 < master.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

处理方法:
[[email protected] ~]# mysql -uroot -p123456

mysql> reset master;
Query OK, 0 rows affected (0.03 sec)

(2.4)从库配置(从)

如果尚未设置从服务器ID,或者当前值与您为主服务器选择的值冲突,请关闭从服务器并编辑[mysqld]配置文件的 部分以指定唯一的服务器ID。例如:

[mysqld]
server_id = 2

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

这里是与“使用二进制日志文件复制”差别最大的地方,在使用二进制方法时,我们需要指定二进制日志文件的位置(master_log_file,master_log_pos),但是在使用GTID时,MySQL会自动查找位置。

mysql> CHANGE MASTER TO
    -> master_host=‘192.168.10.11‘,
    -> master_port=3306,
    -> master_user=‘rep‘,
    -> master_password=‘123‘,
    -> 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)

 (2.6)确认复制状态(从)

在从库执行“ show slave status ”,如果Slave_IO_Running和Slave_SQL_Running都是“YES”,说明复制正常。

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.11
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000027
          Read_Master_Log_Pos: 83440352
               Relay_Log_File: slavedb-relay-bin.000002
                Relay_Log_Pos: 37156249
        Relay_Master_Log_File: master-bin.000027
             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: 39897784
              Relay_Log_Space: 80699026
              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: 430
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
                  Master_UUID: caa64a22-481a-11ea-b0f1-000c29fb6200
             Master_Info_File: /mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: System lock
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: caa64a22-481a-11ea-b0f1-000c29fb6200:9202-280001
            Executed_Gtid_Set: caa64a22-481a-11ea-b0f1-000c29fb6200:1-133885
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

【完】

附录:

MySQL复制(replication)文档集合:

1.复制概述
2.基于二进制日志文件位置(binlog)配置复制
3.基于全局事物标识符(GTID)配置复制
4.多源复制
5.级联复制
6.半同步复制
7.延迟复制
8.复制过滤规则
9.对复制进行故障排除
10.故障切换
11.复制管理

原文地址:https://www.cnblogs.com/lijiaman/p/12315379.html

时间: 2024-07-29 17:11:44

MySQL复制(三)--基于全局事物标识符(GTID)配置复制的相关文章

MySQL学习笔记07基于GTID的复制

1.1.1. 相关概念 (1)GTID GTID是Global Transaction Identifier的缩写.GTID是一个跟提交的事务有关的标识符,由提交事务所在的原始MySQL的UUID和事务的编号组成:因此,每个GTID在每个参与的MySQL中都是唯一的,而且由GTID可以取得该事务所在的原始MySQL以及事务在原始MySQL上的编号. GTID格式如下: GTID = MySQL原始UUD:事务编号 GTID的例子如下: GTID=a2392929-6dfb-11e7-b294-0

MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID. GTID(global transaction ID)全局事务ID,是由服务器的UUID+一段随机数事务ID. 特性:从服务器从主服务器复制过来的事务,GTID不变,也就是说一个事务在全局复制架构中的ID不变. 有什么用: 在MySQL集群中,当Master故障时,需要从Slave中挑选一个提升为Master可以基于GTID对比其他Slave来保证数据的一致性. MySQL主从同步如何配置数据过滤

MySQL 设置基于GTID的复制

GTID的概念 GTID(全名 global transaction identifier)是事务的唯一标识符.格式如下:GTID = source_id:transaction_idsource_id:标识了源服务器,通常是服务器的server_uuidtransaction_id:按照服务器上提交的事务顺序进行排序的序列号.例如: 60f9111a-cdba-11e7-b354-005056a30507:1 在配置文件中添加以下信息来启用GTID模式 [mysqld]gtid_mode=ON

MYSQL 基于GTID的复制

1.概述 从MYSQL5.6 开始,mysql开始支持GTID复制. 基于日志点复制的缺点: 从那个二进制日志的偏移量进行增量同步,如果指定错误会造成遗漏或者重复,导致数据不一致. 基于GTID复制: 1.从服务器会告诉主服务器已执行的事务的GTID值. 2.主库会告诉从哪些GTID事务没有被执行. 同一个事务在指定的从库执行一次. 什么是GTID GTID即全局事务ID,器保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID. GTID=source_id:transaction_i

MySQL 5.7基于GTID复制的常见问题和修复步骤(二)

[问题二] 有一个集群(MySQL5.7.23)切换后复制slave报1236,其实是不小心在slave上执行了事务导致 Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containin

mysql 5.6 的新特性:GTID 复制

mysql 5.6 的新特性: MySQL 5.6 包含了一个复制的新功能,enabling DevOps teams to reliably scale-out their MySQL infrastructure across commodity hardware, rel="nofollow">Global Transaction Identifiers (GTIDs)功能, 为了解决以下问题: -能够无缝的故障恢复和master与slave的切换 -能把slave指向新的

深入MySQL复制(三):半同步复制

1.半同步复制 半同步复制官方手册:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html 默认情况下,MySQL的复制是异步的,master将新生成的binlog发送给各slave后,无需等待slave的ack回复(slave将接收到的binlog写进relay log后才会回复ack),直接就认为这次DDL/DML成功了. 半同步复制(semi-synchronous replication)是指master在将新生

搭建MySQL的主从、半同步、主主复制架构

复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓扑中,由于mysql的强大复制功能,其复制目标可以是所有的数据库,也可以是某些数据库,甚至是某个数据库中的某些表进行复制. MySQL支持的两种复制方案:基于语句复制,基于行复制基于语句复制基于行复制,这两种复制方式都是通过记录主服务器的二进制日志中任何有可能导致数据库内数据发生改变的SQL语句到中

Mysql Group Replication 简介及单主模式组复制配置【转】

一 Mysql Group Replication简介 Mysql Group Replication(MGR)是一个全新的高可用和高扩张的MySQL集群服务. 高一致性,基于原生复制及paxos协议的组复制技术,以插件方式提供一致数据安全保证: 高容错性,大多数服务正常就可继续工作,自动不同节点检测资源征用冲突,按顺序优先处理,内置自动防脑裂机制: 高扩展性,自动添加移除节点,并更新组信息: 高灵活性,单主模式和多主模式.单主模式自动选主,所有更新操作在主进行:多主模式,所有server同时更