原创声明:本人所发内容及涉及源码,均为亲手所撸,如总结内容有误,欢迎指出
唠嗑部分
首先说一下,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
测试&结语
使用Windows命令行或Navicat连接MySQL,我的ip是10.10.10.10
使用如下命令查看字符集,出现下图即可,说明挂载的配置文件生效了
show variables like '%character%';
问题:不知道大伙有没有发现,之前我们在 安装MySQL主从的时候,做了这么一件事,安装后修改了MySQL root用户的连接权限(默认root账户只能本机连接),但是docker容器跑的MySQL却没有,这是为啥呢?
解释一下,我认为这跟我们拉取的MySQL镜像有关,作者制作MySQL镜像的时候已经帮我们解决了,docker跑的MySQL root用户默认就是%,看下图
到此,docker-compose安装MySQL就结束了
-
关于docker章节,后续我们还会更新常用软件的安装,敬请期待
