通过docker部署mysql集群方法

因为单位的新项目需要用到mysql集群,采用一主一从的方式,突发奇想使用chatgpt来解决这个问题。

1.搭建docker环境

我是使用虚拟机来测试的,先用vm创建两个centos7.6的虚拟机,然后安装docker。我使用的是docker18.03版本的,因为习惯使用rancher1,20版本的不支持,所以用的这个版本,具体怎么安装dockerce就不说了,网上一搜一大堆

2.创建主节点服务器

1.创建mysql的挂载目录

#创建挂载目录
mkdir -p /data/mysql/{data,conf,logs,mysql-files}

2.创建my.cnf配置文件并且放在上面创建的conf文件夹内,需要配置主节点的server-id和同步方式,我采用订阅主节点binlog的方式进行同步

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
#init_connect=‘SET collation_connection = utf8_unicode_ci’
#init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

group_concat_max_len = 10240
# 最大睡眠时间
wait_timeout=300
# 超时时间设置
interactive_timeout = 500


#配置主节点的server-id和同步方式
log-bin=mysql-bin
server-id=1

3.创建mysql主节点容器

docker run -d --name mysql-master --restart always -e TZ=Asia/Shanghai -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/mysql-files:/var/lib/mysql-files -v /data/mysql/conf:/etc/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

-d  后台启动

--name 指定容器的名字

--restart always 容器会自动启动

-e TZ=Asia/Shanghai  指定容器的时区

-v 容器挂载的目录,关键是上一步的my.cnf挂载的文件路径

-p 端口映射  主机端口:容器端口

-e MYSQL_ROOT_PASSWORD=123456 创建的数据库的root用户的密码

4.配置主节点,需要先进入创建的容器中

docker exec -it mysql-master /bin/bash

创建从节点的用户slave,并且赋予权限

mysql -uroot -p123456 -e "CREATE USER 'slave'@'%' IDENTIFIED BY '123456';GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;"

5.查看主节点的 binlog 文件名称和偏移量

mysql -uroot -p123456 -e "SHOW MASTER STATUS;"

执行后会出现binlog的信息,就像下面这样,复制下file和postion的值,后面会用到

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      354 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

3.配置从节点

1.跟之前创建主节点一样,先创建挂载的文件夹,然后创建my.cnf,需要注意的是要把server-id改掉,不能跟主节点和其他从节点重复

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
#init_connect=‘SET collation_connection = utf8_unicode_ci’
#init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

group_concat_max_len = 10240
# 最大睡眠时间
wait_timeout=300
# 超时时间设置
interactive_timeout = 500


#如果从节点需要只读的话就配置read-only,server-id不能跟主节点及其他从节点重复
read-only=1
server-id=2

2.启动从节点容器,容器名字使用mysql-slave,主从数据库的版本一定要一样,如果不一样的话可能会出现binlog读取错误的问题

docker run -d --name mysql-slave --restart always  -e TZ=Asia/Shanghai -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/mysql-files:/var/lib/mysql-files -v /data/mysql/conf:/etc/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

3.配置 MySQL 从节点

进入 MySQL 从节点容器

docker exec -it mysql-salve /bin/bash

然后进入容器的mysql

mysql -uroot -p123455

使用以下命令连接到 MySQL 主节点,并配置主从复制:

CHANGE MASTER TO MASTER_HOST='192.168.3.232',MASTER_PORT=3306,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=354;START SLAVE;

这里

MASTER_HOST:使用主节点的host,记得关闭防火墙或者开放端口
MASTER_LOG_FILE:之前从主节点获取的binlog的文件名
MASTER_LOG_POS:之前从主节点获取的POSTION
START SLAVE:开启主从模式

4.查看主从连接的状态

进入从服务器的mysql,执行下面命令

SHOW SLAVE STATUS;

这里我使用的是navicat连接到从节点执行的

主要是看SALVE_IO_STATE,SLAVE_IO_RUNNING,SLAVE_SQL_RUNNING,

Slave_IO_State:从节点 IO 线程当前的状态,通常为 “Waiting for master to send event”。

Slave_IO_Running:从节点 IO 线程是否正在运行,如果为 “Yes”,则说明 IO 线程已经成功连接到主节点并接收到了复制数据。

Slave_SQL_Running:从节点 SQL 线程是否正在运行,如果为 “Yes”,则说明 SQL 线程已经成功执行了复制数据,并将数据更新到了从节点的数据库中。

如果以上状态均为正常,说明主从复制已经成功配置,并且从节点已经开始复制主节点的数据。

需要注意的是,如果从节点上的主从复制状态一直为 “Connecting to master...” 或者 “Reading event from the relay log...”,则说明从节点还未成功连接到主节点或者还未收到主节点的复制数据。此时需要检查主从节点的网络连通性和配置是否正确,以及从节点的防火墙是否允许从主节点接收数据。

4.测试主从复制功能

如果之前都成功了,就可以测试主从复制的功能了,先分别在两个数据库中分别创建库和表,然后在主节点更新数据,观察一下从节点数据是否更新成功,如果失败了可以试一下重启从节点设置

stop slave;

start slave;

 好了,文章到此结束,chatgpt还是挺好用的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值