查看mysql端口号_手把手教你【如何在阿里云服务器上用docker部署Mysql的主从服务】...

注意⚠️:请大家不要在生产中使用该方案过

SpringCloud(十二)阿里云上使用Docker部署eurake集群,

今天肝了6h,就为了给大家写这个教程,一台ecs服务器里,去部署mysql主从,可以用来玩mysql的主从同步,读写分离。

背景:默认读者具备基础的docker,mysql,linux 操作能力。

概念区分:

我们当前所在的服务器叫宿主服务器,我们要利用 docker安装两个 mysql容器,一个做主服务器,一个做从服务器。环境介绍:服务器操作系统采用的是bedian 9.9 版本。

配置docker环境
https://www.runoob.com/docker/debian-docker-install.html
2.拉取mysql 镜像

搜索docker 镜像

docker search mysql

2d083ee592cf1b765bbff6314839c405.png

docker search mysql 实际上是去https://hub.docker.com/ 搜索的,

如果直接用命令直接拉取搜索的镜像名称,如docker pull mysql,则下载的是最新版的。

如果要安装指定版本,则拉取时就需要指定版本,先到https://hub.docker.com/ ,搜索mysql,查看所有发布的版本。 

0dbb7d22286641fb0b038dd0a6db42a3.png

32e604d21c11b75136b5ff3a3b1bf22c.png

我这里选择5.7版本的,拉取命令就是:

docker pull mysql:5.7

mysql 镜像下载完成后,可以查看一下

docker images
安装mysql

https://hub.docker.com/_/mysql 官网有介绍具体安装方法 

9c70b113689d39f2c9125f8d427b0fc1.png

我这里选择上面的两种分别介绍一下:

------------------------方法介绍begin---------------------------

1.挂载自定义配置的方式,这种的好处是,我们可以直接在宿主机配置mysql

使用自定义MySQL配置文件启动mysql
默认情况下,MySQL的启动配置文件是/etc/mysql/my.cnf,而/etc/mysql/conf.d目录下的存在任何.cnf格式的文件时,都会使用该文件中配置项替换默认配置。
因此,如果要使用自定义配置,可以在宿主机创建一个配置文件,然后在创建容器时通过-v参数,以数据卷的方式将自定义配置挂载到mysql容器的/etc/mysql/conf.d目录下。
如,在宿主机中存在/my/mysql/conf/config-file.cnf配置文件,这时就可以通过以下方式启动MySQL容器:
举例:
docker run --name mysql5.7 -p 3306:3306 -v /my/mysql/data:/var/lib/mysql -v /my/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  1. 直接安装命令后面跟参数的方式,这种方式比较简单直接

docker run --name mysql5.7_1 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306  -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

------------------------方法介绍end---------------------------

我这里采取第2种方式,快速安装两台mysql。#安装第1台

docker run --name mysql5.7_1 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306  -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

#安装第2台

docker run --name mysql5.7_2 -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306  -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

安装完后,查看msql状态

docker ps

559c7731c4a9e2939928d75c51fbcac5.png

可以在远程用命令或客户端链接任意一台,检查是否能正常连上。这里记得先将ecs中,3307,3308 端口号开放出来。

461c7c2bab63189257f9dac3e7ea5016.png

搭建一主一从集群 

这里把mysql5.7_1这台做master主机,先进入配置它,通过

docker exec -it af757efcf347 /bin/bash

命令进入到Master容器内部,也可以通过

docker exec -it mysql5.7_1 /bin/bash

命令进入。af757efcf347 是容器的id,而mysql_5.7_1是容器的名称。

f45291ba464fcf4550b67e6a8348c978.png

查看配置文件

ls -l

会看到有两个配置文件my.cnf和mysql.cnf,这个两个的关系是my.cnf是mysql.cnf的软链接,下图给予证实。所以编辑任意一个都行 

f45391f8e48bd55ad4a4954171e52ad7.png

注意⚠️:这里容器中没有vim,故,我们需要先装一下vim。依次执行命令进行安装:

apt-get update
apt-get install vim

然后vim my.cnf,增加以下配置,保存退出。

[mysqld]  #这行很重要,如果my.cnf有这行则不用再重复写,如果没有则添加。
server-id=1 #服务器唯一ID
log-bin=mysql-bin #开启二进制日志,主从复制的数据文件
binlog-do-db=pay_cloud #需要同步的数据库名字
binlog_format=STATEMEN #设置logbin格式

------------------------------其他编辑方法分割线---------begin--------------------

也可以将文件拷贝到宿主机后,编辑完,再拷贝回去。具体步骤为:

因为进入mysql容器,我们发现真正的配置文件是

/etc/mysql/mysql.cnf

,所以我们先在宿主机把此文件拷贝下来:

docker cp a1c7de8adce4:/etc/mysql/mysql.cnf /usr/local/

然后vim编辑拷贝下来的mysql.cnf:

复制代码

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/


#新增如下配置
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=pay_cloud
binlog_format=STATEMEN

复制代码 编辑保存后,再拷贝回mysql容器中,进行覆盖

docker cp mysql.cnf a1c7de8adce4:/etc/mysql/

------------------------------其他编辑方法分割线---------end--------------------

配置从机 同样的方式进入从机mysql5.7_2,修改my.cnf,增加以下配置,保存退出。退出容器。

[mysqld]
server-id=2 #服务器唯一ID
relay-log=mysql-relay #启用

重启两台mysql容器,命令:docker restart 容器id或名称

docker restart mysql5.7_1
docker restart mysql5.7_2

进入mysql5.7_1容器 #在master主机MySQL里执行授权命令

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

执行完后,登录Matater查看一下用户信息:

mysql> use mysql;
mysql> select user,host from user;

看到slave用户已经创建成功。 

ef2bf06191441eea5d622203777fc1bb.png

Master(主)和Slave(从)建立链接

查看master主节点信息:

mysql> show master status;

fc46aedfb52a0fcafea08c130170574b.png

注意⚠️:File和Position字段的值在接下来配置从机复制主机信息时会用到,所以在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起File和Position字段的值变化。

登录slave,执行链接master配置命令解释如下:

change master to master_host='主机的ip地址',
master_port=端口号,
master_user='slave',
master_password='123456',
master_log_file=取自File下的值,
master_log_pos=位置具体值,取自Position,
master_connect_retry=60;

-------------------------------------------------------------------------
详细解释:
master to master_host: Master的ip(注意,这里我最终采用的是宿主机的IP,不是master 容器的ip,当使用master容器ip时,会导致Slave_IO_Running状态为connection, ,docker我也不是太熟悉,有了解的同学可以在话题中留言指导一下)
master_port:Master的端口号,因为用的是docker中的mysql,所以这里指的是宿主机映射到到mysql容器的端口
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

具体执行命令如下(将命令复制到从mysql命令窗口执行。):

复制代码

change master to master_host='192.168.220.102',
master_port=3307,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=4412,
master_connect_retry=60;

启动slave节点:

53c93604174787ac8b4cfe4f94374d3e.png

查看从机状态(mysql 命令窗口),会发现,两个主要线程SlaveIORunning 和 SlaveSQLRunning 都是yes,即成功。

show slave status \G;

bdf553ff3869da6dd17b02772c7fbfcc.png

验证主从同步结果:我们配置了主从同步的库是 pay_cloud,故我们可以在master mysql中新创建数据库pay_cloud:

CREATE DATABASE pay_cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

在slave mysql中查看,可以在从库中看到pay_cloud 库也同步过来了:

show databases;

e15d88d2f703c3fa6cbb9f0c3b7a3970.png

大功告成,mysql的主从同步部署搞定。在实际生产中,我们配置主从同步,一方面是为了数据备份,更主要是为了做读写分离。因为在互联网公司的大部分项目里,读请求多于写请求,我们可以部署多个从库,负责读请求。部署一个主库,只负责写请求。这样可以提高mysql的请求并发量。

如何设置读写分离呢?且听下回讲解,长按扫码关注我,带你学Java~

85bd927e6659028f7a2468450e942cb2.png

往期文章

多线程与高并发常见面试题(1)

Redis(一)、分布式锁实现及对比

参考文章:

https://www.cnblogs.com/tyhj-zxp/p/12719121.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值