04_MySQL 通過 Docker 在同一個服務器上搭建主從集群(一主一從)

04_MySQL 通過 Docker 在同一個服務器上搭建主從集群(一主一從)


🧰 準備工作

1. 拉取 MySQL 鏡像

docker pull mysql:8.0.26

2. 創建主從配置目錄

mkdir -p /root/mysql/master/conf
mkdir -p /root/mysql/master/data
mkdir -p /root/mysql/master/mysql-filesmkdir -p /root/mysql/slave/conf
mkdir -p /root/mysql/slave/data
mkdir -p /root/mysql/slave/mysql-files

3. 編寫 docker-compose.yml 文件

version: '3.8'services:mysql-master:image: mysql:8.0.26container_name: mysql-masterrestart: alwaysports:- "3307:3306"environment:MYSQL_ROOT_PASSWORD: 123456volumes:- /root/mysql/master/conf/:/etc/mysql/- /root/mysql/master/mysql-files:/var/lib/mysql-files- /root/mysql/master/data:/var/lib/mysqlnetworks:- mysql-netmysql-slave:image: mysql:8.0.26container_name: mysql-slaverestart: alwaysports:- "3308:3306"environment:MYSQL_ROOT_PASSWORD: 123456depends_on:- mysql-mastervolumes:- /root/mysql/slave/conf/:/etc/mysql/- /root/mysql/slave/mysql-files:/var/lib/mysql-files- /root/mysql/slave/data:/var/lib/mysqlnetworks:- mysql-netnetworks:mysql-net:driver: bridge

4. 編寫主從數據庫配置文件

4.1 主庫配置(放到 /root/mysql/master/conf/my.cnf
[mysqld]
# 唯一的server_id
server-id=1# 開啟二進制日志功能
log-bin=mysql-bin# 二進制日志緩存大小
binlog_cache_size=1M# 二進制日志過期天數
expire_logs_days=7# 二進制日志格式(mixed/statement/row)
binlog_format=STATEMENT# 忽略復制以下數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema# 只復制指定數據庫
binlog-do-db=testdb# 允許 LOAD DATA / SELECT INTO OUTFILE 操作的目錄(必須存在)
secure_file_priv=/var/lib/mysql-files
4.2 從庫配置(放到 /root/mysql/slave/conf/my.cnf
[mysqld]
# 唯一的server_id,不能和主庫相同
server-id=2# 中繼日志文件名
relay-log=relay-log# 設置只讀,防止手動寫入破壞復制
read_only=1# 允許 LOAD DATA / SELECT INTO OUTFILE 操作的目錄(必須存在)
secure_file_priv=/var/lib/mysql-files

5. 啟動容器

docker compose up -d

6. 容器內操作及權限配置

6.1 進入主庫容器及 MySQL
docker exec -it mysql-master bash
mysql -uroot -p123456
  • 查看 server_id
SHOW VARIABLES LIKE 'server_id';
  • 授權 root 用戶遠程登錄權限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

6.2 進入從庫容器及 MySQL
docker exec -it mysql-slave bash
mysql -uroot -p123456
  • 同樣授權 root 用戶遠程登錄權限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

7. 主從復制配置

7.1 主庫授權復制賬戶
docker exec -it mysql-master bash
mysql -uroot -p123456-- 創建復制用戶
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';-- 授權復制權限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;
7.2 查詢主庫狀態,記錄 FilePosition
SHOW MASTER STATUS;

示例輸出:

FilePosition
mysql-bin.000004156

7.3 在從庫配置主庫信息
docker exec -it mysql-slave bash
mysql -uroot -p123456
sql復制編輯CHANGE MASTER TO MASTER_HOST='172.17.180.75',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=156;

注意:

如果遇到錯誤,先執行:

STOP SLAVE;
RESET SLAVE;

然后重新執行 CHANGE MASTER TO 命令。


7.4 啟動從庫復制線程
復制編輯
START SLAVE;
7.5 查看從庫復制狀態
SHOW SLAVE STATUS\G;

確認 Slave_IO_RunningSlave_SQL_Running 都為 Yes


8. 連接測試

  • 使用 Navicat 或其他數據庫客戶端分別連接主庫(端口 3307)和從庫(端口 3308)測試。

9. 測試主從復制效果

  • 在主庫創建數據庫和表:
CREATE DATABASE testdb;
USE testdb;CREATE TABLE test_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)
);INSERT INTO test_table (name) VALUES ('test1'), ('test2');
  • 查看從庫是否同步了 testdb 數據庫和數據。

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

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

相關文章

隨筆 | 寫在六月的最后一天,也寫在2025年上半年的最后一天

文章目錄 前言.出差.耐心.回歸.結語. 前言 又要以最經典的句式開場,轉眼間,2025年已經過去了一半。五六月飛逝,但仔細回望,也留下了很多美好的瞬間。 記得之前讀過一句話,人們總是高估一年可以做的事情,也…

Prompt Enginering

1.Prompt Engineering 提示詞工程 Prompt 給人工智能模型輸入文本或指令,這些指令引導模型生成特定的輸出 Prompt Engineering:指在使用生成式人工智能模型(比如gpt-4)時,設計優化輸入文本(prompt)的過程,以…

CppCon 2018 學習:A Semi Compile/Run-time Map with (Nearly) Zero Overhead Looup

介紹一個 C 和 Java 之間橋接(Bridge)系統的示例代碼,它說明了如何在 C 中調用 Java 類(如 java.io.InputStream)的方法。下面是詳細解讀: 一、內容來源說明 《C ? Java Bridge》 目的:演示…

原子級制造革命:雙原子鑭催化劑登頂Angew,焦耳超快加熱技術深度解析

一、突破性成果:雙原子鑭催化劑的三大里程碑 吉林大學的牛效迪教授,王振旅教授、管景奇教授在《Angewandte Chemie》發表創新研究,通過焦耳超快加熱技術成功制備氮配位雙原子鑭催化劑(La?-NG),實現三大突…

unix:///var/run/supervisor/supervisor.sock no such file

在 Linux 系統中,如果你遇到 /var/run/supervisor/supervisor.sock 文件不存在的問題,這通常意味著 Supervisor 服務沒有正確運行或者其配置文件沒有正確設置來創建這個 socket 文件。下面是一些解決這個問題的步驟: 檢查 Supervisor 是否正…

Python 編輯器:Geany,不是內部或外部命令,系統找不到指定路徑

目錄 1 找到設置選項2 開始設置2.1 complie2.2 execute 3 歡迎糾錯4 免費爬蟲------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內…

Docker安裝Mysql、配置文件掛載、修改Mysql編碼

1.下載mysql鏡像 docker pull mysql:5.72.查看鏡像 docker images3.啟動mysql鏡像 # 1.設置端口映射3306:3306、 # 2.設置文件掛載 # 3.設置mysql密碼為“root” sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/mysql-files:/var/lib/mysql-files \ -v /mydata…

vueflow截圖功能,線會有黑色背景

vueflow截圖功能,線會有黑色背景,解決辦法,畫線時style里設置fill:‘none’ // 線的默認顏色 const edgesStyle {style: {fill:none,stroke: #6366f1,strokeWidth: 1, // 設置線寬 },markerEnd: {type: MarkerType.ArrowClosed,// color: #6366f1,// w…

16014.rtsp推流服務器

1 ubuntu20.04搭建rtsp服務器,easyplayer進行拉流 在images/stream1 文件下存儲了5張圖片,作為咱們得原料,運行rtsp服務器,即可。#include <iostream> #include <vector> #include <chrono>

常用測試腳本

Linux 系統 測試網絡帶寬及網卡吞吐量 shell 腳本 #!/bin/bash # 定義測試時間 time10 # 定義網卡名稱 niceth0 # 測試網卡的帶寬 echo 網卡帶寬&#xff1a;time dd if/dev/zero bs1M count1024 | nc -w $time localhost 9000 > /dev/null # 測試網卡的吞吐量 echo 網卡吞…

華為云 Flexus+DeepSeek 征文|華為云 Flexus 云服務 Dify-LLM 平臺深度部署指南:從基礎搭建到高可用實踐

華為云 FlexusDeepSeek 征文&#xff5c;華為云 Flexus 云服務 Dify-LLM 平臺深度部署指南&#xff1a;從基礎搭建到高可用實踐 引言&#xff1a;正文&#xff1a;一、前期準備1.1 賬號注冊與充值1.2 控制臺操作熟悉 二、一鍵部署 Dify-LLM 平臺2.1 云服務器單機部署2.1.1 訪問…

Kafka 核心機制面試題--自問自答

基礎篇 Q1: Kafka為什么能這么快&#xff1f; A: Kafka的高性能主要來自三大核心技術&#xff1a; 零拷貝(Zero-Copy)&#xff1a;通過sendfile()系統調用&#xff0c;數據直接從磁盤到網卡&#xff0c;避免了內核態和用戶態之間的多次拷貝頁緩存(Page Cache)&#xff1a;消…

Git遠程倉庫遷移與分支關聯技術分享

背景 開發中常需切換代碼托管平臺&#xff08;如Coding → 自建GitLab&#xff09;。以下通過實際命令演示如何安全遷移倉庫并解決分支關聯問題。 操作步驟及原理分析 1. 查看當前遠程倉庫 bash git remote -v 輸出說明&#xff1a; text origin https://e.coding.net…

HttpURLConnection使用及優化

文章目錄 簡介使用示例GET請求POST請求 HttpURLConnection優化1. 設置合適的超時時間2. 指定字符編碼3. 正確處理響應編碼4. 使用壓縮傳輸&#xff08;如果適用&#xff09;5. 關閉連接釋放資源6. 啟用持久連接&#xff08;Keep-Alive&#xff09;&#xff0c;減少握手開銷 簡介…

【Springai】項目實戰進度和規劃

項目概述 新開一個用于學習實踐springai的項目&#xff0c;springai-novel是一個基于前后端分離的現代化AI實踐應用 前端技術棧 Vue 3 TypeScriptVite Naive UI vicons/ionicons5 后端技術棧 JDK17Spring AI MySQL milvus ollama 已實現功能 (?) ? springaimysql后…

知微傳感Lkam系列線掃輪廓儀SDK例程篇:SDK安裝及VS工程配置

寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用3D相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 歡迎與我深入交流&#xff1a;微信號&#xff1a;liu_zhi…

機器學習4——參數估計之貝葉斯估計

貝葉斯估計 問題建模&#xff1a; 后驗概率公式&#xff1a; P ( ω i ∣ x , D ) P ( x ∣ ω i , D i ) P ( ω i ) ∑ j 1 c P ( x ∣ ω j , D j ) P ( ω j ) P\left(\omega_i \mid \mathbf{x}, \mathcal{D}\right)\frac{P\left(\mathbf{x} \mid \omega_i, \mathcal{D…

【C++】命令模式

目錄 一、模式核心概念與結構二、C 實現示例&#xff1a;遙控器與家電控制三、命令模式的關鍵特性四、應用場景五、命令模式與其他設計模式的關系六、C 標準庫中的命令模式應用七、優缺點分析八、實戰案例&#xff1a;數據庫事務命令九、實現注意事項如果這篇文章對你有所幫助&…

基于librdkafka開發的C++客戶端,生產者生產發送數據失敗問題處理

我們的項目使用了開源的librdkafka庫&#xff0c;實現向kafka服務器生產發送數據的功能。使用的librdkafka的版本是1.9.0。 作為客戶端程序&#xff0c;在開發時和客戶協商確認后&#xff0c;支持了SASL_PLAINTEXT認證。以下概念解釋引用自通義千問AI SASL (Simple Authentic…

OpenGL之yaw、pitch、fov 和 lookAt

在 3D 圖形學中&#xff0c;yaw、pitch、fov 和 lookAt 都是控制攝像機&#xff08;Camera&#xff09;行為的關鍵參數&#xff0c;但它們的 作用層級 和 使用場景 不同。 1. yaw、pitch、fov 的作用 (1) yaw&#xff08;偏航角&#xff09; 作用&#xff1a;控制攝像機 左右…