各位客官听我讲,事情的过程是这样的:
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技术大牛能解惑啊!
哥们我也对这玩意太好奇了,虽然没不知道怎么实现,不过看amh面板是--socket=/tmp/mysql.sock 不同来处理的,你数据库版本能发布出来看看么?还有你现在能不能做到了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。