首頁  >  文章  >  資料庫  >  mysql基於日誌的主從複製詳解

mysql基於日誌的主從複製詳解

coldplay.xixi
coldplay.xixi轉載
2020-08-17 16:55:332225瀏覽

mysql基於日誌的主從複製詳解

總是有人問我會不會讀寫分離,我有時真的不知道怎麼回答,這麼滴吧,技術本身不難你,難的是咱們能不能遇得到這麼大的項目。如果是真有這麼大項目,光讀寫分離這個事肯定不是一兩個人在搞,應該是多人協作的。

相關學習推薦:mysql影片教學

所以呢!我沒搞過。

但是…

不能做實驗環境嗎? (一個尷尬的笑容)

我從找文檔資料到實驗落地,一共花了3天時間(因為不是全天都在圍繞著這個事情哇)。基本上搞定,就是說,如果有人問我會不會,我說我已經操作過了,不是什麼難事。

具體注意點:


  1. 主從之間的防火牆需要放行
  2. mysql-id 得唯一見my. cnf
  3. uuid 得唯一見auto.cnf
  4. 主伺服器要授權,一般授權一個slave帳號給從伺服器使用

##常用幾個指令(針對日誌的方式)


  1. 在主函式庫上操作的有

    mysql > show master status; #看主函式庫狀態

    mysql >  grant replication slave on

    . to 'slave'@'%ip%' identified by 'password';#  to 後面的解釋: 'slave' 代表哪個帳戶,@後面的是從伺服器的IP by 後面的是密碼;

    systemctl status firewalld

    # 查看防火牆狀態

    firewall-cmd – list-all # 查看防火牆的連接埠清單

    firewall-cmd –permanent –zone=public –add-port=3306/tcp

    # 放行3306 埠

    firewall- cmd –reload  

    # 重啟防火牆

    另外iptable 的話可以自行看看哇

  2. ##在從庫上操作主要有
  3. mysql>  stop slave; // 停止複製
    1. mysql>  reset slave; // 重設複製
    2. mysql>  start slave; // 開啟複製
    3. mysql> show slave status\G;
    4. # 查看狀態
##具體設定


環境介紹
  1. 主伺服器 192.168.5.238   centos 7.4
      從伺服器192.168.5.239    centos 7.4
    1. 利用日誌來進行主從設定
    主伺服器上的設定
  2. 防火牆操作,防止後面出奇怪的問題參考常用幾個指令的防火牆操作
    1. mysql 的日誌相關的設定 其他的先不用動主要是看這段
    2. # aster live copy configure

      log-bin=mysql-bin  //日誌檔案名稱binlog_format=mixed  // 這個日誌格式,還有幾個選項,大家都選mixed  可選項statement/row/mixed,如果想深究可以去看官方文件server-id   = 238 //為了不重複使用盡量採用伺服器IP 的最後一位來命名
      skip_name_resolve=ON //這個直接寫上就可以了,參考一下別人的文檔
      expire_logs_days = 10 //設定日誌保存的天數,這個吧我覺得可以不用加,加上也無所謂,因為在測試環境,如果正式上線跑的話,就要掂量一下了


      # /etc/init.d/mysql restart // 這個不一定是這個指令看自己是用什麼方式安裝的centos 也有systemctl restart mysql的這個不懂可以多研究一下linux操作
      ##如果兩台伺服器不是複製的話,auto.cnf 的uuid應該會不一樣,如果是複製的話,就該看看了,這個在mysql的安裝目錄的/var、目錄下如果有就把這個檔案刪除或mv 備份一下

    #mysql配置一下複製權限
  3. # mysql -uroot -p “password” //登入mysql伺服器、會讓你輸入密碼
      mysql>GRANT replication slave ON . TO 'slave'@'%' IDENTIFIED BY '111111'; // 解釋replication 分配複製的權限這個. 可以操作那個庫 後面的'slave'@'%' 表示任何主機用slave都可以​​進行從庫複製,也可以指定到IP 後面是密碼哈
      mysql> show master status;
      —————— ———- ————– —————— ——————-
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      ———— ———- ————– ———————— ——————
      | |     2812 |              |                  |                |    中對中  1 row in set (0.00 sec)
      看到上面的這個表表示成功了

    從庫上的設定
    1. 修改my.cnf
    2. log-bin=mysql-bin  //日誌檔案名稱
      binlog_format=mixed //日誌格式

      server-id   =239    //伺服器ID 這個和主伺服器一個解釋,用IP的尾巴


      # expire_logs_days = 10  //這個我註解掉了,
      # early-plugin-load = “” //這個暫時沒有使用,如果啟用可以配置此項,主從複製這個項目並不是關鍵項目relay_log = mysql-relay-bin //這個是個從庫的複製日誌relay_log_index=relay_log.index //日誌索引


      1. /etc/init.d/mysql restart // 這個不一定是這個指令看自己是用什麼方式安裝的centos 也有systemctl restart mysql的這個不懂可以多研究一下linux操作

        #設定從函式庫

      2. 進入從函式庫的mysql 終端 #mysql -uroot -p //進入終端機


        # mysql -uroot -p //進入終端機(之所以寫詳細點,就是怕看到此文的人會誤會操作不全)



        關閉slave  
      3. # 注意設定從函式庫之前先關掉去slave;
      4. mysql>stop slave;  //這個是關閉從函式庫哇,保證一把過

      5. 修改master參數
      6. mysql>change master to
        master_host='192.168.5.238',

        master_user='slave',

        master_password='這裡填上面設定主庫複製權限時的密碼',

        master_log_file='mysql-bin.000010', //這裡填在主函式庫show master status 的檔名,位置對著抄就好了

        master_log_pos=2812; //在主函式庫的show master status 找
        1. 啟動從函式庫

          ##mysql>start slave; //啟動從函式庫
          檢視主從複製是否成功
          #mysql> show slave status \G;

                   Slave_IO_State: Waiting for master to send event
                        Master_Host: 192.168.5.238
                        Master_User: slave
                        Master_Port: 3306
                      Connect_Retry: 60
                    Master_Log_File: mysql-bin.000010
                Read_Master_Log_Pos: 2812
                     Relay_Log_File: mysql-relay-bin.000013
                      Relay_Log_Pos: 3025
              Relay_Master_Log_File: mysql-bin.000010
                   Slave_IO_Running: Yes
                  Slave_SQL_Running: Yes
          #看到Slave_IO_Running 和Slave_SQL_Running 值都為Yes  說明就成功了,如果不成,請看下面的提示信息,對著谷歌百度應該能找出來的
        2. #我在配置時遇到了一個問題,就是報uuid錯誤,原因是我的實驗環境是一個虛擬機器安裝完mysql後複製的,所以導致mysql的uuid 相同了
    3. # cd /usr/local/mysql/var
# mv auto.cnf auto.cnf.back //這個你看有沒有,沒有就不操作,有就這樣

#  /etc/init.d/mysql restart  //重新啟動資料庫

然後執行show slave status\G;觀察兩個yes
  1. 至此,基於日誌的主從複製就完成了

################################## ##########防火牆要先看######步驟無所謂,對著搞,直到成功######細心,不能慌########### #相關圖文教學:###mysql資料庫圖文教學##########

以上是mysql基於日誌的主從複製詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除