首頁 > 軟體

MySQL主從複製搭建流程分步實現

2022-11-07 14:01:51

主從複製

主從也叫做(AB複製),允許一個伺服器從一個伺服器資料庫(主伺服器)的資料複製到一個或者多個MySQL資料庫伺服器。

主從複製的優點有很多,包括橫向擴充套件解決方案,資料安全性,資料分析,遠端資料分發。

主從搭建

作為主伺服器的伺服器開啟二進位制紀錄檔(binlog);

下面我們來搭建主從複製的,採用3個節點來嘗試;

節點角色主機名Ip地址server-id
mastermaster192.168.246.1321
slavesalve192.168.246.1342
slave2salve2192.168.246.1363

首先需要在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主從複製內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com