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;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容