Docker02-安装mysql并搭建主从

系列文章目录

Docker01-介绍、安装与使用


前言

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多,这也是很多软件公司不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。

Docker之所以发展如此迅速,针对运维它给出了一个标准化的解决方案。所以,现在Docker成为了开发和运维必备的技能之一,极大便利的帮助解决了应用的环境和版本迭代问题。

本系列文章让你轻松进入docker的世界!


一、获取mysql镜像

通过Docker Hub查询mysql镜像信息,选择合适的版本

这里采用5.7版本,于是开始下载镜像:docker pull mysql:5.7

[root@VM-0-12-centos docker]# docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ... 
5.7: Pulling from docker.io/library/mysql
b4d181a07f80: Pull complete 
a462b60610f5: Pull complete 
578fafb77ab8: Pull complete 
524046006037: Pull complete 
d0cbe54c8855: Pull complete 
aa18e05cc46d: Pull complete 
32ca814c833f: Pull complete 
52645b4af634: Pull complete 
bca6a5b14385: Pull complete 
309f36297c75: Pull complete 
7d75cacde0f8: Pull complete 
Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Status: Downloaded newer image for docker.io/mysql:5.7

查看下载好的mysql镜像:docker images

[root@VM-0-12-centos docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 09361feeb475        10 days ago         447 MB

二、启动mysql容器

参考Docker Hub上的mysql的启动参数说明

创建 /app/docker/mysql/v1-conf 目录和 /app/docker/mysql/v1-data 目录,用于外挂mysql的配置文件和数据。

编写mysql的配置config-file.cnf,存入/app/docker/mysql/v1-conf目录,内容容下:

[mysqld]
# 同一局域网要唯一
server-id=1
# 开启二进制日志功能
log-bin=mysql-bin

执行启动:docker run --name mysql01 -p 3306:3306 -v /app/docker/mysql/v1-conf:/etc/mysql/conf.d  -v /app/docker/mysql/v1-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

[root@VM-0-12-centos v2-data]# docker run --name mysql01 -p 3306:3306 -v /app/docker/mysql/v1-conf:/etc/mysql/conf.d  -v /app/docker/mysql/v1-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
fe09d09fb6dd7d2247c3591ff3ef61341c3f672becde075153af3fc99b13b608
  • --name mysql01:启动的容器起名叫mysql01;
  • -p 3306:3306:容器服务的端口和宿主机端口绑定(宿主机端口:容器服务端口),这样访问宿主机对应端口则可以访问到容器内服务;
  • -v /app/docker/mysql/v1-conf:/etc/mysql/conf.d:容器卷,把容器内的目录和宿主机的目录绑定,便于配置文件的更改和数据的持久化保留,这里是配置目录外挂;
  • -v /app/docker/mysql/v2-data:/var/lib/mysql:mysql数据目录外挂到宿主机;
  • -e MYSQL_ROOT_PASSWORD=123456:指定mysql的密码;
  • -d:后台启动(守护进程),大多数应用都要后台启动,不然当前服务窗口关闭后,服务便关闭了;

查看启动的容器:docker ps 

[root@VM-0-12-centos v2-data]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
fe09d09fb6dd        mysql:5.7           "docker-entrypoint..."   5 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

使用数据库工具连接mysql01,连接成功

三、搭建从机

参照第二大步骤,编写从机的配置文件 config-file.cnf,存入 /app/docker/mysql/v2-conf 中,文件内容如下:

[mysqld]
# 同一局域网要唯一
server-id=2
# 开启二进制日志功能
log-bin=mysql-bin
# 配置中继日志
relay_log=edu-mysql-relay-bin

启动从机:docker run --name mysql01 -p 3307:3306 -v /app/docker/mysql/v2-conf:/etc/mysql/conf.d  -v /app/docker/mysql/v2-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

[root@VM-0-12-centos v2-conf]# docker run --name mysql02 -p 3307:3306 -v /app/docker/mysql/v2-conf:/etc/mysql/conf.d  -v /app/docker/mysql/v2-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2d4e6b85080a981a171e7913bdc65973352a85af5f16074e93c3bced542a4751

查看启动的容器,并用数据库工具进行连接测试

[root@VM-0-12-centos v2-conf]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
2d4e6b85080a        mysql:5.7           "docker-entrypoint..."   6 seconds ago       Up 6 seconds        33060/tcp, 0.0.0.0:3307->3306/tcp   mysql02
94dd6f04df31        mysql:5.7           "docker-entrypoint..."   17 minutes ago      Up 17 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

四、主从搭建

1、创建同步用户

Master数据库myslq01创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

使用工具连接上mysql01,选择mysql数据库后执行如下代码:

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

2、查看主机信息

执行 show master status;  查询二进制日志文件名和偏移量。

注意:File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

3、从机绑定主机

change master to master_host='172.18.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=619, master_connect_retry=30;

  • master_host:Master的地址,指的是容器的独立IP,可以通过 docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器ID或者容器名称 指令获取
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_port:Master的端口号,指的是容器的端口号
  • master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

4、开启主从同步

在从机上执行语句:start slave;

执行sql  show slave status ,查询主从同步是否开启成功? 如果Slave_IO_Running和 Slave_SQL_Running都为Yes,则表明同步成功。

如果Slave_IO_Running一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的:

  • 网络不通:检查ip,端口
  • 密码不对:检查是否创建用于同步的用户和用户密码是否正确
  • pos不对:检查Master的 Position

5、测试主从复制

在主机mysql01上创建test数据库,然后刷新从机数据库列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值