MySQL運維2-主從複製

Se7eN_HOU發表於2023-09-27

一、主從複製概念

  主從複製是指將主資料庫的DDL和DML操作透過二進位制日誌傳到從伺服器中,然後在從伺服器上對這些日誌重新執行也叫重做,從而使得從資料庫和主庫的資料保持同步。

  MySQL支援一臺主庫同時向多臺從庫進行賦值,從庫同時也可以作為其他從伺服器的主庫,實現鏈式複製。

  一般主伺服器我們叫Master, 從伺服器叫Slave

  MySQL運維2-主從複製

二、主從複製優點

  1. 主庫出現問題,可以快速切換到從庫提供服務。
  2. 實現讀寫分離,降低主庫的訪問壓力。
  3. 可以在從庫備份,以避免備份期間影響主庫服務。

三、主從複製原理

  1. Master 主庫在事務提交時,會把資料變更記錄在二進位制日誌檔案binlog中。
  2. 從庫讀取主庫的二進位制檔案binlog,寫入到從庫的中繼日誌relay.log
  3. slave重做中繼日誌中的事件,將改變從庫自己的資料

  MySQL運維2-主從複製

四、主從複製搭建

  4.1 MySQL伺服器準備

    首先準備兩臺已經安裝了MySQL的主機,這裡我分為準備了兩臺10.0.3.93(Master) 和 10.0.3.94(Slave)

  4.2 主伺服器配置

    1、在MySQL的配置檔案中,增加如下兩行的配置,第三和第四的配置,可以根據需要配置

#MySQL服務ID,保證整個叢集中唯一,預設是1
server-id=1
#是否只讀,1代表只讀,0代表讀寫
read-only=0
#忽略的資料,指不需要同步的資料庫,和下面的一條配置預設如果不配置的話,即複製所有資料庫
#binlog-ignore-db=mysql
#指定同步的資料庫
#binlog-do-db=db01

    2、配置好了之後,要重啟MySQL服務。

    3、登入mysql,建立遠端連線的賬號,並授予主從複製許可權,這個賬號是用來在從伺服器上登入主服務用的。

# 建立一個mysql使用者為houlei,並設定密碼為:Se7eN521,該使用者可以在任意主機連線該MySQL服務
mysql> create user 'houlei'@'%' identified with mysql_native_password by 'Se7eN521'; Query OK, 0 rows affected (0.03 sec) # 為'houlei'@'%' 使用者分配主從複製許可權 mysql> grant replication slave on *.* to 'houlei'@'%'; Query OK, 0 rows affected (0.01 sec)

    4、透過指令,檢視二進位制日誌座標,這裡的資料也是需要在從服務上配置需要的

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000005 |      156 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

  4.3 從伺服器配置

    1、從伺服器上在MySQL的配置檔案中增加下面的配置

#MySQL服務ID,保證整個叢集中唯一
server-id=2
#是否只讀 1代表只讀 0代表讀寫
read-only=1

    2、配置好了之後,要重啟MySQL服務。

    3、登入mysql,設定主庫配置

      mysql-8.0.23以後的版本,執行以下SQL

change replication source to host='xxx.xxx.xxx.xxx', source_user='xxx',soucre_password='xxx',source_log_file='xxx',source_log_pos=xxx;

      mysql-8.0.23以前的版本,執行以下SQL,但是mysql-8.0.23以後的版本也是相容mysql-8.0.23以前的這個SQL的,所以怕麻煩去查版本的,可以直接使用這個mysql-8.0.23以前的

change master to master_host='xxx.xxx.xxx.xxx',master_user='xxx',master_password='xxx',master_log_file='xxx',master_log_pos='xxx'

      引數解釋

    • source_host/master_host:  主庫IP地址。
    • source_user/master_user:連線主庫的使用者名稱。
    • source_password/master_password:連線主庫的密碼。
    • source_log_file/master_log_file:binlog日誌檔名。
    • source_log_pos/master_log_pos:binlog日誌檔案位置,這個引數是不用加引號或單引號的。

      示例:注意該語句一定要在從庫上執行

change master to master_host='10.0.3.93',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000005',master_log_pos=156

 

    4、啟動主從複製

    • mysql-8.0.23之後:start replica;
    • mysql-8.0.23之前:start slave;

    

    5、檢視主從同步狀態

    • mysql-8.0.23之後:show replica status\G;
    • mysql-8.0.23之前:show slave status\G; 

    

    說明1:這裡主要看Slave_IO_Running和Slave_SQL_Running這兩個是否為YES,全部為YES說明配置成功

五、主從複製測試

  MySQL運維2-主從複製

  說明1:主從原始的都是隻有四張系統表

  MySQL運維2-主從複製

  說明2:主伺服器上建立了一個資料庫db01,在從伺服器上查詢,就馬上顯示了剛建立的db01

  MySQL運維2-主從複製

  說明3:在主伺服器上建立了一張表,馬上就主從複製到了從伺服器上

  MySQL運維2-主從複製 

  說明4:主表中插入資料,也會馬上覆制到從表中,同樣的修改和刪除資料也會同步複製過去。

 

相關文章