基于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

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