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;
相关文章
相关标签/搜索