MySQL 主備環境搭建 docker

MySQL 主備環境搭建 docker

拉取docker鏡像

sudo docker pull mysql:8.0

啟動容器

docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

配置 Master(主)

修改my.cnf,8.0版本默認路徑是/etc/my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin

連接master mysql,創建主備用戶,授予用戶 slave REPLICATION SLAVE 權限和 REPLICATION CLIENT 權限,用于在主從庫之間同步數據。

CREATE USER 'zzy'@'%' IDENTIFIED WITH mysql_native_password BY 'zzy';
GRANT REPLICATION SLAVE ON *.* TO 'zzy'@'%'
GRANT REPLICATION CLIENT ON *.* TO 'zzy'@'%';

配置Slave(從)

[mysqld]
server-id=2
log-bin=mysql-bin
log-bin=mysql-slave-bin 
## relay_log配置中繼日志
relay_log=mysql-relay-bin

重啟兩個容器

docker restart <container-id>

鏈接 Master (主) 和 Slave (從)

在 Master 進入 mysql,執行 show master status;

記錄File 和 Position 字段的值

在 Slave 中進入 mysql,執行

CHANGE MASTER TO master_host = '172.17.0.2',
master_user = 'zzy',
master_password = 'zzy',
master_port = 3306,
master_log_file = 'mysql-bin.000001',
master_log_pos = 617,
master_connect_retry = 30;
master auto_position=1;CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_USER='zzy',MASTER_PASSWORD='zzy',MASTER_PORT=3306,MASTER_AUTO_POSITION=1,MASTER_CONNECT_RETRY=30;

master_auto position=1;是使用GTID(全局事務 ID)來方便進行主備切換

在主庫和從庫的 my.cnf 配置文件中添加以下內容:
# 在主庫的 my.cnf 中
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin=mysql-bin
binlog_format=ROW
server-id=1# 在從庫的 my.cnf 中
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin=mysql-bin
binlog_format=ROW
server-id=2

master_port:Master 的端口號,指的是容器的端口號。可以使用docker inspect 來查看ip地址

[zcy@gp-master ~]$ docker inspect mysql-slave | grep IPAddress"SecondaryIPAddresses": null,"IPAddress": "172.17.0.3","IPAddress": "172.17.0.3",

master_user:用于數據同步的用戶
master_password:用于同步的用戶的密碼
master_log_file:指定 Slave 從哪個日志文件開始復制數據,即上文中提到的 File 字段的值
master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認是 60 秒

然后輸入來查看主備復制狀態

show slave status \G;

正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是 No,因為我們還沒有開啟主從復制過程。使用 start slave 開啟主從復制過程,然后再次查詢主從同步狀態 show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是 Yes,說明主從復制已經開啟。此時可以測試數據同步是否成功。

錯誤處理

使用 start slave 開啟主從復制過程后,如果 SlaveIORunning 一直是 Connecting,則說明主從復制一直處于連接狀態,這種情況一般是下面幾種原因造成的,我們可以根據 Last_IO_Error 提示予以排除。

  • 網絡不通:檢查 ip, 端口
  • 密碼不對:檢查是否創建用于同步的用戶和用戶密碼是否正確
  • pos 不對: 檢查 Master 的 Position

如果配置的時候參數填錯了,可能導致docker 容器一直無法正常啟動,無法修改參數,可以通過下面的指令pull和push文件來完成修改:

sudo docker cp mysql-slave:/etc/my.cnf ./my.cnfsudo docker cp ./my.cnf mysql-slave:/etc/my.cnf

測試主從復制

Untitled

查看從庫是否有對應的庫:

Untitled

完整的主備流程圖

Untitled

可以看到:主庫接收到客戶端的更新請求后,執行內部事務的更新邏輯,同時寫入 binlog。

備庫 B 跟主庫 A 之間維持了一個長連接。主庫 A 內部有一個線程,專門用于服務備庫 B 的這個長連接。

一個事務日志同步的完整過程是這樣的:

  1. 在備庫 B 上通過 change master 命令,設置主庫 A 的 IP、端口、用戶名、密碼、以及要從哪個位置開始請求 binlog,這個位置包含文件名和日志偏移量。
  2. 在備庫 B 上執行 start slave 命令,這時侯備庫會啟動兩個線程,io_thread 和 sql_thread。其中, io_thread 負責與主庫建立連接。
  3. 主庫 A 校驗完用戶名、密碼后,開始按照備庫 B 傳過來的位置,從本地讀取 binlog,發給 B。
  4. 備庫 B 拿到 binlog 后,寫到本地文件,稱為中轉日志(relay log)。
  5. sql_thread 讀取中轉日志,解析日志里的命令,并執行。

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

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

相關文章

第四十二天 | 背包問題理論

二維&#xff1a; 1.dp[i][j] 表示從下標為[0-i]的物品里任意取&#xff0c;放進容量為j的背包&#xff0c;價值總和最大是多少。 2.遞歸公式&#xff1a; dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]); 3.初始化&#xff1a; 首先從dp[i][j]的定義出發…

基于xilinx fpga RFSOC系列的Ultrascale+ RF Data Converter ip詳解說明

目錄 1 概述2 IP功能2.1 ADC性能2.2 DAC性能3 IP端口4 代碼框架4.1 ADC功能框圖4.2 DAC功能框圖5 收發數據時序5.1 ADC數據格式5.2 DAC數據格式6 時鐘配置6.1 ADC/DAC參考時鐘7 數據格式配置模式7.1 ADC的配置模式7.1.1 Real -> real;7.1.2 Real ->IQ;7.1.3 IQ -> IQ;…

【設計模式】JAVA Design Patterns——Bridge(橋接模式)

&#x1f50d;目的 將抽象與其實現分離&#xff0c;以便二者可以獨立變化。 &#x1f50d;解釋 真實世界例子 考慮一下你擁有一種具有不同附魔的武器&#xff0c;并且應該允許將具有不同附魔的不同武器混合使用。 你會怎么做&#xff1f; 為每個附魔創建每種武器的多個副本&…

當代人工智能三教父——深度學習三巨頭

文章目錄 引言 人物介紹 突出貢獻 專業名詞解釋 引言 今天下午閑來無事翻閱了一下csdn首頁的頭條文章——《27 歲天才創始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采訪》 感覺挺有意思&#xff0c;就從頭到尾的看了一遍&#xff0c;里面有很多…

pyqt5與yolov5進行視頻檢測(一)——登錄操作

項目效果展示 一、登錄界面 二、主界面 目前在更新中。。。 一、設計 二、登錄代碼 注意&#xff1a;下面會導入主界面的包&#xff0c;圖片資源自己設計一下&#xff0c;密碼保存時沒設計加密&#xff0c;需要自行設計 main_window主界面下文會設計from main_window impor…

無線通信的穿墻能力主要取決于哪些指標

無線通信的穿墻能力是指無線信號在穿越建筑物墻壁時&#xff0c;其信號衰減程度以及能否維持足夠強度以進行穩定通信的能力。穿墻能力的好壞直接影響到無線通信在室內環境中的覆蓋范圍和使用體驗。 一、無線信號的頻率 無線信號的頻率是影響穿墻能力的重要因素之一。一般來說…

工行音視頻服務平臺建設與應用經驗

近些年來&#xff0c;伴隨著技術能力的積累突破&#xff0c;音視頻服務開始蓬勃生長走進千家萬戶&#xff0c;使用遠程視頻通話、觀看各類視頻直播逐漸成為人們的日常&#xff0c;而金融服務作為社會生活的重要組成部分&#xff0c;自然需要積極擁抱應用新技術。 如今&#xff…

怎么知道Python包的依賴項

要查看Python包的依賴項,有幾種方法可以做到這一點: 使用pip: pip是Python的包管理器,它允許你安裝和管理Python庫。要查看一個包的依賴關系,你可以使用pip show命令加上包名,但請注意,直接用pip show并不直接列出依賴項,它提供包的詳細信息,包括它的安裝路徑。為了查看…

Kubernetes Deployment 之擴縮容與滾動更新

Kubernetes Deployment 之擴縮容與滾動更新 Deployment 擴縮容 擴縮容非常簡單&#xff0c;我們可以直接調整 replica 副本數目&#xff0c;然后 kubectl apply指定進行動態更新。下面將nginx-deployment動態改為 1 個 Pod 和 3 個 Pod 的操作 apiVersion: apps/v1 kind: De…

20232820 2023-2024-2 《網絡攻防實踐》實踐十一報告

20232820 2023-2024-2 《網絡攻防實踐》實踐十一報告 1.實踐內容 web瀏覽器滲透攻擊 任務&#xff1a;使用攻擊機和Windows靶機進行瀏覽器滲透攻擊實驗&#xff0c;體驗網頁木馬構造及實施瀏覽器攻擊的實際過程 取證分析實踐—網頁木馬攻擊場景分析 攻防對抗實踐—web瀏覽…

非關系型數據庫NOSQL

文章目錄 1. NOSQL 概述2. 相關理論基礎2.1 一致性2.2 分區2.3 存儲分布2.4 查詢模型 3. NOSQL 數據庫的種類3.1 文檔存儲3.2 鍵值存儲3.3 列存儲3.3 圖存儲 4. NOSQL 應用案例和新技術4.1 HBase 數據庫4.2 云數據庫 GeminiDB 非關系型的數據庫 NOSQL (Not Only SQL)是對不同于…

linux-x86_64-musl 里面的musl是什么意思?

在一些開源庫里面可以看到&#xff0c;linux-x86_64-musl類似于這樣的字符串&#xff0c;這個musl是什么意思呢&#xff1f; 在字符串 "linux-x86_64-musl" 中&#xff0c;musl 指的是 musl libc&#xff0c;這是一個輕量級的 C 標準庫實現。 讓我們來拆解一下這個字…

Linux系統(ubuntu)掛載jffs2文件系統

一. 掛載操作 1、加載mtdram模塊&#xff1a; sudo modprobe mtdram total_size16384//total_size后面跟的參數單位是KB&#xff0c;并且其大小要大于jffs2鏡像文件的大小 2、sudo modprobe mtd 3、sudo modprobe mtdblock 4、sudo modprobe jffs2 5、拷貝jffs2鏡像文件到/dev…

Unity性能優化工具介紹

文章目錄 一.Stats組件1.Audio音頻的數據組件:2.圖形數據 二.Profiler 性能分析器 一.Stats組件 Unity自帶Statistics(統計數據),Game視窗中點擊Stats打開 1.Audio音頻的數據組件: 1):Level 聲音強度 單位是分貝(dB) 表示音頻聽聲音的大小,是閃爍波動的. 2):SDPload 數據信…

閱讀筆記——《AFLNeTrans:狀態間關系感知的網絡協議模糊測試》

【參考文獻】洪玄泉,賈鵬,劉嘉勇.AFLNeTrans&#xff1a;狀態間關系感知的網絡協議模糊測試[J].信息網絡安全,2024,24(01):121-132.【注】本文僅為作者個人學習筆記&#xff0c;如有冒犯&#xff0c;請聯系作者刪除。 目錄 摘要 1、引言 2、背景及動機 2.1、網絡協議實現程…

每日AIGC最新進展(9):定制化多主題文本到視頻的生成、3D動漫角色生成、具有多種幾何形狀和紋理細節的3D高斯引導服裝合成

Diffusion Models專欄文章匯總:入門與實戰 DisenStudio: Customized Multi-subject Text-to-Video Generation with Disentangled Spatial Control 本文提出了一個名為DisenStudio的框架,用于定制化多主題文本到視頻的生成。該框架旨在解決現有文本到視頻生成模型在處理多主題…

UE5文件操作

首先在虛幻引擎中創建UMyBlueprintFunctionLibrary類&#xff0c;可以在該類中寫我們重復利用的功能&#xff0c;并且這些功能不依賴于特定的游戲對象&#xff0c;方便全局調用。 1.文件的讀取和寫入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…

C++小病毒

C小病毒&#xff08;注&#xff1a;對電腦無過大傷害&#xff09; 短短行&#xff0c;創造奇跡&#xff01; 把這個文件命名為virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…

Unity射擊游戲開發教程:(24)創造不同的敵人

在這篇文章中,我們將討論添加一個可以承受多次攻擊的新敵人和一些動畫來使事情變得栩栩如生。敵人沒有任何移動或射擊行為。這將有助于增強未來敵人的力量。 我們將聲明一個 int 來存儲敵人可以承受的攻擊數量,并將其設置為 3。

PDF24 Creator v11.12.1軟件安裝教程(附軟件下載地址)

軟件簡介&#xff1a; 軟件【下載地址】獲取方式見文末。注&#xff1a;推薦使用&#xff0c;更貼合此安裝方法&#xff01; PDF24 Creator v11.12.1是一款免費、簡便實用的多功能 PDF 工具。用戶可通過直觀拖放界面輕松組合、編輯和處理PDF文件。功能包括合并、分割、添加、…