MYSQL服务器为什么启动不了呢?已查过如何打开3306端口的端口没有被占用。怎么解决?

博客访问: 3140361
博文数量: 190
博客积分: 3600
博客等级: 中校
技术积分: 9164
注册时间:
专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
在测试Mysql多主一从服务器,即一个从服务器多端口同步不同主库。本文记录了开启不同端口的操作。详细步骤:1、.cp /f /fcp /f /fcp /f /f2、如:[client]port
= 3308socket
= /tmp/mysql3308.sockdefault-character-set=UTF[mysqld]port
= 3308socket
= /tmp/mysql3308.sockbasedir=/usr/local/mysqldatadir=/www/mysqldata83、创建mkdir
/www/mysqldata3306mkdir
/www/mysqldata3307mkdir
/www/mysqldata33084、初始化数据库/usr/local/mysql/scripts/mysql_install_db
--datadir=/www/mysqldata3306/ --user=mysql --basedir=/usr/local/mysql /usr/local/mysql/scripts/mysql_install_db
--datadir=/www/mysqldata3307/ --user=mysql --basedir=/usr/local/mysql /usr/local/mysql/scripts/mysql_install_db
--datadir=/www/mysqldata3308/ --user=mysql --basedir=/usr/local/mysql/usr/local/mysql/bin/mysqld_safe
--defaults-extra-file=/f
--datadir=/www/mysqldata3306 --user=mysql
/usr/local/mysql/bin/mysqld_safe
--defaults-extra-file=/f
--datadir=/www/mysqldata3307 --user=mysql
/usr/local/mysql/bin/mysqld_safe
--defaults-extra-file=/f
--datadir=/www/mysqldata3308 --user=mysql
&6、MYSQL,对应的sock文件。/usr/local/mysql/bin/mysqladmin
-uroot -S /tmp/mysql3308.sock shutdown7、mysql -S /tmp/mysq3308.sock
阅读(9570) | 评论(4) | 转发(5) |
相关热门文章
给主人留下些什么吧!~~
:一大堆错误。。不知咋搞[root@test250&mysql-test]#&/opt/mysql/scripts/mysql_install_db&&--datadir=/data/mysql3307_data&--user=mysql&--basedir=/opt/mysql&--defaults-extra-file=/fInstalling&MySQL&system&tables...:04:30&[Warning]&'--log_slow_queries'&is&deprecated&and&will&be&removed&in&a&future&release.&Please&use&''--slow_query_log'/'--slow_query_log_file''&instead.:04:30&[Warning]&'--log'&is&dep
是由于我使用的MySQL版本为5.0.45&,后期的版本对参数做了调整,你可以查看我另一篇文章http://blog.chinaunix.net/uid--id-3451640.html |
一大堆错误。。不知咋搞[root@test250&mysql-test]#&/opt/mysql/scripts/mysql_install_db&&--datadir=/data/mysql3307_data&--user=mysql&--basedir=/opt/mysql&--defaults-extra-file=/fInstalling&MySQL&system&tables...:04:30&[Warning]&'--log_slow_queries'&is&deprecated&and&will&be&removed&in&a&future&release.&Please&use&''--slow_query_log'/'--slow_query_log_file''&instead.:04:30&[Warning]&'--log'&is&dep
修杰_JIANG: 为什么不使用mysqld_multi 来管理呢。.....mysqld_multi 确实方便很多,谢谢提醒。
为什么不使用mysqld_multi 来管理呢。
请登录后评论。MySQL配置端口访问规则 - 允许外网访问 3306
MySQL安装后,默认只允许通过.1的方式在服务器访问3306端口
1). 3306端口是不是没有打开?
使用nestat命令查看3306端口状态:
~# netstat -an | grep 3306 【Linux】
~# netstat -an| findstr
从结果可以看出3306端口只是在IP .1上监听,所以拒绝了其他IP的访问。
解决方法:修改/etc/mysql/f文件。打开文件,找到下面内容:
# Instead of skip-networking the default is now to listenonly on
# localhost which is more compatible and is not lesssecure.bind-address
把上面这一行注释掉或者把.1换成合适的IP,建议注释掉。
重新启动后,重新使用netstat检测:
~# netstat -an | grep 3306
00.0.0.0:3306
2). 问题解决了吗?
现在使用下面命令测试:
~# mysql -h 10.1.1.2 -u root-p
Enter password:
ERROR 1130 (): Host
B0324-Desktop.local
isnot allowed to connect to this MySQL server
结果出乎意料,还是不行。
解决方法:原来还需要把用户权限分配各远程用户,MySQL默认root账户不带%而是.1,因此需要修改。
登录到mysql服务器,使用grant命令分配权限
mysql& grant all on database_name.*to user_name@ %
identifiedby
其中database_name、user_name和user_password根据实际情况设置。
完成后使用mysql命令连接,提示成功,为了确保正确可以再远程登陆测试一下。
ERROR 1130: Host
is not allowed to connectto this MySQL server
解决方法:
1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 mysql
数据库里的
项,从 localhost 改称 %
mysql -u root -pvmwaremysql&
mysql&update user set host =
where user =
mysql&select host,
PRIVILEGES命令
然后再进行连接
2.授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO
myuser @ %
IDENTIFIEDBY
mypassword
WITH GRANT OPTION;
如果你想允许用户myuser从ip为.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO root @ .3
IDENTIFIED BY
mypassword
WITH GRANTOPTION;
GRANT ALL PRIVILEGES ON *.* TO
root @ 10.10.40.54 IDENTIFIED BY
WITH GRANT OPTION;
MySQL配置端口访问规则 - 允许外网访问 3306由用户自行发布,MySQL配置端口访问规则 - 允许外网访问 3306内容不代表本站立场,请自行分辨真伪。[偶尔遇到]找不到mysql.sock的出现原因及解决方案和mysql 默认mysql.sock位置默认问题探讨
引用地址:
注意: 该地址仅在今日23:59:59之前有效
背景:(1)偶尔会出现mysql的server和mysql的client默认的socke文件不在一个地方,我们用mysql时会出现一个找不到mysql.sock的情况。(2)因非正常关机出现:/tmp/mysql.sock 不见了,找不到了,如何连接上去的问题?(其他机器通过tcp可以的)先放个命令在mysql运行机上链接的方法:
mysql --protocol=TCP -uroot -p -P3306 -hlocalhost
Enter password:
Welcome to the MySQL monitor.&&C or \g.
Your MySQL connection id is 65744
Server version: 5.6.13-log Source distribution
Copyright (c) , Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Type '' or '\h' for help. Type '\c' to clear the current input statement.
mysql& \q
原因一:linux系统一次不正常关机后,连接mysql的时候系统提示不能通过/tmp/mysql.sock文件进行连接,或者非正确关闭时,导致mysql.sock文件再次丢失,当你在次启动时出现如下错误,connect mysqld faild ,/tmp/mysql.sock can't findmysql.sock的丢失主要是因为更改了机器名,在没有正确关闭mysqld的情况下,去执行mysqld_safe,这样他就删除已经运行的mysql.sock了。正常情况下,mysqld_safe 应该告诉我们是已经有Mysqld运行了,而上边并没有这样提示,主要是更改机器名导致mysqld_safe判断是否已经运行,去找的是newhostname.pid文件,但已经运行的mysqld生成的是oldhostname.pid, 肯定找不到newhostname.pid,所以mysqld_safe收拾一下(清理了mysql.sock),然后去重启,但是ibdata需要lock,它lock不了,还是起不了,但是老的mysql.sock就消失。原因二:连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。解决办法,实时上,在/etc/init.d 下有个连接启动脚本 mysqld ,我们启动时可以直接用它 service mysqld start |stop来自:http://blog.csdn.net/imzoer/article/details/8444400实践情况如下:[root@localhost init.d]# mysqladmin -u root -hlocalhost -p shutdownEnter password: mysqladmin: connect to server at 'localhost' failederror: 'Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2)'Check that mysqld is running and that the socket: '/tmp/mysqld.sock' exists!直接干死了:pkill -9 mysql重启:/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/db/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/db/mysql/localhost.err --open-files-limit=65535 --pid-file=/usr/local/mysql/xd_xiyou_db_7.pid --socket=/tmp/mysqld.sock --port=3306————————————————上面这种太粗暴,实践操作Ok如下:—————————————————————————[root@localhost init.d]# service mysql stopShutting down MySQL.....&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& [&&OK&&][root@localhost init.d]# service mysql startStarting MySQL...&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[&&OK&&]启动原理:/etc/init.d/mysql里写明了basedir及datadir,这块datadir很重要,启动时起了很大的作用,在安装时就定下来不改动最好了:
basedir=/usr/local/mysql
datadir=/data/db/mysql
启动、停止、重启动脚本简述:
&&'start')
&&&&# Start daemon
&&&&# Safeguard (relative paths, core dumps..)
&&&&cd $basedir
&&&&echo $echo_n &Starting MySQL&
&&&&if test -x $bindir/mysqld_safe
&&&&&&# Give extra arguments to mysqld with f file. This script
&&&&&&# may be overwritten at next upgrade.
&&&&&&$bindir/mysqld_safe --datadir=&$datadir& --pid-file=&$mysqld_pid_file_path& $other_args &/dev/null 2&&1 &
'stop')
&&&&# Stop daemon. We use a signal here to avoid having to know the
&&&&# root password.
&&&&if test -s &$mysqld_pid_file_path&
&&&&&&mysqld_pid=`cat &$mysqld_pid_file_path&`
&&&&&&if (kill -0 $mysqld_pid 2&/dev/null)
&&&&&&then
&&&&&&&&echo $echo_n &Shutting down MySQL&
restart原理:先stop,再start:
&&'restart')
&&&&# Stop the service and regardless of whether it was
&&&&# running or not, start it again.
&&&&if $0 stop&&$other_ then
&&&&&&$0 start $other_args
——————————————————————————————————————————————————————————出现以下的信息:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)如果还不行.就先#ps -aux|grep mysql找mysql的进程里的那个socket位置,如:
/usr/local/mysql/libexec/mysqld --defaults-file=/data/db/f --basedir=/usr/local/mysql --datadir=/data/db/mysql --user=mysql --log-error=/data/db/mysql/localhost.localdomain.err --pid-file=/data/db/mysql/localhost.localdomain.pid --socket=/var/lib/mysql/mysql.sock --port=3306
方法一:mysql --port=3306 -uroot -p123qwe*** -S /var/lib/mysql/mysql.sock方法二:mysql --socket=/var/lib/mysql/mysql.sock --port=3306 -uroot -p123qwe***方法三:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock我的startmysql.sh :/usr/local/webserver/mysql/libexec/mysqld --defaults-file=/data0/mysql/f --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/3306/data --user=mysql --log-error=/data0/mysql/3306/data/localhost.localdomain.err --pid-file=/data0/mysql/3306/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306my.cnf位置:--defaults-file=/data0/mysql/fvi /data0/mysql/f里面都是关于启动Mysql的一些东西。vi /f[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Default to using old password format for compatibility with mysql 3.x# clients (those using the mysqlclient10 compatibility package).old_passwords=1[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[root@localhost Lang-zh_cnModule-CE-5.1.0]# mysqlERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)默认去连接的/var/lib/mysql/mysql.sock 这个文件。而我们的启动配置文件在:--socket=/tmp/mysql.sock两个配置文件:启动运行的时候是在/data0/mysql/f 的mysql.sock在位置/tmp/mysql.sock,而/f 的mysql.sock在位置/var/lib/mysql/mysql.sock 刚好和在终端运行mysql出现在错误相同:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)my.cnf是mysql的启动配置文件。所以为了使改动生效必须重启mysql!参考:/Linux/75.htm——————————Add Time:——————————mysql连接不上,mysqld.sock丢失如果你指定localhost 作为一个主机名【也就是你在本机上连接本季的mysql服务】, mysqladmin 默认使用Unix套接字文件连接,而不是TCP/IP。从MySQL 4.1 开始,通过--protocol= TCP |SOCKET | PIPE | MEMORY}选项,你可以显示地指定连接协议,举例如下:socket 连接:[zzz@zzz mysql]$ mysql -urootERROR 2002 (HY000): Can't connect to local MySQL server through socket'/home/zzx/mysql/mysql.sock' (2)tcp 连接:[zzz@zzz mysql]$ mysql --protocol=TCP -uroot -p -P3307 -hlocalhostEnter password:Welcome to the MySQL monitor. C or g.Your MySQL connection id is 73 to server version: 5.0.15-standardType '' or 'h' for help. Type 'c' to clear the buffer.mysql&==========》如果mysql服务器还没启动,由于mysqld.sock丢失启动不了,怎么办《=========================》下面是一个由于更改主机名导致的找不到sock.文件《===============linux系统一次不正常关机后,连接mysql的时候系统提示不能通过/tmp/mysql.sock文件进行连接,或者非正确关闭时,导致mysql.sock文件再次丢失,当你在次启动时出现如下错误,connect mysqld faild ,/tmp/mysql.sock can't findmysql.sock的丢失主要是因为更改了机器名,在没有正确关闭mysqld的情况下,去执行mysqld_safe,这样他就删除已经运行的mysql.sock了。正常情况下,mysqld_safe 应该告诉我们是已经有Mysqld运行了,而上边并没有这样提示,主要是更改机器名导致mysqld_safe判断是否已经运行,去找的是newhostname.pid文件,但已经运行的mysqld生成的是oldhostname.pid, 肯定找不到newhostname.pid,所以mysqld_safe收拾一下(清理了mysql.sock),然后去重启,但是ibdata需要lock,它lock不了,还是起不了,但是老的mysql.sock就消失。解决办法,实时上,在/etc/init.d 下有个连接启动脚本 mysqld ,我们启动时可以直接用它 service mysqld start |stop来自:http://blog.csdn.net/imzoer/article/details/8444400找不到mysql.sock,mysql.sock丢失问题解决方法?Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) &;是你的mysql.sock 文件不存在了,可能是被你不小心删除了,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。另一个解决办法是你现在不能用套接字建立连接因为它不见了,你可以建立一个TCP/IP连接,例如,如果服务器主机是192.168.0.1,你可以这样连接:%mysql -u root -h 192.168.0.1 -p%mysqladmin -u root -h 192.168.0.1 -p shutdown如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,如果数据目录是/usr/local/var,你可以通过将下列行加入/f中,将套接字文件移到那里:[mysqld]socket=/usr/local/var/mysql.sock[client]socket=/usr/local/var/mysql.sock对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置创建套接字=============================================怎样保护“/tmp/mysql.sock ”不被删除如果你有这个问题,事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”,在Unix的大多数版本上,你能通过为其设置sticky(t)位来保护你的“/tmp”文件系统。作为root登录并且做下列事情:shell& chmod +t /tmp这将保护你的“/tmp”文件系统使得文件仅能由他们的所有者或超级用户(root)删除。你能执行ls -ld /tmp检查sticky位是否被设置,如果最后一位许可位是t,该位被设置了。=============================================一个MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字,它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接;或TCP/IP,它通过一个端口号连接。Unix套接字比TCP/IP更快,但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的主机名localhost,使用Unix套接字。错误(2002)Can 't connect to ...通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时,你正在使用一个错误的套接字文件或TCP/IP端口。 由检查(使用ps)在你的服务器上有一个名为mysqld的进程启动!如果没有任何mysqld过程,你应该启动一个。如果一个mysqld过程正在运行,你可以通过尝试这些不同的连接来检查服务器(当然,端口号和套接字路径名可能在你的安装中是不同的):shell& mysqladmin versionshell& mysqladmin variablesshell& mysqladmin -h `hostname` version variablesshell& mysqladmin -h `hostname` --port=3306 versionshell& mysqladmin -h 'ip for your host ' versionshell& mysqladmin --socket=/tmp/mysql.sock version注意hostname命令使用反引号“`”而非正引号“ '”;这些导致hostname输出(即,当前主机名)被代替进mysqladmin命令中。这是可能造成Can 't connect to local MySQL server错误的一些原因: mysqld不在运行。 你正在使用MIT-pthreads的一个系统上运行。如果正在运行在一个没有原生线程的系统上,mysqld使用 MIT-pthreads 软件包。然而,MIT-pthreads不支持Unix套接字,因此当与服务器连接时,在这样一个系统上,你总是必须明确地指定主机名。试试使用这个命令检查到服务器的连接:shell& mysqladmin -h `hostname` version某人删除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一个cron任务删除了MySQL套接字(例如,一个把旧文件从“/tmp”目录中删除的任务)。你总是可以运行mysqladmin version并且检查mysqladmin正在试图使用的套接字确实存在。在这种情况下,修复方法是删除cron任务而不删除“mysqld.sock 或将套接字放在其他地方。你能用这个命令在MySQL配置时指定一个不同的套接字地点:shell& ./configure --with-unix-socket-path=/path/to/socket你也可以使用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置环境变量MYSQL_UNIX_PORT为套接字路径名。你可用--socket=/path/to/socket选项启动mysqld服务器。如果你改变了服务器的套接字路径名,你也必须通知MySQL客户关于新路径的情况。你可以通过设置环境变量MYSQL_UNIX_PORT为套接字路径名或由提供套接字路径名作为客户的参数做到。你可用这个命令测试套接字:shell& mysqladmin --socket=/path/to/socket version你正在使用 Linux和线程已经死了(核心倾倒了)。在这种情况中,你必须杀死其它mysqld线程(例如在启动一个新的MySQL服务器之前,可以用mysql_zap脚本)。见18.1 如果MySQL总是崩溃怎么办。 如果你得到错误Can 't connect to MySQL server on some_hostname,你可以尝试下列步骤找出问题是什么: 通过执行telnet your-host-name tcp-ip-port-number并且按几次回车来检查服务器是否正常运行。如果有一个MySQL运行在这个端口上,你应该得到一个包含正在运行的MySQL服务器的版本号的应答。如果你得到类似于telnet: Unable to connect to remote host: Connection refused的一个错误,那么没有服务器在使用的端口上运行。 尝试连接本地机器上的mysqld守护进程,并用mysqladmin variables检查mysqld被配置使用的TCP/IP端口(变量port)。 检查你的mysqld服务器没有用--skip-networking选项启动。 不要使用 mysql -h 'localhost '来连接mysql服务器,这样的语句只能在同一台机子上运行,用mysql -h 127.0.0.1 这样的语句来连接服务器。来自:/192286.htm作者:@地址:版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: justwinit 编辑于 15:42
[9/9]北京市海淀区中关村理想国际大厦18层 Address:Sina 18th floor Ideal plaza Zhongguancun Haidain
Beijing 100080, P.R.China
[1/9]深圳南山腾讯大厦8楼 Address:Tencent Plaza High-tech One Road, Middle Zone, High-new Science & Technology Park, Nanshan Distrcit, Shenzhen City, Guangdong Province 518057, P.R. China
[2/9]深圳南山腾讯大厦旁大族激光大厦三楼 Address:Han's Building,Kejizhongyi Avenue, Hi-tech Pack,Nanshan District, Shenzhen City, Guangdong Province 518057, P.R.China
[2012/10-Now]北京海淀区西三环中路10号望海楼B座7层央视国际网络有限公司 Address:Seaview floor, Haidian District No.10,West Sanhuan Road,Beijing 100142, P.R.China20个mysqld进程一个3306端口?
&a href=&///?target=https%3A///read/287316.html%3Fspm%3D.6.16.TTNfgc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&绝大多数人没见过的现象:20个MYSQL进程共用1个3306端口|MySQL 数据库管理与开发&i class=&icon-external&&&/i&&/a&&br&&br&转载过来~~&br&&br&各位客官听我讲,事情的过程是这样的:&br&
10年前,公司有一个中型网站,服务器托管在IDC机房。网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中。但网站还是要继续技术性维护(就是能打开),后来转到我手来维护。我嫌IDC机房繁琐不方便,把网站从IDC机房转到了阿里云。&br&
转移到阿里云和部署都正常,但是部署完成后,发现一个问题,性能很低,MYSQL经常卡死,没道理啊。云服务器比以前的IDC服务器配置好很多,还用的是SSD硬盘,整个WEB和MYSQL配置都一样。(别嘲笑,都是1台服务器,当年也撑起日均60万+IP)&br&
在查性能瓶颈的时候,发现MYSQL进程占用CPU特别高。 我把IDC机房的服务器(迁移到阿里云后保留了一段时间)MYSQL和云服务器的MYSQL进程比较了一下,这一比较,发现一个惊天现象,绝大多数人都没见过的现象。&br&&br&&br&
在常识里,一个MYSQL多进程,只能一个进程占用一个端口。3306端口占用了,其他进程就不能继续使用。而IDC机房服务器有20个MYSQL进程,都用了同一个3306端口!!!
(上图,眼见为实)&br&&br&&img src=&/6620aa82ddfd0b4f816e7bb641c6abdb_b.jpg& data-rawwidth=&995& data-rawheight=&270& class=&origin_image zh-lightbox-thumb& width=&995& data-original=&/6620aa82ddfd0b4f816e7bb641c6abdb_r.jpg&&&br&&img src=&/51d6a8d5a48c115244ed_b.jpg& data-rawwidth=&995& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&995& data-original=&/51d6a8d5a48c115244ed_r.jpg&&&br&&img src=&/9f64cebbbd9d_b.jpg& data-rawwidth=&767& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&767& data-original=&/9f64cebbbd9d_r.jpg&&
转载过来~~各位客官听我讲,事情的过程是这样的:
10年前,公司有一个中型网站,服务器托管在IDC机房。网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中。但网站还是要继续技术性维护(就是能打开),后来转到我手来维护。我嫌IDC机房繁琐不方便,把网站从IDC机房转到了阿里云。
转移到阿里云和部署都正常,但是部署完成后,发现一个问题,性能很低,MYSQL经常卡死,没道理啊。云服务器比以前的IDC服务器配置好很多,还用的是SSD硬盘,整个WEB和MYSQL配置都一样。(别嘲笑,都是1台服务器,当年也撑起日均60万+IP)
在查性能瓶颈的时候,发现MYSQL进程占用CPU特别高。 我把IDC机房的服务器(迁移到阿里云后保留了一段时间)MYSQL和云服务器的MYSQL进程比较了一下,这一比较,发现一个惊天现象,绝大多数人都没见过的现象。
在常识里,一个MYSQL多进程,只能一个进程占用一个端口。3306端口占用了,其他进程就不能继续使用。而IDC机房服务器有20个MYSQL进程,都用了同一个3306端口!!!
(上图,眼见为实)…
按投票排序
所以然后,你到底想问什么?
库的版本没有升级或者索引没有迁好或者环境不同或者php有bug.
先监听,再fork,就可以共享一个监听的socket,看上去就是很多进程用了同一个端口。不过我也不知道怎么配置。不过,mysql是多线程的,所以单进程未必性能比多进程差,如果占不满所有的核,一定是你哪里配置出问题了,比如说没有配置成innodb,比如说表结构有问题等等。
不少人都没认真看,我是正常生产环境故意这样配置的,绝不是什么BUG错误。为什么这样配置,是性能高! 不相当于20个MYSQL的性能,几个还是有的。
我现在的问题是 不知道怎么实现,以前的技术都失踪了。我想掌握这样的技术,以应用到我现在的平台上去。
那些进程是fork出来的
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 如何打开3306端口 的文章

 

随机推荐