• mysql高可用架构 -> MHA主从复制-03


    GTID复制技术说明

    GTID的全称为 global transaction identifier ,可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建。GTID需要在全局的主-备拓扑结构中保持唯一性,GTID由两部分组成:
    
    GTID = source_id   transaction_id 
    
    source_id:用于标示源服务器,用server_uuid来表示,这个值在第一次启动时生成,并写入到配置文件data/auto.cnf中
    
    transaction_id:则是根据在源服务器上第几个提交的事务来确定。  

    一个GTID的生命周期包括:

    1.事务在主库上执行并提交给事务分配一个gtid(由主库的uuid和该服务器上未使用的最小事务序列号),该GTID被写入到binlog中。

    2.备库读取relaylog中的gtid,并设置session级别的gtid_next的值,以告诉备库下一个事务必须使用这个值

    3.备库检查该gtid是否已经被其使用并记录到他自己的binlog中。slave需要担保之前的事务没有使用这个gtid,也要担保此时已分读取gtid,但未提交的事务也不恩呢过使用这个gtid.

    4.由于gtid_next非空,slave不会去生成一个新的gtid,而是使用从主库获得的gtid。这可以保证在一个复制拓扑中的同一个事务gtid不变。由于GTID在全局的唯一性,通过GTID,我们可以在自动切换时对一些复杂的复制拓扑很方便的提升新主库及新备库,例如通过指向特定的GTID来确定新备库复制坐标。

    GTID组成

      GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增

    基于GTID的主从复制

    先决条件
    1)主库和从库都要开启binlog
    2)主库和从库server-id不同
    3)要有主从复制用户  

    配置主从复制文件

    51节点为主库,52,53 为从库,除了bin-log日志不开,server_id 不同,其余都一样

    mysql> system vim /etc/my.cnf   //在mysql中直接编辑配置
    [mysqld]
    server-id=1
    user=mysql
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    log-error=/data/mysql/error.log
    gtid_mode=ON              //启用gtid类型,否则就是普通的复制架构
    enforce_gtid_consistency     //强制GTID的一致性
    skip-name-resolve        # 跳过域名解析
    log-slave-updates=1        # slave更新是否记入日志(5.6必须的)
    log_bin=mysql-bin      //开启bin-log日志,只有主库开启,这样更节省资源

    创建主从复制用户 

    #登录数据库
    [root@mysql-db01 ~]# mysql    //在主库创建授权用户
    #创建rep用户
    mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123';  

    从库开启复制

    52,53为从库,登录数据库执行 change master to

    change master to       
    master_user='rep',
    master_host='10.0.0.51',
    master_password='123',
    master_auto_position=1;
    
    #配置复制主机信息
    mysql> change master to
    #主库IP
    -> master_host='10.0.0.51',
    #主库复制用户
    -> master_user='rep',
    #主库复制用户的密码
    -> master_password='123',
    #GTID位置点
    -> master_auto_position=1;  

    查看状态

    start slave;        //开启从库
    show slave statusG    //查看状态
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.51
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 154
                   Relay_Log_File: db02-relay-bin.000002
                    Relay_Log_Pos: 367
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
     Auto_Position: 1       //1为开启,0为关闭

    检查GTID状态  

    mysql> show global variables like '%gtid%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | enforce_gtid_consistency | ON    | #执行GTID一致
    | gtid_executed            |       |
    | gtid_mode                | ON    | #开启GTID模块
    | gtid_owned               |       |
    | gtid_purged              |       |
    +--------------------------+-------+
    

    注:主库从库都需要开启GTID否则在做主从复制的时候就会报错  

    报错信息

    传统的主从复制开启

    #创建rep用户
    mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123'; 
    mysql> mysql> show master status;
    +------------------+----------+--------------+------------------+----------------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                      |
    +------------------+----------+--------------+------------------+----------------------------------------+
    | mysql-bin.000003 |      194 |              |                  | fc221cfa-db16-11e8-b7c2-000c29afa37f:1 |
    +------------------+----------+--------------+------------------+----------------------------------------+
    1 row in set (0.00 sec)
    

    注:在以往如果是基于binlog日志的主从复制,则必须要记住主库的master状态信息。  

    从库开启主从复制

    如果是之前做过gtid的,先关闭slave,注释掉gtid配置
    stop slave;
    reset slave all;
    
    CHANGE MASTER TO
    MASTER_HOST='10.0.0.51',
    MASTER_USER='rep',
    MASTER_PASSWORD='123',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='mysql-bin.000003',
    MASTER_LOG_POS=194;
    

    查看是否成功  

    start slave
    show slave statusG
    
    Auto_Position: 0     //变为0为关闭
    

    mysql> show slave statusG

    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 10.0.0.51
    Master_User: rep
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000003
    Read_Master_Log_Pos: 480
    Relay_Log_File: db02-relay-bin.000006
    Relay_Log_Pos: 360
    Relay_Master_Log_File: mysql-bin.000003
    Slave_IO_Running: Yes           //io,sql线程开启
    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: 480
    Relay_Log_Space: 772
    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: 1
    Master_UUID: fc221cfa-db16-11e8-b7c2-000c29afa37f
    Master_Info_File: /usr/local/mysql/data/master.info
    SQL_Delay: 0
    SQL_Remaining_Delay: NULL
    Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    Master_Retry_Count: 86400
    Master_Bind: 
    Last_IO_Error_Timestamp: 
    Last_SQL_Error_Timestamp: 
    Master_SSL_Crl: 
    Master_SSL_Crlpath: 
    Retrieved_Gtid_Set: fc221cfa-db16-11e8-b7c2-000c29afa37f:1
    Executed_Gtid_Set: fc221cfa-db16-11e8-b7c2-000c29afa37f:1
    Auto_Position: 0                //关闭gtid
    Replicate_Rewrite_DB: 
    Channel_Name: 
    Master_TLS_Version: 
    1 row in set (0.00 sec)
  • 相关阅读:
    CDH执行spark任务
    CDH日志目录
    CDH5.12安装遇到的坑
    Scala 运行jar命令
    二进制
    build 文件夹中的 webpack.prod.conf.js
    build 文件夹中的 check-versions.js
    build 文件夹中的 webpack.prod.conf.js
    build 文件夹中的 webpack.dll.config.js
    build 文件夹中的 webpack.dev.conf.js
  • 原文地址:https://www.cnblogs.com/tim1blog/p/9873120.html
Copyright © 2020-2023  润新知