基於Docker的Mysql主從數據庫配置

生產中經常需要主從數據庫,主數據庫用於寫操作,從數據庫用於讀操作,讀寫分立分擔數據庫壓力。同步原理主要用到log-bin配置,主數據庫記錄操作保存爲二進制文件,從數據庫實時讀取並更新。

基於Docker配置註冊數據庫更加方便,可以用於開發測試用,生產中也可以。

安裝Docker

官網地址:https://www.docker.com/
我這邊是mac,下載安裝包就可以了,當然Windows也一樣。
Linux服務器可以通過命令安裝,官網上看一下就知道了。

用docker-compose對服務進行編排,安裝後自帶docker-compose命令。

主數據庫(Master)配置

目錄結構

在這裏插入圖片描述


用docker-compose配置運行容器,可以將master和salve放在一個docker-compose.yml文件配置的,但我這裏將master和slave分開了,方便理解思路。

docker-compose.yml

version: '3.1'
services:
  mysql-1-master:
    image: 'mysql:5.7'
    container_name: mysql-1-master
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3312:3306
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
  • 數據存放位置/var/lib/mysql隱射到當前目錄data下,可以避免誤操作導致數據丟失。
  • 配置文件/etc/my.cnf隱射到conf/my.cnf

my.cnf

server-id=1
log-bin=mysql-bin
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

character_set_server=utf8mb4

說明:

  • server-id 主從數據庫的server-id不能一樣
  • log-bin=mysql-bin 開啓二進制記錄
  • binlog-ignore-db 配置不需要同步的數據庫
  • character_set_server=utf8mb4 將編碼設置爲utf8mb4,可以存表情等特殊字符

運行Master

docker-compose up -d

說明

  • 沒有報錯說明啓動成功,可以通過docker ps命令查看狀態
  • 如果出錯可能是數據庫端口重複,或者service name已經存在(重新命名就行)

查看容器id

docker ps

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NpmXMKVC-1585716795200)(http://note.youdao.com/yws/res/5570/329DA2A26B0A4B38B6E73D88D3A4CA26)]
這裏的583a00264b73就是下一步進入容器需要的(docker基本命令,不知道的可以去官網學一下)

進入容器並進入mysql

docker exec -it 583a00264b73 /bin/bash
mysql -uroot -p

在這裏插入圖片描述

查看master 狀態

show master status

mysql-bin 和Position記一下,後面slave需要用
在這裏插入圖片描述

從數據庫(Slave)配置

目錄結構和master一樣

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cu9jjl27-1585716795201)(http://note.youdao.com/yws/res/5534/AC1D7205324F48B49352F71230B58012)]

my.cnf

[mysqld]
server-id=2
read_only=1
  • server-id=2 要和master不一樣
  • read_only=1只讀模式

docker-compose.yml

version: '3.1'
services:
  mysql-1-slave:
    image: 'mysql:5.7'
    container_name: mysql-1-slave
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3313:3306
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
  • 注意端口號和服務名要更改一下

和master一樣,進入容器的mysql
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-m3XD9Lof-1585716795202)(http://note.youdao.com/yws/res/5598/64DDCF81D1B84D75B401FD7C338C0D54)]

配置從數據需要備份的主數據庫的信息

CHANGE MASTER TO MASTER_HOST='192.168.31.163',MASTER_PORT=3312,MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154
  • 注意ip地址和端口號,ip不能是127.0.0.1,是本機的ip地址

開啓slave

start slave

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZCtCsi99-1585716795202)(http://note.youdao.com/yws/res/5628/652BC4AAC578463E9C2C363A516E1F22)]

查看是否成功

 show slave status\G

在這裏插入圖片描述
出現兩個yes,說明同步成功啦

用Navicat等數據庫工具去測試一下,master更新數據立馬被同步到slave了。

ps:

centos中配置定時導出sql備份,詳看
https://blog.csdn.net/qq_28883885/article/details/102953140

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