在服务器(centos)上基于docker部署MYSQL数据库集群(一主二从)

93 阅读5分钟

之前写项目搭建的主从数据库,之前一次就成功了,但最近搭建时却踩了许多坑,特地来记录一下。我对参考的帖子进行了细化说明,避免踩坑。(参考的博主和原文链接附在最下方)

Ⅰ.部署前准备

1.安装yum-utils工具

yum install -y yum-utils

2.设置docker的依赖源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装docker

yum -y install docker-ce

4.查看安装版本

docker -v

5.查看docker配套设置的版本

yum list installed | grep docker

6.拉取Mysql8的镜像

docker pull mysql:8

7.查看docker镜像

docker images

Ⅱ.开始部署MYSQL集群

1.创建主从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

2.查看是否创建配置及数据文件的存储目录

cd /usr/local/mysqlData   ##进入mysqlData目录下
ls

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

配置从服务器的配置文件

# 1号从服务器
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
# 2号从服务器
vim /usr/local/mysqlData/slave2/cnf/mysql.cnf

配置文件如下(**一定要改****server-id,**1号从数据的server-id设置为2,2号从数据的server-id设置为3,主数据库的server-id是1,只要这三个server-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

4.创建主从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 slaver -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 slaver2 -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

这个命令的作用是在后台运行一个名为"master"的MySQL容器,并将宿主机的MySQL数据和配置文件映射到容器内,同时设置root用户的密码为"123456"。

5.查看已经创建的实例

docker ps -a

6.进入master容器内(注:一定要确认进入的是master容器后在执行以下步骤,因为需要获取对应的信息)

docker exec -it master /bin/bash

进入容器命令:docker exec -it  容器名或容器ID /bin/bash 

进入容器后

7.进入容器后,登入mysql,然后创建mysql的连接用户

# 登入root用户
mysql -u root -p
# 创建用户 sqluser设置密码为123456
CREATE USER sqluser IDENTIFIED BY '123456';
# 给予sqluser用户同步权限 
GRANT REPLICATION SLAVE ON *.* to 'sqluser'@'%'; 
FLUSH PRIVILEGES; 

8.获取主服务器信息(记住箭头所指的文字,每个人的可能不一样,以自己查到的为准)

# MySQL的连接信息(这一步要在进入mysql后进行)
SHOW MASTER STATUS;

下面步骤需要退出sql,再退出容器,连续输入两次exit就退出了

#新开连接 获取master实例的在docker的地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master

9.仆从服务器(从服务器)连接主服务器

先进入从服务容器,在其中登录MYSQL(两台从服务容器皆是以下操作)

# 配置连接的参数
change master to master_host='172.17.0.3',master_user='reader',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=859;
# 启动同步
start slave;
# 查看是否成功
show slave status\G

# 两项都为Yes时代表成功。
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

# 失败需要使用停止连接后检查其他账号密码,地址,pos等参数

# 停止连接,如果一次成功无需使用该命令
stop slave;

Ⅲ.查看主从同步结果

SHOW SLAVE HOSTS;

参考文章:blog.csdn.net/qq\_3718191…

参考文章作者:blog.csdn.net/qq\_3718191…