MySQL8.0輕鬆搞定GTID主從複製

KunlunDB發表於2022-01-21
為什麼需要主從複製?


通俗來講,如果對資料庫的讀和寫都在同一個資料庫伺服器中操作,業務系統效能會降低。 

為了提升業務系統效能,優化使用者體驗,可以通過做主從複製來減輕主資料庫的負載。 

而且如果主資料庫當機,可快速將業務系統切換到從資料庫上,可避免資料丟失。


主從複製原理

  • 主庫將更新記錄儲存於Binlog檔案中,並通過Binglog Dump執行緒傳送給從庫。


  • 從庫的I/O執行緒從主庫讀取Binlog更新的資料,寫入到Relay log中。


  • 從庫的SQL執行緒讀取Relay log檔案的資料寫入從庫,實現同步。

MySQL8.0輕鬆搞定GTID主從複製

採用GTID (Global Transaction ID) 主從複製方式,保證了每個在主庫上提交的事務在叢集中有一個唯一的ID。


這種方式強化了資料庫的主從一致性,故障恢復以及容錯能力。


相比於早期通過master_log_file,master_log_pos同步的主從複製,省去了從庫當機重啟後,需要重新配置的問題。

 

接下來介紹在虛擬機器centos8版本, 實現GTID主從複製的三大步驟:

一.MySQL8.0安裝

1.1、 使用rpm來安裝MySQL
    wget

    1.2、 啟動mysql並設定開機自啟動
      systemctl start mysqld.servicesystemctl enable mysqld.service

      1.3、 關閉防火牆並設定開機不啟動
        systemctl stop firewalld.servicesystemctl disable firewalld.service

        1.4、 登入,無需密碼,當前最新版本為8.0.26
          mysql

          1.5、 檢視BINLOG狀態,最新版本預設已經開啟
            mysql> show variables like '%log_bin%';

            1.6、 複製安裝好MySQL8的虛擬機器映象,作為從庫
             
            二.主庫配置

            2.1、 設定server-id,開啟GTIT
              
              
              vim /etc/my.
              cnf
              
              
              
              # 新增
              
              [
              mysqld]
              
                  server-
              id=
              
              1
              
                  gtid_mode=
              
              on
              
                  enforce-gtid-consistency=
              
              true
              
              
              
              # 重啟mysql systemctl restart mysqld.service
               
              2.2、 登入mysql,新增用於同步的資料庫賬號
                mysql> create user 'kunlun'@'%' identified by '123456';mysql> grant replication slave on *.*  to 'kunlun'@'%';mysql> flush privileges;

                三.從庫配置

                3.1、 刪除auto.cnf,重啟自動生成server-uuid
                  rm -f /var/lib/mysql/auto.cnf   # 複製的虛擬機器映象,UUID會重複

                  3.2、 設定server-id, 主庫和從庫server-id不要重複
                    vim /etc/my.cnf# 新增[mysqld]    server-id=2    gtid_mode=on    enforce-gtid-consistency=true# 重啟mysqlsystemctl restart mysqld.service

                    3.3、 登入mysql,配置主從同步
                      mysql> change master to master_host='192.168.25.139',    #主庫IPmaster_port=3306,          #預設埠master_user='kunlun',        #第二步建立的賬戶master_password='123456',      #密碼master_auto_position = 1;

                      3.4、 啟動從庫服務
                        mysql> start slave;
                         
                        3.5、 檢視狀態
                          mysql> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for source to send event             Slave_IO_Running: Yes            Slave_SQL_Running: Yes

                          3.6、 測試

                          在主庫建立資料庫:

                            mysql> create database mydb;


                            在從庫檢視:

                              mysql> show databases;

                              至此,GTID方式的主從複製已經搭建成功。


                              注意


                              要實現MySQL的Replication,首先必須開啟master端的binlog(mysql-bin.xxxxxx)日誌功能,否則無法實現mysql的主從複製。


                              因為 MySQL的整個主從複製過程實際上就是:slave端從master端獲取binlog日誌,然後再在自己身上完全順序的執行該日誌中所記錄的各種SQL操作。


                              END


                              來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011764/viewspace-2853169/,如需轉載,請註明出處,否則將追究法律責任。

                              相關文章