MyCat詳解(2.主從搭建)

1,概述主從介紹

Mysql主從又叫Replication、AB複製。簡單講就是A與B兩臺機器做主從後,在A上寫數據,另外一臺B也會跟着寫數據,實現數據實時同步

mysql主從是基於binlog,主上需開啓binlog才能進行主從

主從過程大概有3個步驟

主將更改操作記錄到binlog裏

從將主的binlog事件(sql語句) 同步本機上並記錄在relaylog裏

從根據relaylog裏面的sql語句按順序執行

2,主從作用

實時災備,用於故障切換

讀寫分離,提供查詢服務

備份,避免影響業務

主從形式
在這裏插入圖片描述

  • 一主一從

  • 主主複製

  • 一主多從—擴展系統讀取的性能,因爲讀是在從庫讀取的

  • 多主一從—5.7版本開始支持

  • 聯級複製

3,主從複製原理

在這裏插入圖片描述

4,主從複製步驟

主庫將所有的寫操作記錄在binlog日誌中,並生成log dump線程,將binlog日誌傳給從庫的I/O線程

從庫生成兩個線程,一個是I/O線程,另一個是SQL線程


I/O線程去請求主庫的binlog日誌,並將binlog日誌中的文件寫入relay log(中繼日誌)中

SQL線程會讀取relay loy中的內容,並解析成具體的操作,來實現主從的操作一致,達到最終數據一致的目的

5,主從複製配置步驟

確保從數據庫與主數據庫裏的數據一致

在主數據庫裏創建一個同步賬戶授權給從數據庫使用

配合主數據庫(修改配置文件)

配置從數據庫(修改配置文件)

需求

搭建兩臺MYSQL服務器,一臺作爲主服務器,一臺作爲從服務器,主服務器進行寫操作,從服務器進行讀操作

6,環境說明【使用docker啓動兩個】

名稱 Ip Port
M1 192.168.149.128 3307
M1S1 192.168.149.128 3308

在這裏插入圖片描述

docker run --name M1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run --name M1S1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

7,修改配置文件

將容器裏面的配置文件複製出來,主要修改服務器的配置

在root目錄下創建一個mysqlms的目錄存放從docker容器裏面複製過來的配置文件
在這裏插入圖片描述

docker cp M1:/etc/mysql/conf.d/docker.cnf m1.cnf
docker cp M1S1:/etc/mysql/conf.d/docker.cnf m1s1.cnf
在這裏插入圖片描述

7.1,主機的配置m1.cnf

主機裏面要記錄sql 語句,以後從機會把該sql 語句偷過去

在這裏插入圖片描述

7.2,從機的配置m1s1.cnf

在這裏插入圖片描述

7.3,配置文件修改後,複製到容器裏面

docker cp m1.cnf M1:/etc/mysql/conf.d/docker.cnf

docker cp m1s1.cnf M1S1:/etc/mysql/conf.d/docker.cnf

在這裏插入圖片描述

重啓mysql(m1,m1s1)

docker restart M1 M1S1
在這裏插入圖片描述

8,執行sql語句

8.1進入主機

docker exec -it M1 bash
mysql -uroot -p123456

在這裏插入圖片描述

創建用戶

create user ‘rep’@’%’ identified by ‘123456’;
在這裏插入圖片描述

給該用戶授予權限:

grant replication slave on . to ‘rep’@’%’;

在這裏插入圖片描述

刷新權限

flush privileges;
在這裏插入圖片描述

至此:M1 裏面已經創建了一個用戶:rep 123456 擁有所以庫,所有表replication slave

嘗試使用M1 裏面的rep 用戶登錄:

在這裏插入圖片描述

8.2進入從機裏面執行相關配置

docker exec -it M1S1 bash

mysql -u root -p123456

在這裏插入圖片描述

change master to master_host="",master_port=,master_user="",master_password="",master_log_file="",master_log_pos=

master_log_file:該文件具體叫什麼名稱,需要從主機裏面去看看:

進入M1 裏面使用root 用戶登錄M1,執行下面的sql:

show master status;

在這裏插入圖片描述

修改上面的SQL執行
在這裏插入圖片描述

change master to master_host=“117.48.203.125”,master_port=3307,master_user=“rep”,master_password=“123456”,master_log_file=“master.000001”,master_log_pos=745;

啓動主從:(在M1S1裏面執行)

start slave ;

在這裏插入圖片描述

查詢主從的狀態(M1S1)

show slave status \G;
在這裏插入圖片描述

成功的標誌:
在這裏插入圖片描述

9,搭建失敗的原因

9.1,第一個不是yes,是connecting

是因爲從機使用你配置的主機信息沒有登陸到主機裏面!

修改(從機裏面)

stop slave;

change master to master_host="192.168.149.128",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;

start slave;

9.2,第二個不是yes ,是no

在這裏插入圖片描述

從機會複製主機裏面的sql 語句,來自己執行!

實驗時先把從機裏面的db3 刪除

再把主機裏面的db3 刪除->從機裏面複製該刪除的命令->從機執行刪除的命令(db3),事務無法提交,將一直阻塞!
在這裏插入圖片描述

現在從機裏面要刪除db3 ,但是沒有db3,導致一直阻塞,以後的主從複製不會進行了

解決:在從機新建一個db3:

然後停止主從,啓動主從:

在這裏插入圖片描述

9.3,第一個不是yes,是no

就是你的server-id 沒有配置成功的原因,需要重新修改配置文件,複製配置文件到容器裏面,然後重啓就ok

9.4,mysql主從的操作規範

  1. 只能在主機裏面執行DML 語句,不能在從機裏面執行DML語句

  2. 在從機裏面可以執行查詢語句

  3. 主機只有一臺,但是從機可以有多臺

10,測試

在M1 裏面創建數據庫

看M1S1 有沒有複製過去

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章