<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[偶尔遇到]找不到mysql.sock的出现原因及解决方案和mysql 默认mysql.sock位置默认问题探讨]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 06 Aug 2009 08:42:04 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	php -i&#124;grep sock <br/>mysqli.default_socket =&gt; /var/run/myslqd/mysqld.sock =&gt; /var/run/myslqd/mysqld.sock<br/>pdo_mysql.default_socket =&gt; /var/run/myslqd/mysqld.sock =&gt; /var/run/myslqd/mysqld.sock<br/><br/>cat /usr/local/php/etc/php.ini &#124;grep mysqld.sock<br/>pdo_mysql.default_socket=/var/run/myslqd/mysqld.sock<br/>mysqli.default_socket = /var/run/myslqd/mysqld.sock<br/><br/>背景：（1）偶尔会出现mysql的server和mysql的client默认的socke文件不在一个地方，我们用mysql时会出现一个找不到mysql.sock的情况。<br/>（2）因非正常关机出现：/tmp/mysql.sock 不见了，找不到了，如何连接上去的问题？（其他机器通过tcp可以的）<br/>先放个命令在mysql运行机上链接的方法：<br/><textarea name="code" class="C" rows="15" cols="100">
mysql --protocol=TCP -uroot -p -P3306 -hlocalhost
Enter password: 
Welcome to the MySQL monitor.&nbsp;&nbsp;Commands end with ; or &#92;g.
Your MySQL connection id is 65744
Server version: 5.6.13-log Source distribution
Copyright (c) 2000, 2013, 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
owners.
Type &#039;help;&#039; or &#039;&#92;h&#039; for help. Type &#039;&#92;c&#039; to clear the current input statement.
mysql&gt; &#92;q
</textarea><br/>原因一：<br/>linux系统一次不正常关机后，连接mysql的时候系统提示不能通过/tmp/mysql.sock文件进行连接,或者非正确关闭时，导致mysql.sock文件再次丢失，当你在次启动时出现如下错误，connect mysqld faild ,/tmp/mysql.sock can&#039;t find<br/>mysql.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就消失。<br/>原因二：<br/>连接localhost通常通过一个Unix域套接字文件进行，一般是/tmp/mysql.sock。如果套接字文件被删除了，本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。<br/>如果你因为丢失套接字文件而不能连接，你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。<br/><br/>解决办法，实时上，在/etc/init.d 下有个连接启动脚本 mysqld ,我们启动时可以直接用它 service mysqld start &#124;stop<br/>来自：http://blog.csdn.net/imzoer/article/details/8444400<br/>实践情况如下：<br/>[root@localhost init.d]# mysqladmin -u root -hlocalhost -p shutdown<br/>Enter password: <br/>mysqladmin: connect to server at &#039;localhost&#039; failed<br/>error: &#039;Can&#039;t connect to local MySQL server through socket &#039;/tmp/mysqld.sock&#039; (2)&#039;<br/>Check that mysqld is running and that the socket: &#039;/tmp/mysqld.sock&#039; exists!<br/>直接干死了：<br/>pkill -9 mysql<br/>重启：<br/>/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<br/><br/>————————————————上面这种太粗暴，实践操作Ok如下：—————————————————————————<br/>[root@localhost init.d]# service mysql stop<br/>Shutting down MySQL.....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&nbsp;&nbsp;OK&nbsp;&nbsp;]<br/>[root@localhost init.d]# service mysql start<br/>Starting MySQL...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;OK&nbsp;&nbsp;]<br/><br/>启动原理：<br/>/etc/init.d/mysql<br/>里写明了basedir及datadir，这块datadir很重要，启动时起了很大的作用，在安装时就定下来不改动最好了：<br/><textarea name="code" class="php" rows="15" cols="100">
basedir=/usr/local/mysql
datadir=/data/db/mysql
启动、停止、重启动脚本简述：
&nbsp;&nbsp;&#039;start&#039;)
&nbsp;&nbsp;&nbsp;&nbsp;# Start daemon

&nbsp;&nbsp;&nbsp;&nbsp;# Safeguard (relative paths, core dumps..)
&nbsp;&nbsp;&nbsp;&nbsp;cd $basedir

&nbsp;&nbsp;&nbsp;&nbsp;echo $echo_n &quot;Starting MySQL&quot;
&nbsp;&nbsp;&nbsp;&nbsp;if test -x $bindir/mysqld_safe
&nbsp;&nbsp;&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Give extra arguments to mysqld with the my.cnf file. This script
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# may be overwritten at next upgrade.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$bindir/mysqld_safe --datadir=&quot;$datadir&quot; --pid-file=&quot;$mysqld_pid_file_path&quot; $other_args &gt;/dev/null 2&gt;&amp;1 &amp;

 &#039;stop&#039;)
&nbsp;&nbsp;&nbsp;&nbsp;# Stop daemon. We use a signal here to avoid having to know the
&nbsp;&nbsp;&nbsp;&nbsp;# root password.

&nbsp;&nbsp;&nbsp;&nbsp;if test -s &quot;$mysqld_pid_file_path&quot;
&nbsp;&nbsp;&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysqld_pid=`cat &quot;$mysqld_pid_file_path&quot;`

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (kill -0 $mysqld_pid 2&gt;/dev/null)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $echo_n &quot;Shutting down MySQL&quot;


restart原理：先stop，再start：
&nbsp;&nbsp;&#039;restart&#039;)
&nbsp;&nbsp;&nbsp;&nbsp;# Stop the service and regardless of whether it was
&nbsp;&nbsp;&nbsp;&nbsp;# running or not, start it again.
&nbsp;&nbsp;&nbsp;&nbsp;if $0 stop&nbsp;&nbsp;$other_args; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$0 start $other_args
</textarea><br/>——————————————————————————————————————————————————————————<br/>出现以下的信息:<br/>ERROR 2002 (HY000): Can&#039;t connect to local MySQL server through socket &#039;/tmp/mysql.sock&#039; (2)<br/>如果还不行.就先<br/>#ps -aux&#124;grep mysql<br/>找mysql的进程里的那个socket位置，如：<br/><textarea name="code" class="php" rows="15" cols="100">
/usr/local/mysql/libexec/mysqld --defaults-file=/data/db/mysql/my.cnf --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
</textarea><br/>方法一：<br/>mysql --port=3306 -uroot -p123qwe*** -S /var/lib/mysql/mysql.sock<br/>方法二：<br/>mysql --socket=/var/lib/mysql/mysql.sock --port=3306 -uroot -p123qwe***<br/>方法三：<br/>ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock<br/><br/>我的startmysql.sh :<br/><div class="code"><br/>/usr/local/webserver/mysql/libexec/mysqld --defaults-file=/data0/mysql/3306/my.cnf --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=3306<br/></div><br/>my.cnf位置：<br/><div class="code"><br/>--defaults-file=/data0/mysql/3306/my.cnf<br/>vi /data0/mysql/3306/my.cnf<br/></div><br/>里面都是关于启动Mysql的一些东西。<br/><br/>vi /etc/my.cnf<br/><div class="code"><br/>&#91;mysqld&#93;<br/>datadir=/var/lib/mysql<br/>socket=/var/lib/mysql/mysql.sock<br/>user=mysql<br/># Default to using old password format for compatibility with mysql 3.x<br/># clients (those using the mysqlclient10 compatibility package).<br/>old_passwords=1<br/><br/>&#91;mysqld_safe&#93;<br/>log-error=/var/log/mysqld.log<br/>pid-file=/var/run/mysqld/mysqld.pid<br/></div><br/><div class="code"><br/>&#91;root@localhost Lang-zh_cnModule-CE-5.1.0&#93;# mysql<br/>ERROR 2002 (HY000): Can&#039;t connect to local MySQL server through socket &#039;/var/lib/mysql/mysql.sock&#039; (2)<br/></div><br/><br/>默认去连接的/var/lib/mysql/mysql.sock 这个文件。<br/>而我们的启动配置文件在：--socket=/tmp/mysql.sock<br/>两个配置文件：启动运行的时候是在/data0/mysql/3306/my.cnf 的mysql.sock在位置/tmp/mysql.sock，而/etc/my.cnf 的mysql.sock在位置/var/lib/mysql/mysql.sock 刚好和在终端运行mysql出现在错误相同：Can&#039;t connect to local MySQL server through socket &#039;/var/lib/mysql/mysql.sock&#039; (2)<br/><br/>my.cnf是mysql的启动配置文件。所以为了使改动生效必须重启mysql！<br/><br/>参考：http://www.linuxidc.com/Linux/2008-06/13675.htm<br/><br/><br/>——————————Add Time:2014-08-22——————————<br/>mysql连接不上，mysqld.sock丢失<br/>如果你指定localhost 作为一个主机名【也就是你在本机上连接本季的mysql服务】， mysqladmin 默认使用Unix套接字文件连接，而不是TCP/IP。<br/><br/>从MySQL 4.1 开始，通过--protocol= TCP &#124;SOCKET &#124; PIPE &#124; MEMORY&#125;选项，你可以显示地指定连接协议，举例如下：<br/><br/>socket 连接：<br/>[zzz@zzz mysql]$ mysql -uroot<br/>ERROR 2002 (HY000): Can&#039;t connect to local MySQL server through socket<br/>&#039;/home/zzx/mysql/mysql.sock&#039; (2)<br/>tcp 连接：<br/>[zzz@zzz mysql]$ mysql --protocol=TCP -uroot -p -P3307 -hlocalhost<br/>Enter password:<br/>Welcome to the MySQL monitor. Commands end with ; or g.<br/>Your MySQL connection id is 73 to server version: 5.0.15-standard<br/>Type &#039;help;&#039; or &#039;h&#039; for help. Type &#039;c&#039; to clear the buffer.<br/>mysql&gt;<br/>==========》如果mysql服务器还没启动，由于mysqld.sock丢失启动不了，怎么办《===============<br/><br/>==========》下面是一个由于更改主机名导致的找不到sock.文件《===============<br/><br/>linux系统一次不正常关机后，连接mysql的时候系统提示不能通过/tmp/mysql.sock文件进行连接,或者非正确关闭时，导致mysql.sock文件再次丢失，当你在次启动时出现如下错误，connect mysqld faild ,/tmp/mysql.sock can&#039;t find<br/>mysql.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就消失。<br/>解决办法，实时上，在/etc/init.d 下有个连接启动脚本 mysqld ,我们启动时可以直接用它 service mysqld start &#124;stop<br/>来自：http://blog.csdn.net/imzoer/article/details/8444400<br/><br/><br/>找不到mysql.sock，mysql.sock丢失问题解决方法？<br/>Can &#039;t connect to local MySQL server through socket &#039;/var/lib/mysql/mysql.sock &#039;(2) &quot;;<br/><br/>是你的mysql.sock 文件不存在了，<br/>可能是被你不小心删除了，<br/><br/>连接localhost通常通过一个Unix域套接字文件进行，一般是/tmp/mysql.sock。如果套接字文件被删除了，本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。<br/><br/>如果你因为丢失套接字文件而不能连接，你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。<br/>另一个解决办法是你现在不能用套接字建立连接因为它不见了，你可以建立一个TCP/IP连接，例如，如果服务器主机是192.168.0.1，你可以这样连接：<br/><br/>%mysql -u root -h 192.168.0.1 -p<br/>%mysqladmin -u root -h 192.168.0.1 -p shutdown<br/><br/>如果套接字文件被一个cron任务删除，问题将重复出现，除非你修改cron任务或使用一个或使用一个不同的套接字文件，你可以使用全局选项文件指定一个不同的套接字，例如，如果数据目录是/usr/local/var，你可以通过将下列行加入/etc/my.cnf中，将套接字文件移到那里：<br/><br/>[mysqld]<br/>socket=/usr/local/var/mysql.sock<br/>[client]<br/>socket=/usr/local/var/mysql.sock<br/>对服务器和客户均指定路径名，使得它们都使用同一个套接字文件。如果你只为服务器设置路径，客户程序将仍然期望在原位置执行套接字，在修改后重启服务器，使它在新位置创建套接字<br/><br/><br/>=============================================<br/>怎样保护“/tmp/mysql.sock ”不被删除<br/><br/>如果你有这个问题，事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”，在Unix的大多数版本上，你能通过为其设置sticky（t）位来保护你的“/tmp”文件系统。作为root登录并且做下列事情：<br/><br/>shell&gt; chmod +t /tmp<br/><br/>这将保护你的“/tmp”文件系统使得文件仅能由他们的所有者或超级用户(root)删除。<br/><br/>你能执行ls -ld /tmp检查sticky位是否被设置，如果最后一位许可位是t，该位被设置了。<br/>=============================================<br/><br/>一个MySQL客户可以两种不同的方式连接mysqld服务器：Unix套接字，它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接；或TCP/IP，它通过一个端口号连接。Unix套接字比TCP/IP更快，但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的主机名localhost，使用Unix套接字。<br/><br/>错误(2002）Can &#039;t connect to ...通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时，你正在使用一个错误的套接字文件或TCP/IP端口。 <br/><br/>由检查(使用ps)在你的服务器上有一个名为mysqld的进程启动！如果没有任何mysqld过程，你应该启动一个。<br/><br/>如果一个mysqld过程正在运行，你可以通过尝试这些不同的连接来检查服务器(当然，端口号和套接字路径名可能在你的安装中是不同的)：<br/><br/>shell&gt; mysqladmin version<br/>shell&gt; mysqladmin variables<br/>shell&gt; mysqladmin -h `hostname` version variables<br/>shell&gt; mysqladmin -h `hostname` --port=3306 version<br/>shell&gt; mysqladmin -h &#039;ip for your host &#039; version<br/>shell&gt; mysqladmin --socket=/tmp/mysql.sock version<br/>注意hostname命令使用反引号“`”而非正引号“ &#039;”；这些导致hostname输出（即，当前主机名)被代替进mysqladmin命令中。<br/><br/>这是可能造成Can &#039;t connect to local MySQL server错误的一些原因： <br/><br/>mysqld不在运行。 <br/>你正在使用MIT-pthreads的一个系统上运行。如果正在运行在一个没有原生线程的系统上，mysqld使用 MIT-pthreads 软件包。然而，MIT-pthreads不支持Unix套接字，因此当与服务器连接时，在这样一个系统上，你总是必须明确地指定主机名。试试使用这个命令检查到服务器的连接：<br/>shell&gt; mysqladmin -h `hostname` version<br/>某人删除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一个cron任务删除了MySQL套接字(例如，一个把旧文件从“/tmp”目录中删除的任务)。你总是可以运行mysqladmin version并且检查mysqladmin正在试图使用的套接字确实存在。在这种情况下，修复方法是删除cron任务而不删除“mysqld.sock 或将套接字放在其他地方。你能用这个命令在MySQL配置时指定一个不同的套接字地点：<br/>shell&gt; ./configure --with-unix-socket-path=/path/to/socket<br/>你也可以使用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置环境变量MYSQL_UNIX_PORT为套接字路径名。你可用--socket=/path/to/socket选项启动mysqld服务器。如果你改变了服务器的套接字路径名，你也必须通知MySQL客户关于新路径的情况。你可以通过设置环境变量MYSQL_UNIX_PORT为套接字路径名或由提供套接字路径名作为客户的参数做到。你可用这个命令测试套接字：<br/><br/>shell&gt; mysqladmin --socket=/path/to/socket version<br/>你正在使用 Linux和线程已经死了(核心倾倒了)。在这种情况中，你必须杀死其它mysqld线程(例如在启动一个新的MySQL服务器之前，可以用mysql_zap脚本）。见18.1 如果MySQL总是崩溃怎么办。 <br/>如果你得到错误Can &#039;t connect to MySQL server on some_hostname，你可以尝试下列步骤找出问题是什么： <br/><br/>通过执行telnet your-host-name tcp-ip-port-number并且按几次回车来检查服务器是否正常运行。如果有一个MySQL运行在这个端口上，你应该得到一个包含正在运行的MySQL服务器的版本号的应答。如果你得到类似于telnet: Unable to connect to remote host: Connection refused的一个错误，那么没有服务器在使用的端口上运行。 <br/>尝试连接本地机器上的mysqld守护进程，并用mysqladmin variables检查mysqld被配置使用的TCP/IP端口(变量port)。 <br/>检查你的mysqld服务器没有用--skip-networking选项启动。 <br/><br/><br/>不要使用 mysql -h &#039;localhost &#039;来连接mysql服务器，这样的语句只能在同一台机子上运行，用mysql -h 127.0.0.1 这样的语句来连接服务器。<br/>来自：http://blog.knowsky.com/192286.htm
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [偶尔遇到]找不到mysql.sock的出现原因及解决方案和mysql 默认mysql.sock位置默认问题探讨]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>