一、前提条件
1 具有docker环境的centos7
1
2
|
yum install docker service docker start |
2 mysql镜像(版本5.5以上,本文采用8.0)
1
|
docker pull mysql:8.0 |
二、mysql集群配置文件
1 创建配置集结构如下
1
2
3
4
|
mkdir -p /home/data/mysql/data/master mkdir -p /home/data/mysql/data/slave mkdir -p /home/data/mysql/master mkdir -p /home/data/mysql/slave |
2 创建节点配置文件(master.cnf与slave.cnf)
1
2
|
cd /home/data/mysql/master vi master.cnf |
1
2
|
cd /home/data/mysql/slave vi slave.cnf |
内容如下
1
2
3
4
5
6
7
8
|
[mysqld] server- id =1 #任意自然数n,只要保证两台MySQL主机不重复就可以了。 log-bin=mysql-bin #开启二进制日志 #auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n #auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL #binlog-ignore=mysql #忽略mysql库【我一般都不写】 #binlog-ignore=information_schema #忽略information_schema库【我一般都不写】 #replicate-do-db=aa #要同步的数据库,默认所有库 |
三、搭建mysql环境
1 为mysql容器创建专有桥接网络,以便固定mysql容器ip
1
|
docker network create --driver bridge --subnet 172.25.0.0 /16 mysql_net |
备注:
创建桥接网卡 mysql_net 指定自网段为172.25.0.0 如果不指定ip则与docker容器的docker0网卡同网段
2 创建mysql容器
(1) master
1
2
3
4
5
6
7
8
9
|
docker create --privileged= true #为容器挂载目录添加权限 --name mysqlmaster #容器名为mysqlmaster - v /home/data/mysql/data/master : /var/lib/mysql #集群配置集中/data/master 挂载到容器/var/lib/mysql - v /home/data/mysql/master : /etc/mysql/conf .d #配置集中/master 中master.cnf 挂载到 /etc/mysql/conf.d中设置启动 -e MYSQL_ROOT_PASSWORD=root #设置启动密码 --net mysql_net #指定容器连接网络 --ip 172.25.0.3 #指定容器使用ip -p 3307:3306 mysql:8.0 #指定主机映射到容器端口 即 主机访问centos7 为3307 容器端口为3306 |
备注:上面#号后需要删除
(2)salve
1
2
3
4
5
6
7
8
|
docker create --privileged= true --name mysqlslave - v /home/data/mysql/data/slave : /var/lib/mysql - v /home/data/mysql/salve : /etc/mysql/conf .d -e MYSQL_ROOT_PASSWORD=root --net mysql_net --ip 172.25.0.2 -p 3308:3306 mysql:8.0 |
备注:同上
3 启动容器
1
2
|
docker start mysqlsalve docker start mysqlmaster |
查看运行状态
1
|
docker ps -a |
查看容器ip
1
|
docker network inspect mysql_net |
4 容器设置远程访问
1
|
docker exec -it mysqlmaster /bin/bash |
使用容器ip登录 并输入密码
1
|
mysql -u root -p -h 172.25.0.3 |
修改root帐号密码
1
|
ALTER USER 'root' @ '%' IDENTIFIED WITH mysql_native_password BY 'root' ; |
备注:同理进入另一个容器相同操作
5 使用navicat在主机(非centos7)登录mysql容器
备注:
容器ip为docker容器内部路由使用,虚拟机ip为外部主机入口,可以通过桥接访问到容器
四、启动mysql主从
1 进入master 赋权限 以及查询master 的日志文件 以及位置
1
2
3
|
SET sql_mode=( SELECT REPLACE (@@sql_mode, 'ONLY_FULL_GROUP_BY' , '' )); GRANT REPLICATION SLAVE ON *.* to 'root' @ '%' identified by 'root' ; --赋权限给root用户 flush privileges ; --刷新权限 |
1
|
show master status; |
2 进入slave 设置slave配置以及启动slave
1
2
3
4
5
6
7
|
change master to master_host= '172.25.0.3' , --master的ip 不能为127.0.0.1 master_user= 'root' , --master的帐号密码 master_password= 'root' , master_log_file= 'mysql-bin.000003' , --master 查询的file名 注意上面! master_port=3306, --master 端口 坑!为容器端口 不是主机端口 master_log_pos=596; --日志文件位置 注意上面! |
1
2
|
start slave; show slave status; |
备注:主从同步启动标志 若出现cennecting to master 则有错误 请自己查找
3 验证主从
主库创建任何数据,从库随即更新!