首先需要先安装好docker,接下来就可以执行如下操作进行mysql集群的部署。
1.拉取MySQL8镜像
docker pull mysql:8
docker images #查看镜像
可以查看到刚拉取的mysql8的镜像。
2.创建主从MySQL的配置文件和数据文件的存储目录
# 创建主服务的配置目录和数据目录
mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data
# 创建1号从服务器的配置目录和数据目录
mkdir -p /usr/local/mysqlData/slave/cnf
mkdir -p /usr/local/mysqlData/slave/data
# 创建2号从服务器的配置目录和数据目录
mkdir -p /usr/local/mysqlData/slave2/cnf
mkdir -p /usr/local/mysqlData/slave2/data
3.配置主服务器的配置文件
vim /usr/local/mysqlData/master/cnf/mysql.cnf
文件配置内容如下:
[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
##设置字符编码为utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
4.配置从服务器的配置文件
# 1号从服务器
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
# 2号从服务器
vim /usr/local/mysqlData/slave2/cnf/mysql.cnf
配置文件如下(1号的server-id设置为2,2号的server-id设置为3,两个id不能重复)
[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
##设置字符编码为utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
slave_skip_errors=1062
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
5.创建主从MySQL镜像
# 主服务器实例化
docker run -itd -p 3307:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
# 1号从服务器实例化
docker run -itd -p 3308:3306 --name slave -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
# 2号从服务器实例化
docker run -itd -p 3309:3306 --name slave2 -v /usr/local/mysqlData/slave2/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
参数解释
-p 指定容器暴露的端口,宿主机(物理机)端口: docker实例端口
-p 3307:3306 把物理机的3307端口给实例的端口3306端口进行映射-v 给容器挂载存储卷,挂载到容器的某个目录
-v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d 把刚创建的配置文件夹映射成实例的/etc/mysql/conf.d
-v /usr/local/mysqlData/master/data:/var/lib/mysql 数据文件夹的映射-e 指定环境变量,容器中可以使用该环境变量
-e MYSQL_ROOT_PASSWORD=123456 设置MySQL的root账号密码为123456
6.查看已创建的容器实例
docker ps #查看正在运行的
docker ps -a 查看所有的实例
7. 接下来就可以连接是三个服务
8.获取主服务器的连接信息
# MySQL的连接信息
SHOW MASTER STATUS;
#新开连接 获取master实例的在docker的地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master
#查看从节点信息
SHOW SLAVE HOSTS;
9.从服务器连接主服务器(两台从服务器都是以下操作)
# 配置连接的参数
change master to master_host='172.17.0.2',master_user='root',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;
# 启动同步
start slave;
# 查看从节点状态是否成功
show slave status
# 两项都为Yes时代表成功。
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# 失败需要使用停止连接后检查其他账号密码,地址,pos等参数
# 停止连接,如果一次成功无需使用该命令
stop slave;
10.主服务器master执行命令,出现如下图mysql集群部署成功
SHOW SLAVE HOSTS;