Mysql-Cluster-Install
Mysql 集群安装(Docker版)
为了固定IP可以单独创建一个网络
- master: 172.18.0.4
- slave: 172.18.0.5
# 创建网络
docker network create --subnet=172.18.0.0/16 dev
# 容器创建后可以使用此命令查看容器IP
docker inspect mysql-master | grep IPAddress
注意: 如果单独创建网络,其他非本网络的容器无法访问此网络
1. 主库配置(Master)
1. 初始化数据库
# 创建文件夹
mkdir -p //d/docker/mysql-master/{conf,data,logs}
# 运行容器
docker run -d \
--publish 3316:3306 \
--volume //d/docker/mysql-master/data:/var/lib/mysql \
--volume //d/docker/mysql-master/conf:/etc/mysql/conf.d \
--volume //d/docker/mysql-master/logs:/var/log/mysql \
--env MYSQL_ROOT_PASSWORD=admin \
--env MYSQL_DATABASE=test \
--env MYSQL_USER=test \
--env MYSQL_PASSWORD=test \
--net dev \
--ip 172.18.0.4 \
--restart=on-failure:3 \
--name mysql-master \
mysql:8.0
2. 配置 /etc/mysql/conf.d/mysql.cnf
在 //d/docker/mysql-master/conf 下新建文件 mysql.cnf 即可
[mysqld]
# 同一局域网内注意要唯一
server-id=100
# 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
# 生成二进制文件的名称格式
log-bin-index=mysql-bin.index
# binary log 二进制日志文件的格式,有三种(statement , row , mixed),可以根据场景选用,mysql默认采用statement,建议使用mixed
binlog_format=MIXED
# 事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存
sync_binlog=1
# 自动清除(purge)设定天数前生成的binlog日志文件
expire_logs_days=90
# 提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了
innodb_flush_log_at_trx_commit=1
# 需要同步的数据库,多个库在slave端指定
# binlog-do-db=test
# 忽略的数据库
# binlog_ignore_db=mysql
3. 创建同步用户
docker exec -it -u root mysql-master /bin/bash
mysql -u root -p
SHOW DATABASES;
USE mysql;
SELECT user, host, authentication_string, plugin FROM user;
DROP USER 'slave'@'%';
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
docker container restart mysql-master