MySQL 主從複製模式太難部署,我用 Docker 五分鐘就搞定它!

2022-01-01 奇妙的Linux世界
1概述master 伺服器將數據的改變記錄二進位 binlog 日誌,當 master 上的數據發生改變時,則將其改變寫入二進位日誌中;slave 伺服器會在一定時間間隔內對 master 二進位日誌進行探測其是否發生改變,如果發生改變,則開始一個 I/O Thread 請求 master 二進位事件同時主節點為每個 I/O 線程啟動一個dump線程,用於向其發送二進位事件,並保存至從節點本地的中繼日誌中,從節點將啟動 SQL 線程從中繼日誌中讀取二進位日誌,在本地重放,使得其數據和主節點的保持一致,最後 I/O Thread 和SQL Thread 將進入睡眠狀態,等待下一次被喚醒。2創建 Master 主庫
$ docker pull mysql:8.0.26

$ mkdir -p /home/apps/mysql-master/{config,log,data}

$ docker run -d --name mysql-master \
--restart=always \
--privileged=true \
-p 3310:3306 \
-v /home/apps/mysql-master/config:/etc/mysql/conf.d \
-v /home/apps/mysql-master/log:/var/log/mysql \
-v /home/apps/mysql-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.26

$ vim /home/apps/mysql-master/config/my.cnf

點擊上方圖片,打開小程序,『餓了麼外賣』紅包免費領!

添加以下內容

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3創建 Slave 實例
# 創建目錄
$ mkdir -p /home/apps/mysql-slave-01/{config,log,data}

# 啟動容器
$ docker run -d --name mysql-slave-01 \
--restart=always \
--privileged=true \
-p 3310:3306 \
-v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d \
-v /home/apps/mysql-slave-01/log:/var/log/mysql \
-v /home/apps/mysql-slave-01/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.26

# 修改 Slave 基本配置
$ vim /home/apps/mysql-slave-01/config/my.cnf

# 添加以下內容
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

4主從配置
$ vim /home/apps/mysql-master/config/my.cnf
server_id=1

# 開啟二進位日誌
log-bin=mysql-bin
read-only=0

# 需要同步的資料庫
binlog-do-db=rapid-cloud
binlog-do-db=rapid-cloud-test

# 需要忽略的資料庫
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

$ docker restart mysql-master

$ vim /home/apps/mysql-slave-01/config/my.cnf

server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=rapid-cloud
binlog-do-db=rapid-cloud-test

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

$ docker restart mysql-slave-01

# 進入容器
$ docker exec -it mysql-master /bin/bash

# 進入主庫mysql資料庫
$ mysql -u root -p

# 授權root可以遠程訪問( 主從無關,為了方便我們遠程連接mysql)

# 授權遠程
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 刷新
mysql>flush privileges;


# 創建backup用戶

# 應先創建新用戶
mysql>create user 'backup'@'%' identified by '123456';

# 執行授權
mysql>grant all privileges on *.* to 'backup'@'%';

# 刷新
mysql>flush privileges;

# 授權遠程
mysql>ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 刷新
mysql>flush privileges;

# 查看主庫狀態
mysql>show master status;

# 進入容器
$ docker exec -it mysql-slave-01 /bin/bash

# 進入主庫mysql資料庫
$ mysql -u root -p
mysql> change master to master_host='192.168.3.13',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3310;

將主庫binlog清除一下,這樣它的位置就從0開始了
mysql>purge master logs to'mysql-bin.000001';

# 開始同步
mysql>start slave;

# 停止同步
mysql>stop slave;

# 查看同步狀態
mysql>show slave status\G;

主從資料庫在自己配置文件中聲明需要同步哪個資料庫,忽略哪個資料庫等信息。並且 server-id 不能一樣5參考https://www.cnblogs.com/heian99/p/12104189.htmlhttps://blog.csdn.net/lilygg/article/details/98187015https://www.cnblogs.com/kiko2014551511/p/11532426.html

本文轉載自:「 博客園 」,原文:https://tinyurl.com/2nsmcate ,版權歸原作者所有。歡迎投稿,投稿郵箱: editor@hi-linux.com。

相關焦點

  • 基於 Docker 搭建 MySQL 主從複製
    本篇博文相對簡單,因為是初次使用Docker,MySQL的主從複製之前也在Centos環境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。根據網上教程走還是踩了一些坑,不過所幸最終搭建成功,因此記錄下來,避免以後踩了重複的坑。
  • 【mycat系列一】基於 Docker 搭建 MySQL 主從複製的詳細教程
    目錄前言:主從複製原理一、安裝docker二、安裝mysql三、配置Master(主)四、配置Slave(從庫)五、測試主從複製前言:主從複製原理docker 中進入mysql-master 容器:docker exec -it mysql-master /bin/bash登錄mysql-master:mysql -uroot -p123456創建主從複製帳號:CREATE USER 'slave'@'%' IDENTIFIED
  • 如何用 Docker 快速搭建 MySQL 主從
    2.Docker 運行 MySQL 鏡像docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name master -v $PWD/master:/etc/mysql/conf.d -p 3310:3306 mysql:5.7運行成功後使用 docker ps mysql 查看 MySQL 實例運行狀態
  • mysql主從同步
    說起這個mysql主從同步,也有另外一種說法就是讀寫分離,相信大傢伙多少都了解一點,可能都不是很深入的了解,接下來我將帶領大家去進一步了解這個,
  • 技術分享 | MySQL 主從複製中創建複製用戶的時機探討
    背景該問題來自某客戶,據描述,他們在部署 MySQL 主從複製時,有時候僅在主庫上創建複製用戶,有時候主從實例上都會去分別創建複製用戶,發現這兩種方式都可以成功建立複製。針對這一現象,進行了一輪驗證,來觀察採用不同方式創建複製用戶對主從複製的影響。
  • MySQL基礎應用-主從複製實現
    本文描述了MySQL主從複製的兩種情形:1.新建MySQL主從複製集群。2.已經運行了一段時間的MySQL且有大量數據的時候新增從節點。網上很多文章參差不齊,本文提供了一定意義上的規範部署操作。文末提供了MySQL的一鍵部署腳本以及MySQL5.7的常用優化參數。
  • Mysql(Mariadb)資料庫主從複製
    Mysql主從複製的實現原理圖大致如下:MySQL之間數據複製的基礎是以二進位日誌文件(binary log file)來實現的,一臺MySQL資料庫一旦啟用二進位日誌後,其作為master,它資料庫中所有操作都會以「事件」的方式記錄在二進位日誌中,其他資料庫作為slave通過一個I/O線程與主伺服器保持通信,並監控
  • 【乾貨】-MySQL主從複製(Master-Slave)實踐
    如果配置了多個從伺服器或者多個主伺服器又涉及到相應的負載均衡問題,關於負載均衡具體的技術細節還沒有研究過,今天就先簡單的實現一主一從的主從複製功能。Mysql主從複製的實現原理圖大致如下(來源網絡):MySQL之間數據複製的基礎是二進位日誌文件(binary log file)。
  • 使用mysqlreplicate命令快速搭建 Mysql 主從複製
    MySQL的Replication(英文為複製)是一個多MySQL資料庫做主從同步的方案,特點是異步複製,廣泛用在各種對
  • 【Mysql源碼分析】基於行的複製實現之「主從關係建立」
    >mysql> reset slave;#啟動slavemysql> start slave;2.MYSQL中BINLOG_FORMAT的三種模式mysql三種複製方式:基於SQL語句的複製(statement-based replication, SBR),基於行的複製(row-based replication
  • 高性能Mysql主從架構的複製原理及配置詳解
    主從伺服器,這個一步就不需要。你不應該用配置文件進行該操作,而應該使用CHANGE MASTER TO語句,該語句可以完全取代對配置文件的修改,而且它可以為slave指定不同的master,而不需要停止伺服器。
  • 基於docker的mysql部署
    化,甚至一切皆可docker。 環境介紹:macOS10.14.4docker desktop 3.1.0mysql 8.0 步驟 docker環境的安裝這裡就不介紹了這裡假設你已經安裝的docker環境。
  • MySQL主從複製一致性檢驗和同步修復
    - 跳過了複製事件 (SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N)- 使用臨時表(Temporary Tables)- 複製過濾(Replication Filters)- 使用含LIMIT且沒有order by的更新語句(update/delete with LIMIT clause without order
  • MySQL5.7資料庫主從架構部署,你再也不用去問度娘了
    囉嗦的話,不多說,我們直接開始部署,我相信有點linux基礎的人都能看得懂。
  • MySQL主從同步延遲的原因及解決辦法
    (3) 用途和條件1)、mysql主從複製用途●實時災備,用於故障切換●讀寫分離,提供查詢服務●備份,避免影響業務2)、主從部署必要條件:●主庫開啟binlog日誌(設置log-bin參數)●主從server-id不同●從庫伺服器能連通主庫
  • MySQL複製技術對比與容器化探究
    半同步複製是建立在基本的主從複製基礎上,利用插件完成半同步複製,傳統的主從複製,不管從庫是否正確獲取到二進位日誌,主庫不斷更新,半同步複製則當確認了從庫把二進位日誌寫入中繼日誌才會允許提交,如果從庫遲遲不返回ack,主庫會自動將半同步複製狀態取消,進入最基本的主從複製模式。
  • Docker-compose 八步部署Django + Uwsgi + Nginx + MySQL + Redis升級篇
    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux機器上。本文將是docker-compose部署Django + Uwsgi + Nginx + MySQL + Redis教程的升級版,將完善前面教程不足的地方,很多配置文件將會有非常大的參考價值,建議先收藏再閱讀。
  • 手把手教你Docker+nginx部署Springboot+vue前後端分離項目
    其實我覺得我已經錄製得很詳細的了,可能大家水平不一,有些人覺得我很多地方講清楚,還有就是有些人按照視頻同步做實驗,還一路踩坑,這個我也預料不到哈哈。說實話,我自己做實驗的過程還是挺順利的。有些同學們提出個問題,不知道如何打包部署Vue前後端分離項目。那麼今天,我們就來學習一下,如何部署簡單快捷部署我們的vueblog項目!
  • Docker 搭建PostgreSQL主從數據流式複製
    Standby資料庫原理簡單介紹一些基礎概念與原理,首先我們做主從同步的目的就是實現db服務的高可用性,通常是一臺主資料庫提供讀寫,然後把數據同步到另一臺從庫,然後從庫不斷apply從主庫接收到的數據,從庫不提供寫服務,只提供讀服務。
  • 通過 Docker 部署 Redis 集群
    二、為什麼需要 Redis 集群高可用性: Redis 在集群模式下每個 Master 都是主從複製模式,其 Master 節點上的數據會實時同步到 Slave 節點上,當 Master 節點不可用時,其對應的 Slave 節點身份會更改為 Master 節點,保證集群的可用性。