mysql 8.0.20主从复制


MySQL复制有两种方法:

  • 传统方式:基于主库的bin-log将日志事件和事件位置复制到从库,从库再加以 应用来达到主从同步的目的。

  • Gtid方式:global transaction identifiers是基于事务来复制数据,因此也就不依赖日志文件位置,同时又能更好的保证主从库数据一致性。

GTID的工作原理:

  1. master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
  2. slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
  3. sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
  4. 如果有记录,说明该GTID的事务已经执行,slave会忽略。
  5. 如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
  6. 在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

1、环境介绍:

一主两从

master:  192.168.1.128

slave-01:192.168.1.130

slave-02:192.168.1.131

 

  • master 配置文件:/etc/my.cnf
    [mysqld]
    user=mysql
    basedir=/usr/local/mysql/
    datadir=/usr/local/mysql/data/
    port=3306
    socket=/tmp/mysql.sock
    log-error=/var/log/mysql/error.log
    
    
    #GTID:
    server_id=130                       #服务器id
    gtid_mode=on                       #开启gtid模式
    enforce_gtid_consistency=on        #强制gtid一致性
    log-slave-updates=1
    #binlog
    log_bin=/data/binlog/mysql-bin
    binlog_format=row            #binlog格式
    
    #relay log
    skip_slave_start=1
    max_connect_errors=1000
    default_authentication_plugin = 'mysql_native_password'
    
    #slow log
    slow_query_log=1
    slow_query_log_file=/usr/local/mysql/data/node02-slow.log
    long_query_time=0.1
    log_queries_not_using_indexes=1
    

      

  • slave-01配置文件 /etc/my.cnf
    [mysqld]
    user=mysql
    basedir=/usr/local/mysql/
    datadir=/usr/local/mysql/data/
    port=3306
    socket=/tmp/mysql.sock
    log-error=/var/log/mysql/error.log
    
    
    #GTID:
    server_id=130                       
    gtid_mode=on                       
    enforce_gtid_consistency=on 
    log-slave-updates=1
    #binlog
    log_bin=/data/binlog/mysql-bin
    binlog_format=row            
    
    #relay log
    skip_slave_start=1
    max_connect_errors=1000
    default_authentication_plugin = 'mysql_native_password'
    
    #slow log
    slow_query_log=1
    slow_query_log_file=/usr/local/mysql/data/node02-slow.log
    long_query_time=0.1
    log_queries_not_using_indexes=1
    
  • slave-02配置文件 /etc/my.cnf
    [mysqld]
    basedir=/usr/local/mysql/
    datadir=/usr/local/mysql/data/
    port = 3306
    socket = /tmp/mysql.sock
    log-error=/var/log/mysql/error.log
    
    
    #GTID:
    server_id=131                
    gtid_mode=on                
    enforce_gtid_consistency=on  
    log-slave-updates=1
    #binlog
    log_bin=/data/binlog/mysql-bin
    binlog_format=row            
    
    #relay log
    skip_slave_start=1
    max_connect_errors=1000
    default_authentication_plugin = 'mysql_native_password'
    
    #slow log
    slow_query_log=1
    slow_query_log_file=/usr/local/mysql/data/master-slow.log
    long_query_time=0.1
    log_queries_not_using_indexes=1
    

2、搭建GTID主从复制

  • master 创建主从复制用户
    create user 'repl'@'%' identified by 'abc123';
    grant replication slave,replication client on *.* to 'repl'@'%';
    flush privileges;
  • slave节点测试repl用户远程连接
    mysql -urepl -pabc123 -h192.168.1.128
  • slave节点执行,两个slave节点都要执行
    change master to  master_host='192.168.1.128', master_user='repl', master_password='abc123', master_port=3306,master_auto_position = 1;
    start slave;
  • 查看slave主从复制状态

    mysql> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.128
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000008
              Read_Master_Log_Pos: 196
                   Relay_Log_File: node-02-relay-bin.000007
                    Relay_Log_Pos: 411
            Relay_Master_Log_File: mysql-bin.000008
                 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: 196
                  Relay_Log_Space: 877
                  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: 128
                      Master_UUID: a3c9f756-ddce-11ea-ba7e-000c293a54d5
                 Master_Info_File: mysql.slave_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: a3c9f756-ddce-11ea-ba7e-000c293a54d5:2-14
                Executed_Gtid_Set: a3c9f756-ddce-11ea-ba7e-000c293a54d5:1-14
                    Auto_Position: 1
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
           Master_public_key_path: 
            Get_master_public_key: 0
                Network_Namespace: 
    1 row in set (0.01 sec)
    

  至此,Gtid主从复制完成!

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM