欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8的操作方法

 更新時(shí)間:2025年01月10日 08:56:58   作者:青春似雨后霓虹  
MySQL 基于?Binlog?的主從復(fù)制(Master-Slave Replication)是 MySQL 數(shù)據(jù)庫中實(shí)現(xiàn)數(shù)據(jù)復(fù)制的一種機(jī)制,這篇文章主要介紹了使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8,需要的朋友可以參考下

概念

MySQL 基于 Binlog 的主從復(fù)制(Master-Slave Replication)是 MySQL 數(shù)據(jù)庫中實(shí)現(xiàn)數(shù)據(jù)復(fù)制的一種機(jī)制。在這種復(fù)制模式下,主庫(Master)記錄所有對(duì)數(shù)據(jù)庫的修改操作(如 INSERT、UPDATE、DELETE 等)到 二進(jìn)制日志(Binlog),從庫(Slave)則讀取這些日志并執(zhí)行相同的操作,從而保持與主庫的數(shù)據(jù)一致性。

1. 基本概念:

  • 主庫(Master):所有的數(shù)據(jù)修改操作都在主庫上執(zhí)行,主庫會(huì)將這些修改記錄到 Binlog 中。
  • 從庫(Slave):從庫通過連接到主庫,讀取主庫的 Binlog 并將其中的操作應(yīng)用到自己的數(shù)據(jù)上,達(dá)到與主庫一致的目的。

2. Binlog(二進(jìn)制日志)

Binlog 是 MySQL 用來記錄所有修改數(shù)據(jù)庫的事件的日志文件,包括:

  • 數(shù)據(jù)修改事件:例如 INSERT、UPDATE、DELETE 等。
  • DDL 事件:例如 CREATE、ALTER 等操作。
  • 日志文件:Binlog 是一個(gè)文件序列,每個(gè)文件都有一個(gè)唯一的名稱。它是記錄所有數(shù)據(jù)庫更改的核心。

Binlog 存儲(chǔ)的是操作日志而非數(shù)據(jù)本身,因此從庫需要根據(jù)這些操作來更新自己的數(shù)據(jù)。

3. 工作流程:

基于 Binlog 的復(fù)制模式大致可以分為以下幾個(gè)步驟:

1. 主庫記錄 Binlog

  • 在主庫中執(zhí)行任何更改操作時(shí),這些操作會(huì)被記錄到主庫的 Binlog 文件中。
  • 這些操作是順序記錄的,并按時(shí)間順序排列。

2. 從庫連接主庫

  • 從庫通過連接主庫來獲取 Binlog 數(shù)據(jù)。這個(gè)連接通過 IO 線程 來實(shí)現(xiàn),從庫會(huì)定期向主庫請(qǐng)求新的 Binlog 事件。
  • 從庫會(huì)記錄主庫當(dāng)前的 Binlog 位置,并請(qǐng)求從該位置開始同步數(shù)據(jù)。

3. 從庫讀取 Binlog

  • 從庫的 IO 線程從主庫獲取到最新的 Binlog 事件,并將這些事件存儲(chǔ)到從庫的本地 Binlog 文件中。

4. 從庫執(zhí)行 Binlog 事件

  • 從庫的 SQL 線程 會(huì)讀取本地存儲(chǔ)的 Binlog,并根據(jù)日志中的操作來執(zhí)行相應(yīng)的 SQL 語句。這樣,從庫就能夠與主庫的數(shù)據(jù)保持一致。

5. 保持同步

  • 主庫和從庫通過 Binlog 的持續(xù)同步保持一致。每次主庫有新的數(shù)據(jù)更新時(shí),這些更新會(huì)通過 Binlog 被傳播到從庫。

4. 主從復(fù)制的關(guān)鍵組件:

  • Binlog(Binary Log):記錄所有更改數(shù)據(jù)的操作,主庫通過 Binlog 來傳遞更改的內(nèi)容。
  • I/O 線程:從庫的 I/O 線程負(fù)責(zé)從主庫讀取 Binlog 事件,并將其寫入到從庫的本地 Binlog 中。
  • SQL 線程:從庫的 SQL 線程負(fù)責(zé)讀取本地 Binlog,執(zhí)行其中的操作,使從庫的數(shù)據(jù)保持同步。

5. 復(fù)制模式的類型:

基于 Binlog 的主從復(fù)制可以分為不同的復(fù)制模式,主要有以下幾種:

  • 異步復(fù)制

    • 在這種模式下,主庫執(zhí)行操作后,不等待從庫確認(rèn)即返回。主庫不會(huì)等待從庫是否已經(jīng)同步完數(shù)據(jù)。
    • 優(yōu)點(diǎn):性能高,不會(huì)因?yàn)榈却龔膸齑_認(rèn)而增加延遲。
    • 缺點(diǎn):如果主庫故障,可能會(huì)丟失未同步的數(shù)據(jù)。
  • 半同步復(fù)制(Semi-Synchronous Replication)

    • 在這種模式下,主庫在執(zhí)行操作后,至少等待一個(gè)從庫確認(rèn)已接收數(shù)據(jù)并寫入本地 Binlog 后才返回。這比完全異步復(fù)制稍微安全一些,但仍然存在延遲。
    • 優(yōu)點(diǎn):比異步復(fù)制更安全,至少一個(gè)從庫能夠確認(rèn)同步。
    • 缺點(diǎn):會(huì)增加一定的延遲,可能影響性能。
  • 全同步復(fù)制(Synchronous Replication)

    • 在這種模式下,主庫在執(zhí)行操作后,必須等待所有從庫確認(rèn)數(shù)據(jù)已經(jīng)同步才會(huì)返回。
    • 優(yōu)點(diǎn):可以保證主庫和所有從庫的數(shù)據(jù)完全一致。
    • 缺點(diǎn):性能開銷大,延遲較高,且需要更多的資源。

6. 復(fù)制延遲與容錯(cuò)性:

  • 復(fù)制延遲:由于主庫和從庫是異步同步的,因此在高并發(fā)的場(chǎng)景中,從庫可能會(huì)出現(xiàn)延遲,導(dǎo)致主庫和從庫的數(shù)據(jù)不一致。這種延遲通常是由于從庫處理速度較慢,或者網(wǎng)絡(luò)問題等原因?qū)е隆?/p>

  • 容錯(cuò)性:基于 Binlog 的主從復(fù)制,主庫發(fā)生故障時(shí),需要手動(dòng)或自動(dòng)切換到從庫。雖然從庫可以保持主庫的副本,但在主庫故障時(shí)可能會(huì)丟失一定的事務(wù),因此對(duì)高可用性的需求需要結(jié)合其他技術(shù)(如 MHAProxySQL、Group Replication 等)來提高容錯(cuò)性。

7. 優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

  • 簡(jiǎn)潔性:基于 Binlog 的復(fù)制設(shè)置較為簡(jiǎn)單,容易理解和實(shí)現(xiàn)。
  • 性能:相比于 GTID 復(fù)制模式,Binlog 復(fù)制模式的性能開銷較小。
  • 兼容性強(qiáng):Binlog 復(fù)制是 MySQL 的標(biāo)準(zhǔn)復(fù)制方式,幾乎所有版本都支持。
  • 適用廣泛:適用于大多數(shù)需要主從同步的場(chǎng)景,特別是讀寫分離和負(fù)載均衡。

缺點(diǎn):

  • 故障恢復(fù)較慢:如果主庫發(fā)生故障,可能需要人工干預(yù)來恢復(fù)主從復(fù)制關(guān)系,且在切換過程中可能會(huì)丟失未同步的數(shù)據(jù)。
  • 可能出現(xiàn)數(shù)據(jù)不一致:在網(wǎng)絡(luò)延遲或復(fù)制延遲較大的情況下,主從數(shù)據(jù)可能暫時(shí)不一致。
  • 復(fù)制延遲:高負(fù)載時(shí),主從復(fù)制可能存在延遲,導(dǎo)致從庫的數(shù)據(jù)滯后于主庫。

總結(jié):

基于 Binlog 的主從復(fù)制是 MySQL 中實(shí)現(xiàn)數(shù)據(jù)復(fù)制的常見方式,它通過記錄主庫的二進(jìn)制日志,并將日志同步到從庫,從而保持?jǐn)?shù)據(jù)一致性。這種方式在大多數(shù)應(yīng)用中運(yùn)行穩(wěn)定、性能良好,但需要注意故障恢復(fù)、復(fù)制延遲等問題,適用于高可用架構(gòu)中進(jìn)行讀寫分離、負(fù)載均衡等場(chǎng)景。

binlog二進(jìn)制日志文件記錄了主服務(wù)器上所有數(shù)據(jù)庫的更改操作

實(shí)操,一個(gè)主庫兩個(gè)從庫之間進(jìn)行主從復(fù)制

參考:https://blog.csdn.net/2401_85648342/article/details/139765433

數(shù)據(jù)持久化管理-路徑規(guī)劃

.
├── docker-compose.yml
├── master1
│   ├── conf
│   ├── data
│   └── logs
├── slave1
│   ├── conf
│   ├── data
│   └── logs
└── slave2
    ├── conf
    ├── data
    └── logs

創(chuàng)建相關(guān)文件夾

# 創(chuàng)建持久化目錄
mkdir -p /opt/mysql-compose/{master1/{data,logs,conf},slave1/{data,logs,conf},slave2/{data,logs,conf}}
# 修改權(quán)限
chmod -R 777 /opt/mysql-compose/{master1/{data,logs},slave1/{data,logs},slave2/{data,logs}}
# 臨時(shí)測(cè)試-刪除持久化的數(shù)據(jù)
rm -rf /opt/mysql-compose/{master1/{data/*,logs/*},slave1/{data/*,logs/*},slave2/{data/*,logs/*}}
#rm -rf /opt/mysql-compose/{master1/data/*,slave1/data/*,slave2/data/*}

分別上傳配置文件(my.cnf)至 conf 目錄下

master1配置文件my.cnf如下

[mysqld]
# 服務(wù)器唯一id,默認(rèn)值1
server-id=11
# 設(shè)置日志格式,默認(rèn)值ROW
binlog_format=STATEMENT
# 二進(jìn)制日志名,默認(rèn)binlog
# log-bin=binlog
# 設(shè)置需要復(fù)制的數(shù)據(jù)庫,默認(rèn)復(fù)制全部數(shù)據(jù)庫
binlog-do-db=testdb
# 設(shè)置不需要復(fù)制的數(shù)據(jù)庫
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema
#binlog-ignore-db=sys
#binlog-ignore-db=performance_schema

slave1配置文件my.cnf如下

# 服務(wù)器唯一id,每臺(tái)服務(wù)器的id必須不同,如果配置其他從機(jī),注意修改id
server-id=12
# 中繼日志名,默認(rèn)xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

slave2配置文件my.cnf如下

# 服務(wù)器唯一id,每臺(tái)服務(wù)器的id必須不同,如果配置其他從機(jī),注意修改id
server-id=13
# 中繼日志名,默認(rèn)xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

docker-compose.yml內(nèi)容如下

#version: "3.5"
services:
    #mysql:
    #    image: registry.cn-shenzhen.aliyuncs.com/multiway/mysql:8.0.29
    #    container_name: mysql8
    #    ports:
    #      - "13306:3306"
    #    restart: always
    #    environment:
    #      - MYSQL_ROOT_PASSWORD=123456
    #      - TZ=Asia/Shanghai
    #    volumes:
    #      - /opt/mysql-compose/master1/conf:/etc/mysql/conf.d
    #      - /opt/mysql-compose/master1/logs:/var/log/mysql
    #      - /opt/mysql-compose/master1/data:/var/lib/mysql
    mysql_master1:
        image: registry.cn-shenzhen.aliyuncs.com/multiway/mysql:8.0.29
        container_name: mysql_master1
        ports:
          - "13306:3306"
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - TZ=Asia/Shanghai
        volumes:
          - ./master1/mysql:/etc/mysql
          - ./master1/logs:/var/log/mysql
          - ./master1/data:/var/lib/mysql
    mysql_slave1:
        image: registry.cn-shenzhen.aliyuncs.com/multiway/mysql:8.0.29
        container_name: mysql_slave1
        ports:
          - "13307:3306"
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - TZ=Asia/Shanghai
        volumes:
          - ./slave1/mysql:/etc/mysql
          - ./slave1/logs:/var/log/mysql
          - ./slave1/data:/var/lib/mysql
    mysql_slave2:
        image: registry.cn-shenzhen.aliyuncs.com/multiway/mysql:8.0.29
        container_name: mysql_slave2
        ports:
          - "13308:3306"
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - TZ=Asia/Shanghai
        volumes:
          - ./slave2/mysql:/etc/mysql
          - ./slave2/logs:/var/log/mysql
          - ./slave2/data:/var/lib/mysql

注意:/var/lib/mysql/auto.cnf文件中的server-uuid是 MySQL 數(shù)據(jù)庫服務(wù)器的唯一標(biāo)識(shí)符(UUID)。這個(gè)標(biāo)識(shí)符用于標(biāo)識(shí) MySQL 實(shí)例,尤其在復(fù)制(Replication)設(shè)置中,它可以幫助區(qū)分不同的數(shù)據(jù)庫實(shí)例。在 MySQL 中,/var/lib/mysql/auto.cnf 是一個(gè)自動(dòng)生成的配置文件,通常包含 MySQL 實(shí)例的 UUID 信息。你可以通過這個(gè)文件來查看 MySQL 服務(wù)器的 UUID。它是在 MySQL 啟動(dòng)時(shí)自動(dòng)生成的,并且通常不需要手動(dòng)修改。如果docker-compose掛載本地目錄已有掛載數(shù)據(jù)請(qǐng)檢查,如果有重復(fù)的修改server-uuid或者刪除這個(gè)auto.cnf文件之后重啟mysql服務(wù)

[auto]
server-uuid=bc8c658e-ce63-11ef-89ae-0242ac130004

運(yùn)行docker-compose命令啟動(dòng)服務(wù)

# 進(jìn)入docker-compose.yml的所在層級(jí)文件夾
cd /opt/mysql-compose
# 運(yùn)行docker compose 容器服務(wù)
docker compose up -d
#停止docker compose 容器服務(wù)
docker compose down
#查看docker compose 容器服務(wù)狀態(tài)
docker compose ps

使用數(shù)據(jù)庫管理工具連接主庫和從庫數(shù)據(jù)庫

查看主庫狀態(tài),連接master1數(shù)據(jù)庫執(zhí)行下面sql語句

SHOW MASTER STATUS;

查看結(jié)果

FilePositionBinlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set
binlog.000005157testdb

注意:如果是指定的數(shù)據(jù)庫比如testdb的話,先在主數(shù)據(jù)庫master1創(chuàng)建數(shù)據(jù)庫,并創(chuàng)建表添加數(shù)據(jù)后,導(dǎo)出腳本,然后從庫slave1和slave2也要?jiǎng)?chuàng)建數(shù)據(jù)庫testdb導(dǎo)入執(zhí)行sql腳本,使主從庫數(shù)據(jù)一致,執(zhí)行主從復(fù)制操作之前停止其他服務(wù)對(duì)主庫的讀寫操作,不然會(huì)造成數(shù)據(jù)丟失等問題;簡(jiǎn)單來說在主從復(fù)制操作開始之前保證主從數(shù)據(jù)庫數(shù)據(jù)一致

分別連接slave1和slave2數(shù)據(jù)庫執(zhí)行下面sql語句,設(shè)置或修復(fù) MySQL 的主從復(fù)制關(guān)系

#1.重置從服務(wù)器的復(fù)制設(shè)置。
#功能: 清除當(dāng)前從服務(wù)器的所有復(fù)制設(shè)置
#作用: 重置從服務(wù)器的復(fù)制狀態(tài),包括清除 MASTER_* 配置、復(fù)制相關(guān)的文件、狀態(tài)標(biāo)記等。如果之前從服務(wù)器已經(jīng)在運(yùn)行復(fù)制任務(wù),執(zhí)行這個(gè)命令會(huì)停止復(fù)制進(jìn)程并清除復(fù)制的所有狀態(tài)信息。
#使用場(chǎng)景: 這通常在配置新的復(fù)制關(guān)系,或者需要重新設(shè)置復(fù)制時(shí)使用。
RESET SLAVE;
#2.配置從服務(wù)器連接到指定的主服務(wù)器(192.168.137.2),并設(shè)置復(fù)制的起始點(diǎn)。
#功能: 設(shè)置從服務(wù)器的主服務(wù)器連接信息及復(fù)制位置。
#作用: 配置從服務(wù)器如何連接到主服務(wù)器,以及從哪個(gè)二進(jìn)制日志文件和位置開始復(fù)制。
CHANGE MASTER TO 
MASTER_HOST='192.168.137.2',   # 指定主服務(wù)器的 IP 地址或主機(jī)名,表示從服務(wù)器將連接到這個(gè)主機(jī)
MASTER_PORT=13306,             # 指定主服務(wù)器的端口號(hào),通常 MySQL 的默認(rèn)端口是 3306,根據(jù)實(shí)際情況修改
MASTER_USER='root',            # 指定主服務(wù)器上用于連接的用戶名,通常是具備復(fù)制權(quán)限的用戶
MASTER_PASSWORD='123456',      # 指定上述用戶的密碼,用于認(rèn)證連接
MASTER_LOG_FILE='binlog.000005',# 指定主服務(wù)器的二進(jìn)制日志文件名,從該文件的指定位置開始復(fù)制數(shù)據(jù)。
MASTER_LOG_POS=157; #指定從主服務(wù)器的二進(jìn)制日志文件中從哪個(gè)位置開始復(fù)制。位置是一個(gè)數(shù)字,表示從該位置開始的日志條目
#3.啟動(dòng)從服務(wù)器的復(fù)制進(jìn)程。
#功能: 啟動(dòng)從服務(wù)器的復(fù)制進(jìn)程
#作用: 在執(zhí)行完 CHANGE MASTER TO 后,啟動(dòng)從服務(wù)器的復(fù)制任務(wù),使得從服務(wù)器開始連接主服務(wù)器,并從指定的二進(jìn)制日志文件位置開始復(fù)制數(shù)據(jù)。
START SLAVE;
#4.查看從服務(wù)器的復(fù)制狀態(tài)。
#功能: 顯示從服務(wù)器的復(fù)制狀態(tài)
#作用: 查看從服務(wù)器的當(dāng)前復(fù)制狀態(tài),包括是否成功連接到主服務(wù)器,復(fù)制是否正常進(jìn)行,以及任何可能出現(xiàn)的錯(cuò)誤。
該命令會(huì)返回一個(gè)包含多個(gè)字段的結(jié)果,常用的字段有 Slave_IO_Running 和 Slave_SQL_Running,這兩者的值為yes,分別表示 I/O 線程和 SQL 線程是否正在運(yùn)行,Last_Error 顯示最后一個(gè)錯(cuò)誤信息等。
SHOW SLAVE STATUS;

到此這篇關(guān)于使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8的文章就介紹到這了,更多相關(guān)使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Dockerfile制作java運(yùn)行環(huán)境的鏡像的方法步驟

    利用Dockerfile制作java運(yùn)行環(huán)境的鏡像的方法步驟

    這篇文章主要介紹了利用Dockerfile制作java運(yùn)行環(huán)境的鏡像的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Docker可視化管理工具DockerUI的使用

    Docker可視化管理工具DockerUI的使用

    這篇文章主要介紹了Docker可視化管理工具DockerUI的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker 教程之私有倉庫詳解

    Docker 教程之私有倉庫詳解

    這篇文章主要介紹了Docker 教程之私有倉庫詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Docker SSH連接docker容器的示例代碼

    Docker SSH連接docker容器的示例代碼

    這篇文章主要介紹了Docker SSH連接docker容器的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 如何使用docker對(duì)容器資源進(jìn)行限制

    如何使用docker對(duì)容器資源進(jìn)行限制

    這篇文章主要介紹了如何使用docker對(duì)容器資源進(jìn)行限制,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • docker-compose部署coredns如何實(shí)現(xiàn)自建DNS服務(wù)

    docker-compose部署coredns如何實(shí)現(xiàn)自建DNS服務(wù)

    本文介紹了如何在內(nèi)網(wǎng)中使用自建的CoreDNS服務(wù)進(jìn)行域名解析,通過配置Corefile和hosts文件,實(shí)現(xiàn)內(nèi)部域名解析,無需在互聯(lián)網(wǎng)上注冊(cè)域名,使用docker-compose運(yùn)行CoreDNS,并通過修改resolv.conf文件配置DNS服務(wù)
    2025-01-01
  • docker-compose 詳解及示例代碼

    docker-compose 詳解及示例代碼

    這篇文章主要介紹了docker-compose 詳解的相關(guān)資料,并附簡(jiǎn)單實(shí)例,需要的朋友可以參考下
    2016-10-10
  • 騰訊云服務(wù)器docker開啟端口后無法訪問的解決方法

    騰訊云服務(wù)器docker開啟端口后無法訪問的解決方法

    本文主要介紹了騰訊云服務(wù)器docker開啟端口后無法訪問的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Docker 中的 bootfs、rootfs 簡(jiǎn)介

    Docker 中的 bootfs、rootfs 簡(jiǎn)介

    Docker中的bootfs和rootfs是容器文件系統(tǒng)的兩個(gè)層次,bootfs負(fù)責(zé)內(nèi)核啟動(dòng),而rootfs提供運(yùn)行環(huán)境,容器共享宿主機(jī)內(nèi)核,因此沒有獨(dú)立的bootfs,只使用精簡(jiǎn)的rootfs,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • docker之更新jar問題

    docker之更新jar問題

    這篇文章主要介紹了docker之更新jar問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論