docker高級篇1-dockeran安裝mysql主從複製

大家好,咱們前面通過十篇的文章介紹了docker的基礎篇,從本篇開始,咱們的《docker學習系列》將要進入到高級篇階段(基礎篇大家可以查看之前發佈的文章)。

咱們先來介紹:docker複雜方式安裝軟件。通過按照mysql\redis兩個案例來講解

Docker複雜安裝說明,兩個案例:

1:安裝mysql主從複製

2:安裝redis集羣

本文咱們就先來實現第一個案例:mysql主從複製

f2f6cd061076b10def7e4d82efea9fc0.png

 

大家好,我是凱哥Java(kaigejava),樂於分享,每日更新技術文章,歡迎大家關注“凱哥Java”,及時瞭解更多。讓我們一起學Java。也歡迎大家有事沒事就來和凱哥聊聊~~~

安裝mysql主從搭建步驟:

1:新建主服務器容器實例3307

命令

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql-master/log:/var/log/mysql \

-v /mydata/mysql-master/data:/var/lib/mysql \

-v /mydata/mysql-master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

2:進入/mydata/mysql-master/conf目錄下新建my.cnf

修改配置:

cd /mydata/mysql-master/conf

vim my.cnf

## 輸入以下內容

[mysqld]

## 設置server_id,同一局域網中需要唯一

server_id=101

## 指定不需要同步的數據庫名稱

binlog-ignore-db=mysql  

## 開啓二進制日誌功能

log-bin=mall-mysql-bin  

## 設置二進制日誌使用內存大小(事務)

binlog_cache_size=1M  

## 設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed  

## 二進制日誌過期清理時間。默認值爲0,表示不自動清理。

expire_logs_days=7  

## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷。

## 如:1062錯誤是指一些主鍵重複,1032錯誤是因爲主從數據庫數據不一致

slave_skip_errors=1062

注意文件權限應該是644

3:修改完配置之後重啓master實例

修改完mysql配置後,記得重啓實例

docker restart mysql-master

如果重啓失敗,查看是否因爲my.conf文件寫錯導致。

或者查看錯誤日誌: docker logs 容器id

45ae4951650045b830ac9fd85d270495.png

 

修改後,重新啓動容器。

6bd2e69bbd7b3425623a5977f1cc6416.png

 

4:進入mysql-master容器

進入到mysql-master。然後登錄mysql試試。

在前臺顯示進入容器:

docker exec -it mysql-master /bin/bash

進入容器後,登錄mysql:

mysql -uroot -p

5:master容器實例內創建數據同步用戶

mysql創建用戶及密碼命令:

命令模板:CREATE USER '用戶名'@'可以訪問的ip' IDENTIFIED BY '密碼'

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

賦權命令模板:GRANT REPLICATION 權限 on 訪問ip端口 TO '用戶名'@‘ip’

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

6:新建從服務器容器實例3308

命令:

docker run -p 3308:3306 --name mysql-slave \

-v /mydata/mysql-slave/log:/var/log/mysql \

-v /mydata/mysql-slave/data:/var/lib/mysql \

-v /mydata/mysql-slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

區別:

1:修改了宿主機的端口映射

2:修改了容器名稱

3:修改了數據卷掛載的目錄

5ebf4f748e01a2a5eef0db00072b4786.png

 

7:進入/mydata/mysql-slave/conf目錄下新建my.cnf

修改配置:

cd /mydata/mysql-slave/conf

vim my.cnf

## 輸入以下內容

[mysqld]

## 設置server_id,同一局域網中需要唯一

server_id=102

## 指定不需要同步的數據庫名稱

binlog-ignore-db=mysql  

## 開啓二進制日誌功能,以備Slave作爲其它數據庫實例的Master時使用

log-bin=mall-mysql-slave1-bin  

## 設置二進制日誌使用內存大小(事務)

binlog_cache_size=1M  

## 設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed  

## 二進制日誌過期清理時間。默認值爲0,表示不自動清理。

expire_logs_days=7  

## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷。

## 如:1062錯誤是指一些主鍵重複,1032錯誤是因爲主從數據庫數據不一致

slave_skip_errors=1062  

## relay_log配置中繼日誌

relay_log=mall-mysql-relay-bin  

## log_slave_updates表示slave將複製事件寫進自己的二進制日誌

log_slave_updates=1  

## slave設置爲只讀(具有super權限的用戶除外)

read_only=1

重新賦權

8:修改完配置後重啓slave實例

修改完mysql配置後,記得重啓實例

docker restart mysql-slave

9:在主數據庫這查看主從同步狀態

在mysql主庫的鏡像中,進入主mysql,然後執行命令:

show master status;

10:進入mysql-slave容器

進入到mysql-master。然後登錄mysql試試。

在前臺顯示進入容器:

docker exec -it mysql-slave /bin/bash

進入容器後,登錄mysql:

mysql -uroot -p

11:在從數據庫中配置主從複製

在mysql從庫的鏡像中,進入從mysql,然後執行命令公式:

change master to master_host='宿主機ip', master_user='在主庫上創建用於主從同步的用戶賬號', master_password='在主數據庫創建的用於同步數據的用戶密碼', master_port=master庫的端口, master_log_file='masterlog文件名稱', master_log_pos=當前開始點, master_connect_retry=重試;

公式說明:見註釋

master_host:主數據庫的ip地址

master_port:主數據庫的端口

master_user:在主數據庫創建的用於同步數據的用戶賬號

master_password:在主數據庫創建的用於同步數據的用戶的密碼

master_log_file:指定從數據庫要複製數據的日誌文件。通過查看主數據庫的狀態,獲取File參數;

master_log_pos:指定從數據庫從哪個位置開始複製數據,通過查看主數據的狀態,獲取Position參數

master_connect_retry:連接失敗充值的時間間隔,單位:秒

12:在從數據庫中查看主從同步狀態

查看主從同步第二中方法

 

show slave status \G;

b1ec773e369c953086788867cd746710.png

86fd45001b5ee441b8dc280518cb6b1a.png

13:在從數據庫中開啓主從同步

進入從數據庫的mysql後,開啓主從同步:

start slave;

14:查看從數據庫狀態發現已經同步

7fafaff4793774d5d5765a4ffd166f49.png

 

15:主從複製測試

 

 

結束語

如操作有問題歡迎去 我的 ​​​ 個人博客(www.kaigejava.com)​​​​留言或者  ​​​ 微信公衆號(凱哥Java)​​​​留言交流哦。

 

直通車,本系列教程已發佈文章,快速到達,《Docker學習系列》教程已經發布的內容如下:

【圖文教程】Windows11下安裝Docker Desktop

【填坑】在windows系統下安裝Docker Desktop後遷移鏡像位置

【Docker學習系列】Docker學習1-docker安裝

【Docker學習系列】Docker學習2-docker設置鏡像加速器

【Docker學習系列】Docker學習3-docker的run命令幹了什麼?docker爲什麼比虛擬機快?

【Docker學習系列】Docker學習2-常用命令之啓動命令和鏡像命令

【Docker學習系列】Docker學習系列3:常用命令之容器命令

【Docker學習系列】Docker學習4-常用命令之重要的容器命令

【Docker教程系列】Docker學習5-Docker鏡像理解

【Docker教程系列】Docker學習6-Docker鏡像commit操作案例

【Docker學習教程系列】7-如何將本地的Docker鏡像發佈到阿里雲

【Docker學習教程系列】8-如何將本地的Docker鏡像發佈到私服?

「Docker學習系列教程」9-Docker容器數據卷介紹

「Docker學習系列教程」10-Docker容器數據卷案例

Docker學習11-Docker常規方式安裝軟件

【Docker學習教程系列彙總】筆記及遇到問題解決文章



 

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