开发者社区> 问答> 正文

绝大多数人没玩过也没见过的:多个MYSQL进程共用一个3306端口

kicker0609 2016-07-02 23:20:30 3214

各位客官听我讲,事情的过程是这样的:

   10年前,公司有一个中型网站,服务器托管在IDC机房。网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中。但网站还是要继续技术性维护(就是能打开),后来转到我手来维护。我嫌IDC机房繁琐不方便,把网站从IDC机房转到了阿里云。
   转移到阿里云和部署都正常,但是部署完成后,发现一个问题,性能很低,MYSQL经常卡死,没道理啊。云服务器比以前的IDC服务器配置好很多,还用的是SSD硬盘,整个WEB和MYSQL配置都一样。(别嘲笑,都是1台服务器,当年也撑起日均60万+IP)
  在查性能瓶颈的时候,发现MYSQL进程占用CPU特别高。 我把IDC机房的服务器(迁移到阿里云后保留了一段时间)MYSQL和云服务器的MYSQL进程比较了一下,这一比较,发现一个惊天现象,绝大多数人都没见过的现象。

  在常识里,一个MYSQL多进程,只能一个进程占用一个端口。3306端口占用了,其他进程就不能继续使用。而IDC机房服务器有20个MYSQL进程,都用了同一个3306端口!!!  (上图,眼见为实)
 
 ![p1](https://oss-cn-hangzhou.aliyuncs.com/yqfiles/1d24fd780acc97b8a90519454a827e0a7a9fa484.jpeg)

 ![p2](https://oss-cn-hangzhou.aliyuncs.com/yqfiles/8475713767d5254ae9fb0682830d861c72060ac8.jpeg)

 ![p3](https://oss-cn-hangzhou.aliyuncs.com/yqfiles/6ab143d1a25dfcac4f3de1f4a1b5f1501905a7d5.jpeg)

   这台IDC服务器是20个MYSQL进程,相当于20个MYSQL单进程的处理能力,难怪配置更好的阿里云服务器反而卡,因为阿里云只运行了一个3306端口的MYSQL,而不是20个3306端口的MYSQL!

 当时也想依葫芦画瓢,也做出来20个运行于同一个3306端口的MYSQL,搜遍了百度,GOOGLE,都找不到类似的案列。所谓的mysqld_multi都是运行于不同的端口。 搜索引擎靠不住,就问高手,以前的技术找不到,问了一下阿里的高手(可能没问对人),没没人知道。

 后来发现IDC服务器用的MYSQL版本是PerconaServer5.1.52,而aliyun服务器是普通的mysql Distrib 5.1.7。以为只是MYSQL 版本的问题,但是下载了PerconaServer5.1.52使用,也搞不出来20个MYSQL进程都用3306端口。继续研究发现只用IDC服务器上的PerconaServer5.1.52,在aliyun服务器上使用以下命令

/alidata/server/PerconaServer5.1.52/libexec/mysqld --basedir=/alidata/server/PerconaServer5.1.52 --datadir=/alidata/server/PerconaServer5.1.52/data --user=root --log-error=/alidata/server/PerconaServer5.1.52/data/myserver.err --open-files-limit=8192 --pid-file=/alidata/server/PerconaServer5.1.52/data/myserver.pid --socket=/tmp/mysql.sock --port=3306。也能生成20个运行在3306端口的MYSQL进程,我怀疑是IDC机房PerconaServer5.1.52编译参数不一样的缘故。

后来在aliyun服务器上通过别的方式,优化了一下MYSQL的使用频次,可以将就用了(反正不商用)。但这个20个MYSQL进程都运行在3306端口一直是个心病。 今天突然想起,故发在这里,请真正的MYSQL技术大牛能解惑啊!
固态存储 搜索推荐 关系型数据库 MySQL
分享到
取消 提交回答
全部回答(2)
  • 小米顶顶顶
    2019-07-17 19:50:26

    我这就有一个这样的 10个mysql进程公用的3306端口

    0 0
  • joneslee
    2019-07-17 19:50:26

    哥们我也对这玩意太好奇了,虽然没不知道怎么实现,不过看amh面板是--socket=/tmp/mysql.sock 不同来处理的,你数据库版本能发布出来看看么?还有你现在能不能做到了?

    0 0
添加回答
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程