全球共有多少MySQL实例在运行?这里有一份数据
摘要
Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例。因为这份报告基数够大,而且信息也非常完整,从数据库专业的角度来看,里面是有很多非常有意思,且可以量化的数据和结论的。之前网上的一些分析都是基于安全角度来分析,这里我们一起再看看这份报告里面隐含的一些数据库信息吧。
另外,这里的“暴露在公网”,是指其端口在公网可以被访问且响应握手信息,并不是可以被登录,并没有什么安全隐患。原报告的文章链接可以在文章结尾处查看。
原文地址:全球共有多少MySQL实例在运行?这里有一份数据,该内容同步发布于微信公众号:「云数据库技术」,欢迎订阅,第一时间获取信息。
概述
该数据由Shadowserver的SCANNING PROJECT收集,总计扫描到537.8万个打开的3306端口,其中IPv4协议的395.7万个,IPv6协议142.1万个。这些端口中反馈了握手信息的共360万个,其中IPv4协议的228万个,IPv6协议134.4万。
返回握手信息的360万实例,因为握手信息包含了版本等信息,加上Shadowserver的地域等信息,就构成了一份较为完整的MySQL实例版本和实例分布数据。
Shadowserver并没有公布完整的数据详细信息,但依旧公布了多个维度的数据供分析。
8.0 GA已经四年,但5.7依旧是主流
以IPv4 Top 10的版本来看,当前5.7版本占比最大,其次为5.6和8.0版本。另外,MariaDB占比14%,更具体的:
- MySQL 8.0 GA日期为2018年04月,占比为8%
- MySQL 5.7 GA日期为2015年10月,占比为46.7%
- MySQL 5.6 GA日期为2013年02月,占比为30%
- MariaDB版本占比为14%,包括了MariaDB 5.5占比8.1%,其10.1版本占比6%
可以看到,MySQL 5.7依旧为当前最主流的版本,根据MySQL官方的规划,该版本可能在明年的10月就会停止对其的扩展支持,可能就不再更新版本。与此同时,MySQL官方还可能会在今年推出新的大版本(可能是9.0或者8.1之类的),加上5.7的维护周期接近尾声,会较为大量的用户升级到新版本。
全球共有800万MySQL实例在运行?
根据一些公开数据和部分经验数据,这里对全球MySQL运行实例个数做一个预测。
在这份报告中,共探测到约538万开放的3306端口,其中约360万返回了握手信息。那么,全球一共有多少MySQL在运行呢? 这里基于以下信息做一个猜测:
- 根据帕累托法则,即2/8原则,约仅有20%的因素影响80%的结果
- 诸如Google、Amazon、微软、阿里巴巴、腾讯、字节跳动等大型企业保有大量实例,且不可以被扫描
- 还会有大量实例运行在AWS、Azure、阿里云、GCP等云环境的VPC之中,如果没有开启公网IP,通常也无法被扫描到,这部分根据一些经验数据,预计为200万个
- 根据IDC数据,全球服务器2021年出货量为1350万台
那么,扫描到538万再加上200万,则有约738万个"闲散"实例。根据2/8原则,诸如Google、Amazon、阿里巴巴等这些大型企业(非云部分)中依旧可能保有着20%的实例(738万为80%部分),也就是约为184.5万个实例。那么预计:全球整体MySQL实例数量可能在922万这样的数量级。另外,我们再从全球服务器出货量角度做一个验证。根据IDC数据,2021年全球服务器出货量约为1350万台,这里假设(该假设基于一些历史的经验)10台服务器对应一个数据库实例,那么2021年服务器出货量就对应了135万个实例,按照服务器平均5年折旧计算,总保有则约为675万个实例,这里与922万有一定的偏差。折中取这两个数据的平均值,所以这里预测:全球MySQL实例数在800万左右当然,这只是一个超大颗粒度的、不可验证的预测,如果有更好的预测模型或者数据支持,欢迎回复公众号讨论。
MariaDB在某些细分市场份额很大
从这份数据来看,MariaDB是拿下了非常大的市场的。从IPv4 top 10版本统计信息来看,MariaDB占比为14.3%;如果,单从IPv6的统计数据来看,MariaDB占比为86.2%,实例数量超110万。
这里在IPv6环境中,部署量最大的版本为:5.5.5-10.5.12-mariadb-cll-lve,这是一个cPanel在Lightweight Virtual Environment的发行版本,而对应的MariaDB 10.5.12版本为2021年8月发布。从这个点看到,MariaDB是获得了更多的开源社区的信任,作为其发行版的默认数据库版本。甚至在一些细分的场景中,MariaDB甚至可以说可能成为了主流。
但,另一方面,根据在中国的实际感受来看,MariaDB的市场现状并没有以上数据展示的那么乐观,原因如下:
一是MySQL品牌依旧非常强大,虽然安装的MariaDB,但是实际使用的客户端依旧可能是mysql命令行,所以,用户依旧当做MySQL来使用。
另外,目前,大型企业全面使用MariaDB支撑核心业务的公司还比较少,大部分依旧是使用MySQL,并基于MySQL去进行优化,而不是MariaDB。
当然,从这个数据角度来看,MariaDB的这个部署量依旧会给其带来很多优势:
提升用户认知基础,虽然命令行依旧使用mysql,但是登录后依旧会看到MariaDB版本号信息和功能
产品会在各种环境中被使用,对其整体的稳定性会有较大的保障
相比MySQL,MariaDB已经获得更多Linux发行版的信任,这可能是进一步获得扩大市场的最重要的机会点之一
49%的实例启用了TLS/SSL加密
从所有IPv4环境的实例数据来看,有49%启用了TLS/SSL加密。因为MySQL 5.7之后的版本,都已经默认开启了传输加密,这与前面的MySQL 5.7占比数据是基本吻合的,大部分用户在使用5.7或8.0的时候,都会使用其默认自带的加密能力。所以,你的实例开启了传输加密吗?延伸阅读:
中国的MySQL实例在全球占比15.8%
在这份报告中,从IPv4的数据中看到,中国MySQL实例数占比为15.8%(大陆地区约为13%,香港地区约为2.8%),仅次于美国的32.5%。其次是波兰、德国、法国、新加坡等地。另外,根据IDC的报告中国服务器出货量占全球比率约为25.3%(2021年,从销售额角度),所以,中国数据库的实际部署量可能更大。
IPv6在全球普及率都不高,中国更低
从整体数据来看,有握手反馈的扫描中,IPv4的3306共扫描到2,279,908个,IPv6共1,343,993个,在全球角度上,运行在IPv6上的MySQL已经达到了37%。但是,这个数据在中国,仅有0.1%。虽然,数据库部署并不适合作为IPv6和IPv4的对比,但作为一个参考,可以看到在全球范围IPv6已经比较高了,但是在中国普及率还非常低。
从这份数据来看,IPv6较高的国家有:美国、荷兰、新加坡、德国、英国等。
这份数据的一些限制
因为报告是通过端口扫描获得的信息,所以各个大公司自己内部的服务器都是不在其中的。所以,实际MySQL装机量应该远大于这个量。另外,大公司企业数据库情况可能与报告有一定的偏差。例如,通常大公司环境中数据库版本会比较统一,而不会简单的使用最新版本。
报告中的数据可以看到MariaDB的部署量比想象的要大。猜测的原因可能是,很多Linux发行版本中自带的仓库使用的是MariaDB数据库,这让MariaDB的装机量比想象的更大。
另外,报告没有公布所有的数据,例如版本数据,只有Top 10的版本,占整体IPv4的比率约为26%,还不是一个完整的数据,可能与整体数据会有一些偏差
MariaDB的握手阶段提供的版本信息与实例中的信息有一些不同,所以会呈现出比较多的是”5.5.5-10.5.12-mariadb-cll-lve”这样的版本号,其中10.5.12才是MariaDB正确的版本号;”cll”应该是代表有cPanel编译提供的发行版(参考);”lve”则可能是”Lightweight Virtual Environment”的缩写。
Shadowserver Foundation是什么?“Shadowserver是全球领先的恶意活动调查、互联网安全报告的公益组织,Shadowserver维护着世界上最大的安全信息存储库之一,它存储了数以万亿计的历史恶意网络连接,同时Shadowserver每天扫描整个互联网超过50种协议暴露情况,用于查找可能用于攻击利用的配置错误或存在恶意行为的系统,Shadowserver拥有超过20个监测节点。”
Shadowserver还扫描了MongoDB、Redis、SQL Server的情况。MongoDB约为10万个(101338,参考)、Redis约为2.5万(参考)、SQL Server约为8.5万(参考)。如果说,MySQL在很多Linux环境中可能默认安装,但是这几个数据库一般是不会被默认安装的。
报告中IPv6协议下的MySQL实例数据与实际感受差距非常大,例如在IPv6版本下,MariaDB占比约为85%(超100万实例)。在IPv6实例最多的国家是美国、荷兰、新加坡等来看,这与服务器出货量相关数据匹配度非常低。所以,有几种可能:一个是MariaDB在某个细分的场景下有非常大的优势,在早期对IPv6支持更好,所以在某些对IPv6有强制要求的地区和国家有更好的市场。
再次声明这里的“暴露”在公网,并不是说这些实例不安全,因为这里的探测不能,也没有连接上数据库,而是在连接之前的握手数据交换阶段。
原始报告链接
https://www.shadowserver.org/news/over-3-6m-exposed-mysql-servers-on-ipv4-and-ipv6/
全球共有多少MySQL实例在运行?这里有一份数据的更多相关文章
- 在docker中运行mysql实例
Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机.下图是容器跟虚拟机的对比 对docker有个大致了解,学习docker断断续续,虽说学习不能急于求成,但断断续续学的话,浪费的碎片化 ...
- 在docker上安装运行mysql实例
ps:实验环境是:CentOS Linux release 7.3 64位1.获取mysql镜像从docker hub的仓库中拉取mysql镜像docker pull mysql查看镜像docker ...
- CentOS 7.0 启动多个MySQL实例(mysql-5.7.21)
Linux系统:CentOS-7.0 MySQL版本:5.7.21 Linux系统下启动多个MySQL实例,目前知道有两种方法,一种是通过官方提供的mysqld_multi.server来实现,但是我 ...
- 同一台windows下配置安装多个mysql实例,实现主从同步
一.安装多个mysql 参见: https://blog.csdn.net/wrh_csdn/article/details/80198795 https://www.cnblogs.com/qjoa ...
- Python操作Mysql实例代码教程在线版(查询手册)_python
实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding ...
- python连接mysql实例分享_python
示例一 #coding=UTF-8 import sys import MySQLdb import time reload(sys) sys.setdefaultencoding('utf-8') ...
- 存储总量达20T的MySQL实例,如何完成迁移?
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/122 来源:腾云阁 https://www.qclou ...
- Windows上安装多个MySQL实例(转)
在学习和开发过程中有时候会用到多个MySQL数据库,比如Master-Slave集群.分库分表,开发阶段在一台机器上安装多个MySQL实例就显得方便不少. 在 MySQL教程-基础篇-1.1-Wind ...
- [MySQL 5.1 体验]MySQL 实例管理器 mysqlmanager 初试
原贴:http://imysql.cn/node/313 [MySQL 5.1 体验]MySQL 实例管理器 mysqlmanager 初试 周二, 2007/06/19 - 22:10 - yejr ...
随机推荐
- nmtui 工具使用的话,需要开启NetworkManager(网卡文件不存在ens192)
环境采样: [root@k3master network-scripts]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) ...
- vue3 - 事件处理之事件修饰符
内容取自>> <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- ...
- uniapp-scroll-view纵向(竖向)滑动当scrollTop为0时卡顿问题
这个问题目前遇到的人少,所以找到答案不容易,我也是各种细节亲测才发现的解决方案.记录下来 当uniapp用scroll-view竖向滚动时,在scrollTop为0时,下拉会卡顿. 解决方法(只需要在 ...
- 面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 RabbitMQ我们经常的使用, ...
- Transactional事务,事务嵌套的时候,如果主事务出现问题,子事务执行不需要回滚怎么做?
如果调用的方法在不在同一个service当中,则只需要在子事务当中的方法上方添加注解即可 下方即是:这就话代表:重新开启一个新的事务 @Transactional(propagation = Prop ...
- Vim 中进行文本替换
Vim 中进行文本替换 格式 用法 :[range]s/from/to/[flags] tips: [] 表示该内容可选 参数 from 需要替换的字符串(可以是正则表达式) to 替换后的字符串 r ...
- 《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
1.简介 上一篇介绍了POM的基础理论知识和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例 ...
- 记一次MySQL数据迁移到SQLServer全过程
为什么要做迁移? 由于系统版本.数据库的升级,导致测试流程阻塞,为了保证数据及系统版本的一致性,我又迫切需要想用这套环境做性能测试,所以和领导.开发请示,得到批准后,便有了这次学习的机会,所以特此来记 ...
- 《Mybatis 手撸专栏》第6章:数据源池化技术实现
作者:小傅哥 博客:https://bugstack.cn - 手写Mybatis系列文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 码农,只会做不会说? 你有发现吗,其实很大一部分码农 ...
- 聊聊Lock接口的lock()和lockInterruptible()有什么区别?
lock()和lockInterruptible()都表示获取锁,唯一区别是,当A线程调用lock()或lockInterruptible()方法获取锁没有成功而进入等待锁的状态时,若接着调用该A线程 ...