一遍過Docker的Mysql主從複製搭建 Mysql8 Mysql5.7

爲什麼基於Docker搭建?

  • 資源有限
  • 虛擬機搭建對機器配置有要求,並且安裝mysql步驟繁瑣
  • 一臺機器上可以運行多個Docker容器
  • Docker容器之間相互獨立,有獨立ip,互不衝突
  • Docker使用步驟簡便,啓動容器在秒級別

利用Docker搭建主從服務器

拉取鏡像

首先拉取docker鏡像,我們這裏使用8.0.19版本的mysql(其它版本同理):
docker pull mysql:8.0.19

Dockfile自定義構建Mysql

構建Master鏡像

  1. 新增文件my.cnf
    [mysqld]
    ## 保證這個ID唯一
    server-id=1
    ## 開啓二進制日誌功
    log-bin=myslq-bin
    
    ## 基礎配置
    secure-file-priv= NULL
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    symbolic-links=0
    !includedir /etc/mysql/conf.d/
    
  2. 新建文件Dockfile
    FROM mysql:8.0.19
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    ENV LANG=C.UTF-8
    ENV MYSQL_ROOT_PASSWORD 123456
    COPY my.cnf /etc/mysql/my.cnf
    EXPOSE 3306
    
  3. 將兩個文件放在一個目錄,然後進入該目錄
    在這裏插入圖片描述
  4. 構建Master鏡像
    docker build -t  mysql/master:v1 .
    

構建Slave鏡像

  1. 新增文件my.cnf
    [mysqld]
    ## 保證這個ID唯一
    server-id=2
    ## 開啓二進制日誌功能
    log-bin=myslq-slave-bin
    ## relay_log配置中繼日誌
    relay_log=edu-mysql-relay-bin
    
    ## 基礎配置
    secure-file-priv= NULL
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    symbolic-links=0
    !includedir /etc/mysql/conf.d/
    
  2. 新建文件Dockfile
    FROM mysql:8.0.19
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    ENV LANG=C.UTF-8
    ENV MYSQL_ROOT_PASSWORD 123456
    COPY my.cnf /etc/mysql/my.cnf
    EXPOSE 3306
    
  3. 將兩個文件放在一個目錄,然後進入該目錄
    在這裏插入圖片描述
  4. 構建Slave鏡像
    docker build -t  mysql/slave:v1 .
    

啓動鏡像

  1. 查看鏡像信息
    docker images | grep mysql
    在這裏插入圖片描述
  2. 分別啓動master、slave主從節點
    • Master節點
      docker run -p 3306:3306 -d mysql/master:v1
    • Slave節點
      docker run -p 3306:3306 -d mysql/slave:v1

創建用戶並啓用主從同步

  1. 創建用戶進行主從同步的用戶

    • 進如啓動的 master 數據庫
      docker exec -it ContainerID bash
      在這裏插入圖片描述
    • 登錄mysql,密碼在Dockerfile配置文件的字段(ENV MYSQL_ROOT_PASSWORD 123456)
      mysql -uroot -p123456
    • 授予用戶 slave REPLICATION SLAVE權限和REPLICATION CLIENT權限,用於在主從庫之間同步數據
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    • 在Master數據庫創建數據同步用戶
      CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; #
  2. 配置主從同步

    • 查看Master節點的狀態信息
      show master status;
    • 進入Slave節點並登錄Mysql之後執行
      change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
  3. 命令說明:

    命令 說明
    master_port Master的端口號,指的是容器的端口號
    master_user 用於數據同步的用戶
    master_password 用於同步的用戶的密碼
    master_log_file 指定 Slave 從哪個日誌文件開始複製數據,即上文中提到的 File 字段的值
    master_log_pos 從哪個 Position 開始讀,即上文中提到的 Position 字段的值
    master_connect_retry 如果連接失敗,重試的時間間隔,單位是秒,默認是60秒
  4. 在Slave 中的mysql終端執行start slave;啓動主從同步。

  5. 在Slave 中的mysql終端執行show slave status \G;啓動主從同步。
    在這裏插入圖片描述
    SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明主從複製已經開啓。此時可以測試數據同步是否成功。

使用數據庫工具測試

Master
在這裏插入圖片描述
Slave
在這裏插入圖片描述
之後再Master節點創建數據庫或者添加數據,可以看到從數據進行同步
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章