MySQL主從復制搭建流程分步實現

主從復制

主從也叫做(AB復制),允許一個服務器從一個服務器數據庫(主服務器)的數據復制到一個或者多個MySQL數據庫服務器。

主從復制的優點有很多,包括橫向擴展解決方案,數據安全性,數據分析,遠程數據分發。

主從搭建

作為主服務器的服務器開啟二進制日志(binlog);

下面我們來搭建主從復制的,采用3個節點來嘗試;

節點角色 主機名 Ip地址 server-id
master master 192.168.246.132 1
slave salve 192.168.246.134 2
slave2 salve2 192.168.246.136 3

首先需要在etc/hosts中添加IP地址和主機名之間的映射關系,啟動節點的數據庫,然後可以查看他們的server-id

show variables like 'server_id';
# 創建主從復制的賬號
create user 'rep1'@'192.168.246.%' identified by '123456';
grant replication slave on * .* to 'rep1'@'192.168.246.%';
flush privileges;

創建管理賬號

create user 'myadmin'@'192.168.246.%' identified by '123456';
grant all privileges on *.* to 'myadmin'@'192.168.246.%';
flush privileges;

在所有的節點上都啟用GTID

set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
set global ENFORCE_GTID_CONSISTENCY = ON;
set global GTID_MODE = OFF_PERMISSIVE;
set global GTID_MODE = ON_PERMISSIVE;
set global GTID_MODE = ON;

GTID全稱為Global Transaction Identifier, 即全局事務標識符。用於在binlog中標識唯一的事務,當MySQL Server在寫binlog的時候,會寫一個特殊的binlog Event,指定下一個事務的GTID。

配置主從復制的命令

註意,需要在所有的從節點都配置

change master to master_host='192.168.246.132',master_user='rep1',master_password='123456',master_auto_position=1;

在所有的從節點中開啟主從復制

start salve;

然後在從節點上查看主從復制的狀態,出現下面的就算成功瞭。

show slave status \G;

show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.246.132
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-binlog.000008
          Read_Master_Log_Pos: 157
               Relay_Log_File: salve-relay-bin.000002
                Relay_Log_Pos: 379
        Relay_Master_Log_File: mysql-binlog.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: 157
              Relay_Log_Space: 589
              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: 71341b64-4450-11ed-90f4-000c29f2a7f4
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica 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: 
            Executed_Gtid_Set: 
                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, 1 warning (0.01 sec)

ERROR: 
No query specified

測試

我們現在主節點上創建一張表並且插入一些數據,來查看從節點是否有同步數據;

create database demo2;
use demo2;
create table test1 (tid int);
insert into test1 values(123);

這個時候我們去從節點上進行查詢,這個時候我們可以看到數據已經同步過來瞭。

我們還可以到我們設置的data目錄下面查看binlog,

再到數據庫裡面查看,就可以查看具體的binlog信息瞭。

mysql> show binlog events in 'mysql-binlog.000008';
+———————+—–+—————-+———–+————-+——————————————————————-+
| Log_name            | Pos | Event_type     | Server_id | End_log_pos | Info                                                              |
+———————+—–+—————-+———–+————-+——————————————————————-+
| mysql-binlog.000008 |   4 | Format_desc    |         2 |         126 | Server ver: 8.0.30, Binlog ver: 4                                 |
| mysql-binlog.000008 | 126 | Previous_gtids |         2 |         157 |                                                                   |
| mysql-binlog.000008 | 157 | Gtid           |         1 |         241 | SET @@SESSION.GTID_NEXT= '71341b64-4450-11ed-90f4-000c29f2a7f4:1' |
| mysql-binlog.000008 | 241 | Query          |         1 |         352 | create database demo2 /* xid=51 */                                |
| mysql-binlog.000008 | 352 | Gtid           |         1 |         436 | SET @@SESSION.GTID_NEXT= '71341b64-4450-11ed-90f4-000c29f2a7f4:2' |
| mysql-binlog.000008 | 436 | Query          |         1 |         554 | use `demo2`; create table test1 (tid int) /* xid=64 */            |
| mysql-binlog.000008 | 554 | Gtid           |         1 |         640 | SET @@SESSION.GTID_NEXT= '71341b64-4450-11ed-90f4-000c29f2a7f4:3' |
| mysql-binlog.000008 | 640 | Query          |         1 |         711 | BEGIN                                                             |
| mysql-binlog.000008 | 711 | Table_map      |         1 |         763 | table_id: 94 (demo2.test1)                                        |
| mysql-binlog.000008 | 763 | Write_rows     |         1 |         803 | table_id: 94 flags: STMT_END_F                                    |
| mysql-binlog.000008 | 803 | Xid            |         1 |         834 | COMMIT /* xid=66 */                                               |
+———————+—–+—————-+———–+————-+——————————————————————-+
11 rows in set (0.00 sec)

總結

上述就是搭建主從復制的搭建過程,相信大傢跟著教程一步步搭建起來應該也可以成功

到此這篇關於MySQL主從復制搭建流程分步實現的文章就介紹到這瞭,更多相關MySQL主從復制內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: