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