【docker】docker-compose实战之MySQL安装与配置

唠嗑部分

首先说一下,MySQL是否适合容器化?

  • 数据库首先要解决数据的持久化问题,以确保服务宕机之后数据不会丢失,docker提供的数据卷虽然可以让数据保存在宿主机上,但是容器的 volumn数据卷的设计是围绕 Union FS镜像层提供持久存储,数据安全缺乏保证。

  • 如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。

  • MySQL属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低MySQL的读写性能。

在实际开发过程中啊也会遇到类似问题,就小白最近来讲,事情是这样的,涉及到接口压测,期初呢是测试环境在压测,结果不太理想,然后将压测任务转移到开发环境进行,因为测试环境的数据库是容器化的,开发环境是物理机做的集群(涉及到工作相关,不再多说)

那么,MySQL就不适合容器化了嘛?

当然不是,可以将MySQL的从节点容器化,增加节点的实例数,从而增加吞吐量

当然以上问题是企业解决的问题,与我们开发人员并没有多大关系,我们在自己平时学习的过程中,或者自己做项目时,MySQL容器化还是很方便的

下面就让我们一起来搭建MySQL吧

操作步骤

在/root目录下创建如下目录

docker-compose-mysql/data(MySQL数据持久化挂载目录),docker-compose-mysql/conf(MySQL自定义配置挂载目录)

cd /root
mkdir -p docker-compose-mysql/{data,conf}

授权(避免持久化数据目录权限不足而失败)

chown -R mysql:mysql docker-compose-mysql/data

创建自定义的配置文件mysql.cnf

vim docker-compose-mysql/conf/mysql.cnf

配置如下(主要是字符集配置)

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8

在docker-compose-mysql目录下创建docker-compose.yml文件,内容如下

version: "3.1"
services:
  mysql1:
    container_name: docker-compose-mysql
    image: mysql:5.7
    ports:
      - "3310:3306"
    volumes:
      - /root/docker-compose-mysql/conf/:/etc/mysql/conf.d/
      - /root/docker-compose-mysql/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root

在docker-compose-mysql目录下执行如下命令,运行容器

docker-compose up -d

image-20230227145537507

测试&结语

使用Windows命令行或Navicat连接MySQL,我的ip是10.10.10.10

使用如下命令查看字符集,出现下图即可,说明挂载的配置文件生效了

show variables like '%character%';

【docker】docker-compose实战之MySQL安装与配置_第1张图片

问题:不知道大伙有没有发现,之前我们在 安装MySQL主从的时候,做了这么一件事,安装后修改了MySQL root用户的连接权限(默认root账户只能本机连接),但是docker容器跑的MySQL却没有,这是为啥呢?

解释一下,我认为这跟我们拉取的MySQL镜像有关,作者制作MySQL镜像的时候已经帮我们解决了,docker跑的MySQL root用户默认就是%,看下图

【docker】docker-compose实战之MySQL安装与配置_第2张图片

到此,docker-compose安装MySQL就结束了

  • 关于docker章节,后续我们还会更新常用软件的安装,敬请期待

你可能感兴趣的:(Java全栈开发,docker-compose,软件安装,mysql,docker,容器)