【MySQL】使用docker配置主從複製(主庫和從庫都是全新的情況)

這篇文章只是讓大家瞭解一下mysql的主從複製,並且實現了一個案例
但是這個案例不是典型的案例
後面會在寫其他的配置方法

主從複製解決的問題

  • 數據分佈
  • 負載均衡
  • 備份
  • 高可用和故障切換

在這個案例中,我們只實現了備份 。其他幾個點,我們後邊一個一個實現,就不寫概念了

主從複製是如何工作的

這裏寫的只是簡單的實現過程,具體細節是很麻煩的,建議大家都去了解了解

  • 主庫會把數據的更改記錄在一個二進制文件
  • 從庫會把主庫的二進制文件複製到複製到自己的中繼日誌上(MySQL的日誌類型有6中,不清楚的可以看看這篇文章【MySQL】日誌分類
  • 從庫讀取中繼日誌的時間,然後重新放到備庫的數據庫上

開始準備

這是使用docker安裝MySQL的流程
這裏我們假定大部分配置採用默認值即可,在主庫和備庫都是全新
安裝並且擁有同樣的數據時這樣的假設是合理的。接下來我們將展示如何一步步配置複製:假設有服務
器server1(IP地址172.10.0.2)和服務器server2(IP地址172.10.0.3)

【Docker】安裝MySQL8.0

在使用docker把MySQL8.0的主節點安裝好後在創建倆個MySQL的從節點

分別執行下面語句,這倆個語句分別是創建mysql_slave 和 mysql_slave1的容器

docker run -itd --name mysql-slave -p 3307:3306  --net mynetwork --ip 172.10.0.3 -e MYSQL_ROOT_PASSWORD=123456  mysql

docker run -itd --name mysql-slave1 -p 3308:3306  --net mynetwork --ip 172.10.0.4 -e MYSQL_ROOT_PASSWORD=123456  mysql

在這裏插入圖片描述

可以看到我們現在創建了三個MySQL的容器

  • 第一個是mysql-master
  • 第二個是mysql-slave
  • 第三個是mysql-slave1

然後三臺節點都進入到各自的容器裏
docker exec -it id /bin/bash

開始配置主從複製

創建賬號

# 創建一個賬號
CREATE USER 'master'@'172.10.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
# 給予複製權限
GRANT REPLICATION SLAVE ON *.* TO 'master'@'172.10.0.%';

修改主節點和從節點的配置文件在/etc.mysql/my.cnf
添加
server-id=1
這個server_id 主機跟從機的值堅決不可以一樣 一般這個值是根據ip地址的後幾位來確定

在這裏插入圖片描述

授權給從節點

CHANGE MASTER TO
MASTER_HOST='172.10.0.2',
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=0;

然後查看主從同步狀態
Slave_IO_State、Slave_IO_Running和Slave_SQL_Running這三列
顯示當前備庫複製尚未運行。

在這裏插入圖片描述

開啓主從複製

# 開啓主從同步
start slave

# 停止主從複製
stop slave

然後在查看一下主從同步狀態
在這裏插入圖片描述

最後一步開始測試主從複製

先給master創建一個數據庫 kaka_test_master_slave

create datebase kaka_test_master_slave;

在這裏插入圖片描述

然後查看mysql_slave的數據庫看有沒有創建出來kaka_test_master_slave這個數據庫

在這裏插入圖片描述

測試添加數據

創建表和添加測試數據

CREATE TABLE IF NOT EXISTS `phone` (
`phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`card` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (phoneid)
);

INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); I
INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));



在這裏插入圖片描述
在這裏插入圖片描述

查看mysql_slave的數據狀態
數據一切正常

在這裏插入圖片描述

總結:

  • 在這個案例中
  • 我們只配置了一個master_slave 從機
  • master_slave1這個從機沒有配置
  • 配置跟master_slave是一致的
  • 在配置過程中我們需要注意幾個問題
  • 第一個:給主機創建用戶和給予權限時版本不同是有區別的
  • 第二個:在從機的my.cnf裏邊配置的server_id沒有生效問題(咔咔暫時是用set global方式來做的,但是數據庫重啓就會失效),這個問題在這篇文章寫完解決
  • 第三個:對docker的配置一定要對啊!要不就完犢子了

博主微信歡迎交流

在這裏插入圖片描述

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