问题描述
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则启动成功
如果有错,看这些字段进行排查: