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 statusG
# 这两个配置为: Yes, 表示配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
9. 远程访问权限
use mysql;
grant all on *.* to 'root'@'%' with grant option;
flush privileges;