MySql的主從複製、主主複製【MySql 5.7,Docker】

一、環境準備

我們需要準備兩臺MySql,我這裏使用docker,那麼我就需要開啓兩個MySql容器就好了。
docker安裝MySql看這裏 Docker安裝MySql並啓動
docker相關命令 Docker常用命令【鏡像、容器、File】持續更新…


二、主從複製

2-1:配置主服務器

2-1-1:配置主服務器的 my.cnf 添加以下內容

[mysqld]
## 同一局域網內注意要唯一
server-id=1
## 開啓二進制日誌功能,可以隨便取(關鍵)
log-bin=mysql-bin

如果你是使用我上面那種方式啓動的MySql,那麼你只需要去你相關聯的宿主機的配置文件夾裏面去建立一個 my.cnf 然後寫入上面的類容就好了。

比如:我的啓動命令如下(不應該換行的,這裏爲了方便查看,我給它分行了)

那麼我只需要在 /docker/mysql_master/conf 這個目錄下創建 my.cnf 文件就好了。

 docker run -p 12345:3306 --name mysql_master 
-v /docker/mysql_master/conf:/etc/mysql/conf.d 
-v /docker/mysql_master/logs:/logs 
-v /docker/mysql_master/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2-1-2:重啓服務

這個命令是需要在容器裏面執行的

 service mysql restart

docker重啓mysql會關閉容器,我們需要重啓容器。

2-1-3:查看 skip_networking 的狀態

確保在主服務器上 skip_networking 選項處於 OFF 關閉狀態, 這是默認值。
如果是啓用的,則從站無法與主站通信,並且複製失敗。

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

2-1-4:創建一個專門用來複制的用戶

CREATE USER 'repl'@'%' identified by '123456';

GRANT REPLICATION SLAVE ON *.*  TO  'repl'@'%';

2-2:配置從服務器

2-2-1:配置從服務器的 my.conf (和上面一致)

[mysqld]
server-id=2

我的命令如下

docker run -p 12346:3306 --name mysql_from 
-v /docker/mysql_from/conf:/etc/mysql/conf.d 
-v /docker/mysql_from/logs:/logs 
-v /docker/mysql_from/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2-2-2:重啓 從服務器 (和上面一致)

2-2-3:配置連接到主服務器的相關信息

在從服務器配置連接到主服務器的相關信息 (在容器裏面的mysql執行)

mysql>  CHANGE MASTER TO MASTER_HOST='xxxxx', MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456';

上面代碼的xxxxx你需要換成你的IP,docker 查看容器 IP 的命令如下:

docker inspect --format={{.NetworkSettings.IPAddress}}’ 容器名稱/容器id

啓動的那個從服務器的線程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

2-2-4:查看同步狀態

mysql>  show slave status \G;

在這裏插入圖片描述


2-3:測試

測試的話,你可以在主服務器裏面,創建一個數據庫,發現從服務器裏面也有了,就成功了。


2-4:其它

2-4-1 :如果你還想要一個從服務器,那麼你只需要按照上面配置從服務器再配置一個就行了,

2-4-2 :新建的從服務器,會自動保存主服務器之前的數據。(測試結果)


三、主主複製

如果你上面的主從複製搞定了,那麼這個主主複製就很簡單了。我們把上面的從服務器也改成主服務器

1、修改上面的從服務器的my.cnf文件,和主服務器的一樣(注意這個server-id不能一樣)然後重啓服務器

2、在從服務器裏面創建一個複製用戶創建命令一樣(這裏修改一下用戶名可以改爲 repl2)

3、在之前的主服務器裏面運行下面這個代碼

 CHANGE MASTER TO MASTER_HOST='xxxx', MASTER_PORT=3306,MASTER_USER='repl2',MASTER_PASSWORD='123456';

start slave;

4、測試



四、其它

上面主要是教你怎麼搭建一個MySql集羣,但是這裏面還有很多其它的問題。也是我在學習過程中思考的問題,可能有的小夥伴上來看到文章長篇大論的看不下去,只想去實現這樣一直集羣功能,所以我就把問題寫在下面了。

1、MySQL的replication和pxc

MySql的集羣方案有replication和pxc兩種,上面是基於replication實現的。

replication: 異步複製,速度快,無法保證數據的一致性。
pxc: 同步複製,速度慢,多個集羣之間是事務提交的數據一致性強。


2、MySQL的replication數據同步的原理

我們在配置的時候開啓了它的二進制日誌,每次操作數據庫的時候都會更新到這個日誌裏面去。主從通過同步這個日誌來保證數據的一致性。


3、可否不同步全部的數據

可以配置,同步哪些數據庫,甚至是哪些表。


4、怎麼關閉和開始同步

mysql> STOP SLAVE;

mysql> START SLAVE;

5、我就我的理解畫出了,主從、主從從、主主、複製的圖。

在這裏插入圖片描述


6、視頻講解

https://www.bilibili.com/video/BV1BK4y1t7MY/


7、如果對你有用可以關注我的微信公衆號,一起成長噢。

在這裏插入圖片描述



參考

https://www.jianshu.com/p/faf0127f1cb2
https://www.cnblogs.com/songwenjie/p/9371422.html

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