Mysql主從複製集羣搭建-基於DockerCompose

Mysql主從複製集羣搭建-基於DockerCompose

軟件安裝

  1. 軟件列表
名稱 版本
Docker 1.14.0-rc2
Mysql 5.7.17
Docker compose 19.03.1
  1. 目錄結構
./
  - docker-compose.yml
  - master/
    - my.cnf
    - Dockerfile
  - slave/
    - my.cnf
    - Dockerfile
複製代碼

配置docker-compose.yml

docker-compose.ymlmysql

version: '2'
services:
  mysql-master:
    build:
      context: ./
      dockerfile: master/Dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=replicas_db"
    links:
      - mysql-slave
    ports:
      - "33065:3306"
    restart: always
    hostname: mysql-master
  mysql-slave:
    build:
      context: ./
      dockerfile: slave/Dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=replicas_db"
    ports:
      - "33066:3306"
    restart: always
    hostname: mysql-slave
複製代碼

master mysql容器配置

  1. 配置Dockerfile
FROM mysql:5.7.17
MAINTAINER harrison
ADD ./master/my.cnf /etc/mysql/my.cnf
複製代碼
  1. 配置my.cnf
[mysqld]
## 設置server_id,通常設置爲IP,注意要惟一
server_id=100  
## 複製過濾:也就是指定哪一個數據庫不用同步(mysql庫通常不一樣步)
binlog-ignore-db=mysql  
## 開啓二進制日誌功能,能夠隨便取,最好有含義(關鍵就是這裏了)
log-bin=replicas-mysql-bin  
## 爲每一個session分配的內存,在事務過程當中用來存儲二進制日誌的緩存
binlog_cache_size=1M  
## 主從複製的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed  
## 二進制日誌自動刪除/過時的天數。默認值爲0,表示不自動刪除。
expire_logs_days=7  
## 跳過主從複製中遇到的全部錯誤或指定類型的錯誤,避免slave端複製中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是由於主從數據庫數據不一致
slave_skip_errors=1062
複製代碼

slave mysql容器配置

  1. 配置Dockerfile
FROM mysql:5.7.17
MAINTAINER harrison
ADD ./slave/my.cnf /etc/mysql/my.cnf
複製代碼
  1. 配置my.cnf
[mysqld]
## 設置server_id,通常設置爲IP,注意要惟一
server_id=101  
## 複製過濾:也就是指定哪一個數據庫不用同步(mysql庫通常不一樣步)
binlog-ignore-db=mysql  
## 開啓二進制日誌功能,以備Slave做爲其它Slave的Master時使用
log-bin=replicas-mysql-slave1-bin  
## 爲每一個session 分配的內存,在事務過程當中用來存儲二進制日誌的緩存
binlog_cache_size=1M  
## 主從複製的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed  
## 二進制日誌自動刪除/過時的天數。默認值爲0,表示不自動刪除。
expire_logs_days=7  
## 跳過主從複製中遇到的全部錯誤或指定類型的錯誤,避免slave端複製中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是由於主從數據庫數據不一致
slave_skip_errors=1062  
## relay_log配置中繼日誌
relay_log=replicas-mysql-relay-bin  
## log_slave_updates表示slave將複製事件寫進本身的二進制日誌
log_slave_updates=1  
## 防止改變數據(除了特殊的線程)
read_only=1  
複製代碼

啓動容器

在當前目錄,運行 docker-compose 啓動命令。sql

docker-compose up -d
複製代碼

以下面輸出,則代表容器已經啓動成功docker

[root@localhost my-mysql]# docker-compose up -d
Building mysql-slave
Step 1/3 : FROM mysql:5.7.17
 ---> 9546ca122d3a
Step 2/3 : MAINTAINER harrison
 ---> Running in df2ad9059e34
Removing intermediate container df2ad9059e34
 ---> eb0aacfa9ec1
Step 3/3 : ADD ./slave/my.cnf /etc/mysql/my.cnf
 ---> c6b14fcc1fcd
Successfully built c6b14fcc1fcd
Successfully tagged mymysql_mysql-slave:latest
WARNING: Image for service mysql-slave was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building mysql-master
Step 1/3 : FROM mysql:5.7.17
 ---> 9546ca122d3a
Step 2/3 : MAINTAINER harrison
 ---> Using cache
 ---> eb0aacfa9ec1
Step 3/3 : ADD ./master/my.cnf /etc/mysql/my.cnf
 ---> 193dc5745984
Successfully built 193dc5745984
Successfully tagged mymysql_mysql-master:latest
WARNING: Image for service mysql-master was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating mymysql_mysql-slave_1 ... 
Creating mymysql_mysql-slave_1 ... done
Creating mymysql_mysql-master_1 ... 
Creating mymysql_mysql-master_1 ... done
複製代碼

使用數據庫管理工具,能夠看到,單獨鏈接master,slave數據庫都是能鏈接成功。數據庫

沒有成功的請假差配置文件是否輸入正確,這一步成功才能記錄後續操做。緩存

從數據庫配置

走到這一步去,代表主從數據庫的安裝已是成功了,接下來把slave數據庫關聯上master,就能讓咱們的mysql主從集羣搭建成功。 那要怎麼關聯上master呢?就是在從數據配置主數據庫binary-log的文件名稱和數據同步位置bash

  1. 首先在主數據庫查詢主庫的狀態session

    show master status;工具

    能夠看到直接結果爲:測試

    File: replicas-mysql-bin.000003ui

    Position: 154

  2. 從數據庫 上運行 主數據庫 的相關配置 sql 進行主從關聯

CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='replicas-mysql-bin.000003', -- File文件名
MASTER_LOG_POS=154; -- binlog記錄位置
複製代碼
  1. 從新啓動 slave 服務
docker restart 從數據庫容器名/容器id
複製代碼

測試

主數據庫 中建立一張測試數據表test

sql 以下:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
複製代碼

而後在從數據刷新,看是否有test已經從主數據庫同步過來了。看到了則代表咱們基於docker composemysql主從集羣已經搭建成功!

相關文章
相關標籤/搜索