Docker搭建MySQL8主从环境

1. 拉取mysql镜像

# 没加版本号默认最新版 latest
docker pull mysql

2. 创建挂载目录

mkdir /home/docker/mysql/write
mkdir /home/docker/mysql/read

# 目录权限设置
chmod 0777 /home/docker/mysql/write
chmod 0777 /home/docker/mysql/read

# write 新增mysql.cnf文件
[mysqld]
# 唯一id
server-id = 1
# 开启logbin
log-bin = mysql-bin
# 默认端口
port = 3307

# read 新增mysql.cnf文件
[mysqld]
# 唯一id
server-id = 2
# 开启logbin
log-bin = mysql-bin
# 默认端口
port = 3308

3. 创建容器

# docker run -d -v 宿主机挂载目录:容器文件目录 --name 容器名称 -p 宿主机端口:映射镜像端口 -e 参数=值 镜像名称
# 三种模式均可,这里是创建读跟写两个数据库

# 默认网络连接模式
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root mysql

# 指定网卡、IP运行
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.2 mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.3 mysql

# 使用host模式运行(宿主机网段为172开头时建议使用该模式,可以避免因宿主机与docker默认网段相同导致的无法访问容器的问题)
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql

4. 进入容器,登录MySQL

# docker exec -it 容器名称 bash

# 分别登陆读、写库
docker exec -it write_mysql bash
docker exec -it read_mysql bash

mysql -uroot -proot

5. 更改账户加密方式

# 'localhost'为本地, ‘%’ 为外部
# 将加密方式设置为 ‘mysql_native_password’ 可以防止外部登陆时报 'sha2xxxx' 错误
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;

6. 查看主机状态

show master status;

# 注:需记录主机File与Positon

7. 从机配置

# 如果有启动从机则需要先停止
# stop slave;

# 修改主机信息
change master to master_host='主机IP',master_port=主机端口,master_user='账户',master_password='密码',master_log_file='主机File',master_log_pos=主机Positon;

8. 启动从机

# 启动
start slave;

# 查看状态
show slave status\G

# 这两个配置为: Yes, 表示配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

9. 远程访问权限

use mysql;
grant all on *.* to 'root'@'%' with grant option;
flush privileges;

猜你喜欢

转载自blog.csdn.net/CJG753951/article/details/108270677