Docker搭建MySQL主從複製

来源:https://www.cnblogs.com/undefined22/archive/2020/04/04/12635237.html
-Advertisement-
Play Games

Docker搭建MySQL主從複製 1. 主從伺服器上分別安裝Docker 1.1 Docker 要求 CentOS 系統的內核版本高於 3.10 1.2 確保 yum 包更新到最新。 1.3 安裝需要的軟體包, yum util 提供yum config manager功能,另外兩個是device ...


Docker搭建MySQL主從複製

  1. 主從伺服器上分別安裝Docker

    1.1 Docker 要求 CentOS 系統的內核版本高於 3.10

    [root@localhost ~]# uname -r
    3.10.0-693.el7.x86_64
    

    1.2 確保 yum 包更新到最新。

    [root@localhost ~]# sudo yum update
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.cqu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.cqu.edu.cn
    base                                                                                                                                             | 3.6 kB  00:00:00     
    docker-ce-stable                                                                                                                                 | 3.5 kB  00:00:00     
    extras                                                                                                                                           | 2.9 kB  00:00:00     
    updates                                                                                                                                          | 2.9 kB  00:00:00
    

    1.3 安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

    [root@localhost ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.cqu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.cqu.edu.cn
    Package yum-utils-1.1.31-52.el7.noarch already installed and latest version
    Package device-mapper-persistent-data-0.8.5-1.el7.x86_64 already installed and latest version
    Package 7:lvm2-2.02.185-2.el7_7.2.x86_64 already installed and latest version
    Nothing to do
    

    1.4 設置yum源

    [root@localhost ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    Loaded plugins: fastestmirror, langpacks
    adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
    grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    repo saved to /etc/yum.repos.d/docker-ce.repo
    

    1.5 安裝docker

    [root@localhost ~]#  sudo yum install docker-ce
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.cqu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.cqu.edu.cn
    Package 3:docker-ce-19.03.8-3.el7.x86_64 already installed and latest version
    Nothing to do
    

    1.6 啟動docker並設置docker自動啟動

    [root@localhost ~]# sudo systemctl start docker
    [root@localhost ~]# sudo systemctl enable docker
    

    1.7 檢測docker是否安裝成功

    [root@localhost ~]# docker version
    Client: Docker Engine - Community
     Version:           19.03.8
     API version:       1.40
     Go version:        go1.12.17
     Git commit:        afacb8b
     Built:             Wed Mar 11 01:27:04 2020
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.8
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.17
      Git commit:       afacb8b
      Built:            Wed Mar 11 01:25:42 2020
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.13
      GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
     runc:
      Version:          1.0.0-rc10
      GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    
    
  2. docker更換國內阿裡倉庫,並下載安裝MySQL

    2.1 docker更換國內阿裡倉庫

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://rdwyjupq.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    2.2 安裝MySQL

    ​ 2.2.1 下載MySQL

    [root@localhost ~]# docker pull mysql
    Using default tag: latest
    latest: Pulling from library/mysql
    c499e6d256d6: Pull complete 
    22c4cdf4ea75: Pull complete 
    6ff5091a5a30: Pull complete 
    2fd3d1af9403: Pull complete 
    0d9d26127d1d: Pull complete 
    54a67d4e7579: Pull complete 
    fe989230d866: Pull complete 
    3a808704d40c: Pull complete 
    826517d07519: Pull complete 
    69cd125db928: Pull complete 
    b5c43b8c2879: Pull complete 
    1811572b5ea5: Pull complete 
    Digest: sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest
    

    ​ 2.2.2 查看MySQL鏡像

    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               latest              9228ee8bac7a        4 days ago          547MB
    

    ​ 2.2.3 創建MySQL的掛載文件目錄(日誌、數據、配置)

    [root@localhost ~]# mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
    

    ​ 2.2.4 先啟動容器(為了複製配置文件)(這種做法顯得多餘,但是Docker不是很精通的我沒想到更好的辦法,請各位大神指導)

    [root@localhost conf]# docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="123456" mysql
    05d161e69f3b2e3e4ebaa50f822934599a31e7ade330e1440a68aec9e404f7ae
    

    ​ 2.2.5 複製配置文件

    [root@localhost conf]# docker cp mysql:/etc/mysql/my.cnf /root/mysql/conf/
    

    ​ 2.2.6 停止並刪容器

    [root@localhost conf]# docker stop mysql
    mysql
    [root@localhost conf]# docker rm mysql
    mysql
    

    ​ 2.2.7 重新啟動容器(加上掛載)

    [root@localhost conf]# docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --mount type=bind,src=/root/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf --mount ty
    pe=bind,src=/root/mysql/data,dst=/var/lib/mysql --mount type=bind,src=/root/mysql/logs,dst=/logs --restart=on-failure:3 -d mysql64824c7e84ceb3513b65a375c55f2c53bc653f95b119008296122b13ff632ba1
    

    ​ 2.2.8 進入MySQL查詢現有字元集,結果都是utf8mb4

    show variables like '%char%';
    

    ​ 2.2.9 在掛載的配置文件更改字元集

    character-set-server=utf8
    
    default-character-set=utf8
    
    default-character-set=utf8
    

    ​ 2.2.10 重啟docker容器,並查看字元集已經更改,證明掛載的配置文件有效

file

  1. 搭建主從複製資料庫

    3.1 配置主Master庫

    ​ 3.1.1 進入主庫掛載配置文件my.cnf,加入以下配置並重啟docker容器

    [mysqld]
    ## 同一區域網內註意要唯一
    server-id=100  
    ## 開啟二進位日誌功能,可以隨便取(關鍵)
    log-bin=mysql-bin
    

    ​ 3.1.2 在主Master庫執行語句

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    

    ​ 為防止後面出現報錯[Authentication plugin 'caching_sha2_password' cannot be loaded],執行下麵語句

    ALTER USER 'slave'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;   #修改加密規則 
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'password';   #更新一下用戶的密碼 
    FLUSH PRIVILEGES;
    alter user 'slave'@'%' identified by '123456';
    

    最後執行語句獲取File, Position

    show master status;
    

    3.2 配置從Slave庫

    ​ 3.2.1 進入從庫掛載配置文件my.cnf,加入以下配置並重啟docker容器

    [mysqld]
    ## 設置server_id,註意要唯一
    server-id=101  
    ## 開啟二進位日誌功能,以備Slave作為其它Slave的Master時使用
    log-bin=mysql-slave-bin   
    ## relay_log配置中繼日誌
    relay_log=edu-mysql-relay-bin  
    

    ​ 3.2.2 鏈接主從庫,在從庫執行語句

    change master to master_host='192.168.47.128', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 5938, master_connect_retry=30;
    

    master_host :Master的地址

    master_port:Master的埠號,指的是容器的埠號

    master_user:用於數據同步的用戶

    master_password:用於同步的用戶的密碼

    master_log_file:指定 Slave 從哪個日誌文件開始複製數據,即上文中提到的 File 欄位的值

    master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 欄位的值

    master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,預設是60秒

    ​ 3.2.3 查看主從同步狀態

    show slave status ;
    

file

​ 正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是No,因為我們還沒有開啟主從複製過程。

  3.2.4 開啟主從複製
start slave;

重新查看主從同步狀態, 這時SlaveIORunning 和 SlaveSQLRunning 都是Yes,如果你的SlaveIORunning 和 SlaveSQLRunning 其中一個是Connecting或者No,就證明配置有錯,查看Last_IO_Error報錯的詳細信息

通過下麵命令,刪除已經配置的主從鏈接信息,重新進行配置

stop slave;
reset master;
	 3.2.5 測試主從複製,最簡單的方式是在主庫建立個新庫,這時,從庫會自動同步

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 其實將整個網頁全局變色,無非就是三種,css直接設置,添加svg濾鏡,通過js遍歷所有標簽更改顏色,於是 1、css 直接編輯樣式,然後在需要應用的地方設置class 1 .gray { 2 -webkit-filter: grayscale(100%); 3 -moz-filter: graysc ...
  • 圖解Java設計模式之職責鏈模式 學校OA系統的採購審批項目 :需求是 傳統方案解決OA系統審批,傳統的設計方案 職責鏈模式基本介紹 職責鏈模式解決OA系統採購審批 職責鏈模式在SpringMVC框架應用的源碼 職責鏈模式的註意事項和細節 學校OA系統的採購審批項目 :需求是 採購員採購教學器材1) ...
  • 中台MongoDB應用目前數據倉庫與大數據不足數據中台以打通部門或數據孤島的統一數據平臺為基礎,構建統一數據資產體系,並以API服務方式為全渠道業務 分析+應用,提供即時交付能力的企業級數據架構金融行業技術需求技術產品關係型資料庫數據倉庫大數據NOSQL與非結構數據MongoDb存儲的優勢,多模數據... ...
  • 什麼是單例模式 單例模式(Singleton Pattern)是一個比較簡單的模式,實際應用很廣泛,比如 Spring 中的Bean實例就是一個單例對象。 文章首發於作者微信公眾號【碼猿技術專欄】設計模式:單例模式,原創不易,喜歡的支持一下!!!! 定義:確保某一個類 只有一個實例,而且自行實例化並 ...
  • 本文主要介紹 Web Scraping 的基本原理,基於Python語言,大白話,面向可愛的小白(\^ \^)。 易混淆的名稱: 很多時候,大家會把,在網上獲取Data的代碼,統稱為“爬蟲”, 但實際上,所謂的“爬蟲”,並不是特別準確,因為“爬蟲”也是分種的, 常見的“爬蟲”有兩種: 1. 網路爬蟲 ...
  • SpringBoot 自定義註解 參數加密解密 HandlerMethodArgumentResolver ...
  • 本文介紹操作系統I/O工作原理,Java I/O設計,基本使用,開源項目中實現高性能I/O常見方法和實現,徹底搞懂高性能I/O之道 基礎概念 在介紹I/O原理之前,先重溫幾個基礎概念: (1) 操作系統與內核 操作系統:管理電腦硬體與軟體資源的系統軟體內核:操作系統的核心軟體,負責管理系統的進程、 ...
  • List集合特有的迭代器ListIterator是Iterator的子介面。 在迭代時,不可以通過集合對象的方法操作集合中的元素,因為會發生併發修改異常。 所以在迭代時,只能用迭代器的方法操作元素,可以Iterator方法是有限的,只能對元素進行判斷、取出、刪除操作,如果想要其他的操作,比如添加,修 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...