mysql是否需要容器化深入分析

 更新时间:2023年09月06日 14:24:40   作者:气宇轩昂的麻辣香锅  
这篇文章主要为大家介绍了mysql是否需要容器化深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

在容器化的时代,当然一切皆可容器化。在docker官网首页赫然有下面这几个大字。足以知道docker的优势。那么且问,mysql适合跑在docker中吗?

当然,这个问题有人说可以,也有人说不可以。下面我们就正反都来看下各自的观点。

1. 不可以容器化  

大部分人的理由有两个:

其一,数据安全性不能保障

在容器或者docker出现故障时,不易恢复。即使使用数据卷挂载(volume)也会在容器故障时产生数据问题,共享的数据卷且对宿主机也会有损伤。即数据的持久化和完整性不能保证。docker适合无状态的服务,不适合有数据状态的mysql。

其二,影响mysql性能

mysql我们常用来读写,那么IO性能就会受docker影响,最终瓶颈出现在写(在做了挂载情况下);且如果物理机其他应用占用过多资源,也会影响到容器。

当然,以上的问题,也都有对应的解决方案,但时也足够复杂;对研发力量不足的企业来说,如果盲目容器化的话,可能会捡了芝麻,丢了西瓜。  

2. 可以容器化  

有的小伙伴就会说了,同样是服务,业务服务都是跑在docker中的,数据库服务有何不可?

我只要配置下数据卷挂载,解决掉数据持久化问题,基本上就问题不大了。

比如:

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

亦或是docker官方给的mysql容器化的配置sample

services:
  backend:
    build: backend
    ports:
      - 8080:8080
    secrets:
      - db-password
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    restart: always
    secrets:
      - db-password
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=example
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password
    expose:
      - 3306
      - 33060   
volumes:
  db-data:
secrets:
  db-password:
    file: db/password.txt

两个例子都是通过-v把mysql相关目录数据做好挂载,那么在容器出现故障或者被删除时,能够保证相关数据在宿主机中存在。让数据恢复成为了可能性。注意!是可能性

当然还有docker天然的优势:  

  • 简化部署,可移植性高 
  • 保证环境一致性
  • 这两个优势 就足以促使很多人去做容器化部署。(估计大家都被手动部署,迁移,多环境问题搞得头大过)

小结

两种观点或者是叫两种方案没有对错。也不应该有争论。而应该实事求是,根据当前的业务发展,研发力量来决策。如果没有那个技术力量,就老老实实部署在物理机上,成本和风险更小。只是“万事开头难”而已。如果有实力,有技术,那么需要设计出一个好的架构方案;比如需要考虑镜像管理,监控,容器灾备,存储扩展,k8s等。技术的潮流一定是容器化,serverless化。作为技术人们要拥抱变化,要去踏浪,否则只会被淹没在历史的浪潮里。

以上就是mysql是否需要容器化深入解析的详细内容,更多关于mysql容器化的资料请关注脚本之家其它相关文章!

相关文章

  • mysql 数据类型转换的实现

    mysql 数据类型转换的实现

    这篇文章主要介绍了mysql 数据类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 解析SQL Server 视图、数据库快照

    解析SQL Server 视图、数据库快照

    在程序开发过程中,任何一个项目都离不开数据库,这篇文章给大家详细介绍SQL Server 视图、数据库快照相关内容,需要的朋友可以参考下
    2015-08-08
  • mysql中IFNULL,IF,CASE的区别介绍

    mysql中IFNULL,IF,CASE的区别介绍

    本文将详细介绍mysql中IFNULL,IF,CASE的区别,需要了解的朋友可以参考下
    2012-11-11
  • MySQL覆盖索引的使用示例

    MySQL覆盖索引的使用示例

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。这篇文章主要给大家介绍了关于MySQL覆盖索引的相关资料,需要的朋友可以参考下
    2021-01-01
  • CentOs7安装部署Sonar环境的详细过程(JDK1.8+MySql5.7+sonarqube7.8)

    CentOs7安装部署Sonar环境的详细过程(JDK1.8+MySql5.7+sonarqube7.8)

    这篇文章主要介绍了CentOs7安装部署Sonar环境(JDK1.8+MySql5.7+sonarqube7.8),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Mysql中关于Incorrect string value的解决方案

    Mysql中关于Incorrect string value的解决方案

    在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrect string value这个异常。本篇文章教给你解决方法
    2021-09-09
  • MySQL高可用解决方案MMM(mysql多主复制管理器)

    MySQL高可用解决方案MMM(mysql多主复制管理器)

    MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置
    2017-09-09
  • MySQL命令行导出与导入数据库

    MySQL命令行导出与导入数据库

    这篇文章主要为大家详细介绍了利用命令行MySQL导出数据库与导入数据库的例子,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • MySQL系列之九 mysql查询缓存及索引

    MySQL系列之九 mysql查询缓存及索引

    缓存SELECT操作或预处理查询的结果集和SQL语句,当有新的SELECT语句或预处理查询语句请求,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写
    2021-07-07
  • MySQL中查询的有关英文字母大小写问题的分析

    MySQL中查询的有关英文字母大小写问题的分析

    这篇文章主要介绍了MySQL中查询的有关英文字母大小写问题的分析,作者从多个角度进行了实验,需要的朋友可以参考下
    2015-05-05

最新评论