各位客官听我讲,事情的过程是这样的:
10年前,公司有一个中型网站,服务器托管在IDC机房。网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中。但网站还是要继续技术性维护(就是能打开),后来转到我手来维护。我嫌IDC机房繁琐不方便,把网站从IDC机房转到了阿里云。
转移到阿里云和部署都正常,但是部署完成后,发现一个问题,性能很低,MYSQL经常卡死,没道理啊。云服务器比以前的IDC服务器配置好很多,还用的是SSD硬盘,整个WEB和MYSQL配置都一样。(别嘲笑,都是1台服务器,当年也撑起日均60万+IP)
在查性能瓶颈的时候,发现MYSQL进程占用CPU特别高。 我把IDC机房的服务器(迁移到阿里云后保留了一段时间)MYSQL和云服务器的MYSQL进程比较了一下,这一比较,发现一个惊天现象,绝大多数人都没见过的现象。
在常识里,一个MYSQL多进程,只能一个进程占用一个端口。3306端口占用了,其他进程就不能继续使用。而IDC机房服务器有20个MYSQL进程,都用了同一个3306端口!!! (上图,眼见为实)
![1d24fd780acc97b8a90519454a827e0a7a9fa484](https://i-blog.csdnimg.cn/blog_migrate/a9b69552d0e27e8675b3f441b046f1f0.png)
![8475713767d5254ae9fb0682830d861c72060ac8](https://i-blog.csdnimg.cn/blog_migrate/da7a85e999ee4010f82cb77dd1b7ec50.png)
![6ab143d1a25dfcac4f3de1f4a1b5f1501905a7d5](https://i-blog.csdnimg.cn/blog_migrate/1cf480e1b0c5634f98767f52656c5aab.png)
这台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技术大牛能解惑啊!
![e02dc72a80a998121d23651eaadfc7d35aa71661](https://i-blog.csdnimg.cn/blog_migrate/7d496c4abab3eac1f8b6b54d35ec72ed.png)