这里我设置的是一主二从,3306为主。
一、创建存储文件夹
[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir -p software/mysql/3306/conf software/mysql/3306/data software/mysql/3310/conf software/mysql/3310/data software/mysql/3311/conf software/mysql/3311/data
[root@localhost local]# cd software/
[root@localhost software]# tree
.
└── mysql
├── 3306
│ ├── conf
│ └── data
├── 3310
│ ├── conf
│ └── data
└── 3311
├── conf
└── data
三、修改mysql配置文件
新建一个测试容器,从容器中拷贝原始配置文件my.cnf。
1.新建docker容器
docker run -it --name mytest -e MYSQL_ROOT_PASSWORD=123 -d mysql
2.切换到目标目录,拷贝my.cnf文件。
docker cp 容器名称: 容器内文件地址 拷贝到目标地址(./ ---当前目录位置)。
[root@localhost ~]# cd /usr/local/softwares/mysql/3306/conf
[root@localhost conf]# docker cp mytest:/etc/mysql/my.cnf ./
3.删除测试容器。
[root@localhost conf]# docker stop mytest
mytest
[root@localhost conf]# docker rm mytest
mytest
四、搭建主(master)服务器(docker容器)
[root@localhost 3306]# docker run \
-it \
--name mysql_3306 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.2 \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
1.客户端测试:
2.防火墙开启指定窗口。
firewall-cmd --add-ports=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
3.master服务器配置:my.cnf。
[root@localhost 3306]# cd conf
[root@localhost conf]# vim my.cnf
:wq保存退出。
4.查看master状态。
[root@localhost conf]# docker exec -it mysql_3306 bash
root@6265f33a5ab3:/# mysql -uroot -p123
五、创建从(slave)服务器
1.同三-2
创建文件夹,拷贝my.cnf文件。
2.修改3310内的配置文件。
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password
# Custom config should go here
!includedir /etc/mysql/conf.d/
server-id=201
log-bin=wnhz-slave-01-bin
relay_log=wnhz-mysql-relay-bin
read-only=1
3.创建slave容器
docker run \
-it \
--name mysql_3310 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.3 \
-p 3310:3306 \
-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3310/data:/var/lib/mysql \
-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
六、master创建用户slave进行主从关联
1.开放防火墙端口(以3310为例)。
[root@localhost conf]# firewall-cmd --zone=public --add-port=3310/tcp --permanent
success
[root@localhost conf]# firewall-cmd --reload
success
[root@localhost conf]# firewall-cmd --zone=public --list-ports
3306/tcp 3310/tcp
2.创建与从(slave)服务通信的用户。
3.获取master容器ip地址。
IPAddress为docker容器内ip地址。
4.进入从(slave)容器中,输入命令 change master to 参数,注意对应关系。
change master to master_host='172.18.12.2', master_user='slave',master_password='123',MASTER_LOG_FILE='wnhz-master-logbin.000001',MASTER_LOG_POS=156;
5.开启slave。
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
6.查询slave状态。
mysql> show slave status \G;
主从配置成功。
七、创建从的只读账号。
create user 'sd'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT SELECT ON *.* TO 'sd'@'%';
flush privileges;