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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...