一、主從複製概念
主從複製是指將主資料庫的DDL和DML操作透過二進位制日誌傳到從伺服器中,然後在從伺服器上對這些日誌重新執行也叫重做,從而使得從資料庫和主庫的資料保持同步。
MySQL支援一臺主庫同時向多臺從庫進行賦值,從庫同時也可以作為其他從伺服器的主庫,實現鏈式複製。
一般主伺服器我們叫Master, 從伺服器叫Slave
二、主從複製優點
- 主庫出現問題,可以快速切換到從庫提供服務。
- 實現讀寫分離,降低主庫的訪問壓力。
- 可以在從庫備份,以避免備份期間影響主庫服務。
三、主從複製原理
- Master 主庫在事務提交時,會把資料變更記錄在二進位制日誌檔案binlog中。
- 從庫讀取主庫的二進位制檔案binlog,寫入到從庫的中繼日誌relay.log
- slave重做中繼日誌中的事件,將改變從庫自己的資料
四、主從複製搭建
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說明配置成功
五、主從複製測試
說明1:主從原始的都是隻有四張系統表
說明2:主伺服器上建立了一個資料庫db01,在從伺服器上查詢,就馬上顯示了剛建立的db01
說明3:在主伺服器上建立了一張表,馬上就主從複製到了從伺服器上
說明4:主表中插入資料,也會馬上覆制到從表中,同樣的修改和刪除資料也會同步複製過去。