Docker安裝MySQL集群(主從復制)

為確保生產環境中的數據安全與可靠性,數據庫普遍采用主從集群架構(一主一從)進行部署。本文將系統闡述如何利用Docker鏡像實現數據庫集群的容器化部署,并完整記錄各配置環節的具體實現步驟。

一、主服務實例創建(可以先創建docker網絡)

  1. 首先通過下面的命令將主服務器實例創建完成
docker run -d -p 3306:3306 --privileged=true \
-v /appData/mysql/master/log:/var/log/mysql \
-v /appData/mysql/master/data:/var/lib/mysql \
-v /appData/mysql/master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-master mysql:5.7

在這里插入圖片描述

主服務器運行成功。下面來修改一下對應的my.cnf配置。

  1. 添加主服務器對應配置文件,進入到 /appData/mysql/master/conf 目錄下,此目錄已掛載到容器內部,新建 my.cnf 文件,并添加如下內容:
## 設置編碼字符集
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8## 設置server_id,同一局域網中需要唯一
server_id=101## 指定不需要同步的數據庫名稱
binlog-ignore-db=mysql## 開啟二進制日志功能
log-bin=master-mysql-bin## 設置二進制日志使用內存大小(事務)
binlog_cache_size=1M## 設置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed## 二進制日志過期清理時間。默認值為0;表示不自動清理.
expire_logs_days=7## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷
## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062

進入到容器,檢查一下配置文件是否掛載成功。
在這里插入圖片描述

  1. 配置文件添加完畢后,重啟主服務器
docker restart mysql-master

查看編碼字符集是否修改成功:

docker exec -it mysql-master /bin/bashmysql -u root -pshow variables like '%character%';

在這里插入圖片描述
已經修改生效,說明剛剛修改的配置文件沒問題,進行下一步。

  1. 進入到主服務器的容器中,創建slave用戶并授權,用來同步數據使用
# 交互式模式進入容器內部
docker exec -it mysql-master /bin/bash# 使用root 用戶登錄mysql服務器
mysql -uroot -p# 創建slave用戶并授權
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

在這里插入圖片描述

二、從服務器實例創建

  1. 和主服務器創建的命令一樣,個別掛載地址需要調整一下,如果是在不同的服務器上,可直接執行;
docker run -d -p 3307:3306 --privileged=true \
-v /appData/mysql/slave/log:/var/log/mysql \
-v /appData/mysql/slave/data:/var/lib/mysql \
-v /appData/mysql/slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-slave mysql:5.7

在這里插入圖片描述

  1. 添加從服務器對應配置文件,進入到 /appData/mysql/slave/conf 目錄下,此目錄已掛載到容器內部,新建 my.cnf 文件,并添加如下內容:
## 設置編碼字符集
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
## 設置server_id,同一局域網中需要唯一
server_id=102## 指定不需要同步的數據庫名稱
binlog-ignore-db=mysql## 開啟二進制日志功能,以備slave作為其他數據庫實例的master時使用
log-bin=slave-mysql-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=slave-mysql-relay-bin## log_slave_updates 表示slave將復制事件寫進自己的二進制日志
log_slave_updates=1## slave 設置為制度(具有super權限的用戶除外)
read_only=1
  1. 重啟從服務器實例
docker restart mysql-slave
  1. 和主服務器一樣,登入mysql,使用命令行查看配置文件是否生效。
    在這里插入圖片描述

三、主從搭建

  1. 在主服務器中,查看當前主服務器情況,如下:
show master status;

在這里插入圖片描述
這里的信息很重要,主要作用是告訴從機同步的位置。

  1. 在從數據庫中配置主從復制,在從機的mysql命令行中,執行以下命令:
change master to master_host='192.168.152.128', master_user='slave', master_password='123456',master_port=3306,master_log_file='master-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;

參數說明:

master_host:主數據庫的|P地址;
master_port:主數據庫的運行端口:
master_user:在主數據庫創建的用于同步數據的用戶賬號;
master_password:在主數據庫創建的用于同步數據的用戶密碼;
master_log_file:指定從數據庫要復制數據的日志文件,通過査看主數據的狀態,獲取File參數;
master_log_pos:指定從數據庫從哪個位置開始復制數據,通過査看主數據的狀態,獲Position參數;
master_connect_retry:連接失敗重試的時間間隔,單位為秒。

執行完畢以后,查看一下從機的主從同步狀態:

show slave status \G;

這里命令的結尾使用了 “\G” 的形式,則是以下面這種類似于json的格式展示出來的,因為內容較多,如果以表格的形式展現,不易于閱讀。
在這里插入圖片描述
從圖中可以看到,兩個狀態值:

Slave_IO_Running: No
Slave_SQL_Running: No


這兩個值均為No,說明主從復制還未開始。

下面,繼續進行后續操作。

  1. 在從數據庫中開啟主從同步,執行下面的命令:
start slave;

在這里插入圖片描述

  1. 從數據庫開啟主從配置后,查看一下狀態,看看是否啟用主從同步功能;

在這里插入圖片描述
這里遇到了一個小坑,具體解決方案可參考:https://www.cnblogs.com/momo6656/p/14922886.html,我這里主要是因為防火墻的問題導致。如果經過多次調整,仍不生效,記得使用《重啟大法》,通常情況下,可以給你意外驚喜。
最終效果如下如:

在這里插入圖片描述

四、主從復制測試

  1. 在主數據庫中,新建數據庫、表以及插入信息;
    在這里插入圖片描述
  2. 從庫中查看是否同步;

加粗樣式
發現,數據已經完美同步。

  1. 使用客戶端再次進行測試;
    在這里插入圖片描述
    查詢從庫:
    在這里插入圖片描述
    至此,安裝完畢!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82239.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開篇:MCP理論理解和學習

文章目錄 零 參考資料一 MCP概念二 MCP核心架構和功能三 MCP VS OP(Others Protocol)3.1 函數調用3.2 模型上下文協議3.3 MCP VS Others Protocol3.3.1 MCP與Function Calling的對比優勢3.3.2 MCP與AI Agents的協同關系3.3.3 MCP與A2A協議的互補性3.3.4 MCP與傳統API的技術革新…

產品經理面經(三)

目錄 為什么想做產品經理?為什么適合做產品經理? 解析 我的回答: 你覺得產品經理應該具備什么品質 解析 我的回答 想做什么方向的產品經理呢&你知道產品經理分為哪幾種嗎? 解題思路 為什么想做產品經理?為…

Vue3 Composition API: 企業級應用最佳實踐方案

在當前前端技術迅速發展的環境下,Vue3 Composition API 成為了關注的焦點。它為開發人員提供了更加靈活和可維護的代碼結構,適用于構建大規模企業級應用。在本文中,我們將探討Vue3 Composition API的最佳實踐方案,幫助開發人員更好…

CentOS大師班:企業級架構與云端融合實戰

一、高級存儲管理與災難恢復 1. LVM動態卷擴展實戰 pvcreate /dev/sdb1 # 創建物理卷 vgcreate vg_data /dev/sdb1 # 創建卷組 lvcreate -L 100G -n lv_www vg_data # 創建邏輯卷 mkfs.xfs /dev/vg_data/lv_www # 格式化 mount /dev/vg_da…

使用VGG-16模型來對海賊王中的角色進行圖像分類

動漫角色識別是計算機視覺的典型應用場景,可用于周邊商品分類、動畫制作輔助等。 這個案例是一個經典的深度學習應用,用于圖像分類任務,它使用了一個自定義的VGG-16模型來對《海賊王》中的七個角色進行分類,演示如何將經典CNN模型…

[創業之路-377]:企業戰略管理案例分析-戰略制定/設計-市場洞察“五看”:看宏觀之社會發展趨勢:數字化、智能化、個性化的趨勢對初創公司的戰略機會

數字化、智能化、個性化趨勢為初創公司帶來了捕捉長尾需求、提升運營效率、創新商業模式等戰略機會,具體分析如下: 一、數字化趨勢帶來的戰略機會 捕捉長尾需求:數字化技術能夠幫助初創公司更好地捕捉市場中的長尾需求,滿足那些…

macOS 安裝 PostgreSQL

文章目錄 安裝安裝信息 驗證GUI 工具下載 安裝 最簡單的方式是通過 brew 安裝 brew install postgresql17該版本在 brew 上的詳情頁:https://formulae.brew.sh/formula/postgresql17 你也可以根據需要,搜索 安裝更新版本 如果你沒有安裝 brew&#xf…

安裝openresty使用nginx+lua,openresty使用jwt解密

yum install -y epel-release yum update yum search openresty # 查看是否有可用包 yum install -y openresty啟動systemctl start openresty驗證服務狀態systemctl status openresty設置開機自啟systemctl enable openrestysystemctl stop openresty # 停止服務 system…

全球化 2.0 | 云軸科技ZStack助力中東智慧城市高性能智能安防云平臺

在全球智慧城市加速建設的背景下,中東某大型城市通過部署云軸科技ZStack Cloud云平臺,成功實現公共安全視頻監控系統(CCTV)的智能化升級。該平臺以彈性計算、GPU智能調度、高可用架構為核心,支撐千路高清視頻流處理及人…

Day35打卡 @浙大疏錦行

知識點回顧: 三種不同的模型可視化方法:推薦torchinfo打印summary權重分布可視化進度條功能:手動和自動寫法,讓打印結果更加美觀推理的寫法:評估模式 作業:調整模型定義時的超參數,對比下效果。…

嵌入式軟件-如何做好一份技術文檔?

嵌入式軟件-如何做好一份技術文檔? 文章目錄 嵌入式軟件-如何做好一份技術文檔?一.技術文檔的核心價值與挑戰二.文檔體系的結構化設計三.精準表達嵌入式特有概念四. **像管理代碼一樣管理文檔**,代碼與文檔的協同維護五.質量評估與持續改進5.…

css五邊形

五邊形 .fu{width: 172rpx;height: 204rpx;overflow: hidden;border-radius: 10rpx;clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); }六邊形 clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);

【Java高階面經:微服務篇】1.微服務架構核心:服務注冊與發現之AP vs CP選型全攻略

一、CAP理論在服務注冊與發現中的落地實踐 1.1 CAP三要素的技術權衡 要素AP模型實現CP模型實現一致性最終一致性(Eureka通過異步復制實現)強一致性(ZooKeeper通過ZAB協議保證)可用性服務節點可獨立響應(支持分區存活)分區期間無法保證寫操作(需多數節點可用)分區容錯性…

頭歌軟工導論作業

一.集成測試和確認測試 第1關:集成測試 1、 集成測試的主要方法有CD A、 自頂向下集成方法 B、 自底向上集成方法 C、 漸增式測試方法 D、 非漸增式測試方法 2、 目前在進行集成測試時普遍采用非漸增式測試方法。B A、 √ B、 3、 自底向上集成策略是從主控制模…

MFC:獲取所有打印機的名稱(打印機模塊-1)

背景: 在一個 MFC 應用程序中,列出本地系統中安裝的打印機,并檢測是否存在“Microsoft Print to PDF”或“Microsoft XPS Document Writer”虛擬打印機。如果有,則選擇其中一個作為默認或后續操作對象;如果沒有&#…

設計模式-行為型模式(詳解)

模板方法 模板方法模式,它在一個抽象類中定義了一個算法(業務邏輯)的骨架,具體步驟的實現由子類提供,它通過將算法的不變部分放在抽象類中,可變部分放在子類中,達到代碼復用和擴展的目的。 復用: 所有子類可以直接復…

STM32中的IIC協議和OLED顯示屏

串口通信協議的缺點 串口通信通常需要至少三條線(TX、RX和GND),而 I2C 總線僅需要兩條信號線(SDA和SCL); 串口通信僅支持一對一通信,而 I2C 總線支持多機通信,允許單個主機與多個從…

30個性能優化方案

1.用String.format拼接字符串 不知道你有沒有拼接過字符串,特別是那種有多個參數,字符串比較長的情況。 比如現在有個需求:要用get請求調用第三方接口,url后需要拼接多個參數。 以前我們的請求地址是這樣拼接的: S…

docker中部署Universal Media Server (UMS)

Universal Media Server (UMS) 本身主要是作為桌面服務程序開發的(主要面向 Java GUI DLNA 播放),但確實可以通過 Docker 進行部署。雖然官方沒有提供 Docker 鏡像,但社區有一些可用的方式可以在 Docker 中運行它。 下面是一個可…

配置文件,xml,json,yaml,我該選哪個?

文章目錄 一、核心特性對比二、性能與生態系統三、適用場景與選型建議四、替代方案與趨勢五、總結 在軟件開發中,配置文件格式的選擇直接影響開發效率和維護成本。XML、JSON、YAML 是目前主流的三種格式,但它們各有適用場景和局限性。本文將從語法特性、…