基于docker+mysql5.7的主从数据库 读写分离配置方法

179 阅读2分钟

问题描述

go项目中需要配置主从数据库实现读写分离,并且采用的是基于docker的mysql环境

具体步骤

准备挂载文件

分别创建主从mysql相关文件夹,文件结构如图,包括了my.cnf(配置文件):

在my.cnf中写入内容如下:

master下的my.cnf:

[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
binlog-ignore-db=mysql
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小

slave下的my.cnf:

[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
  • server_id 作为唯一标识,需要不同
  • log-bin: 日志文件名称
  • read-only = 1: 代表只读不写
  • binlog-ignore-db=mysql: 操作日志中不记录"mysql"数据库
  • replicate-ignore-db=mysql: 代表同步时忽略"mysql"数据库

准备容器

master-mysql容器信息:

docker run -d -p 3307:3306 -v D:\Environment\docker\mysql5.7\mysql\master\conf:/etc/mysql/conf.d -v D:\Environment\docker\mysql5.7\mysql\master\logs:/logs -v D:\Environment\docker\mysql5.7\mysql\master\data:/var/lib/mysql --name mysql-Master -e MYSQL_ROOT_PASSWORD=root mysql:5.7

slave-mysql容器信息:

docker run -d -p 3308:3306 -v D:\Environment\docker\mysql5.7\mysql\slave\conf:/etc/mysql/conf.d -v D:\Environment\docker\mysql5.7\mysql\slave\logs:/logs -v D:\Environment\docker\mysql5.7\mysql\slave\data:/var/lib/mysql --name mysql-Slave -e MYSQL_ROOT_PASSWORD=root mysql:5.7

查看各容器ip地址

通过docker ps、docker inspect <容器id>查看ip地址并记录下来

记录:

主机ip:172.17.0.2

从机ip:172.17.0.3

主数据库容器中操作

创建一个账户,并赋予其权限,使从数据库能通过该账户连接进来

CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

再通过show master status;查看主数据库同步相关信息

记下File:mysql-bin.000003以及Position:154

从数据库容器中操作

change master to master_host='172.17.0.3',master_user='slave',master_password='root',master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=154, master_connect_retry=60;
flush privileges;
start slave;

查看是否启动成功

show slave status\G;

此两字段为yes则启动成功

如果有错,看这些字段进行排查: