mysql之mysql.sock文件_灬紫荆灬的博客-程序员秘密_mysql mysql.sock

技术标签: MySQL  

Mysql有两种连接方式:

(1)TCP/IP
(2)socket
对mysql.sock来说,其作用是 程序与mysqlserver处于同一台机器,发起本地连接时可用。
例如你无须定义连接host的具体IP得,只要为空或localhost就可以。
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。
因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。


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,你可以通过将下列行加入/etc/my.cnf中,将套接字文件移到那里:

[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 version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host ' version
shell> 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 这样的语句来连接服务器。


补充资料

在网上搜索看了一大堆,都没有提供明显的解决办法。我气愤之下把mysql删了。然后用mysql的源码包重装,重装过后,我用rpm工具查询不了它的安装包,但命令mysql有。同样也启动不了,亦是找不到mysql.sock文件。是不是装了mysql过后要作一些配置?怎么配置?rpm工具都找不到mysql,如果我要删除的话,又该怎么做?很奇怪,我用源码包装了过后,再用rpm包装了一次,它们没有冲突,不过都是启动不了。这又涉及到什么问题?
最佳答案 ( 回答者:  nx202631 )
连接MySQL找不到mysql.sock文件的解决办法

运行程序可能会报错:Can’t connect to local MySQL Server through socket ‘/tmp/mysql.sock’

这个错误的提示是说,不能通过’/tmp/mysql.sock’连接到服务器。Mysql.sock是创建与mysqld服务器相关的MySQL通信端点所使用的套接字。而PHP标准配置正是通过’/tmp/mysql.sock’来连接数据库,可能是一些mysql的安装方法将mysql.sock放到了别的地方,可以通过修改/etc/mysql/my.cnf文件(或者/etc/my.conf文件,和mysql安装的方法有关,该配置文件的路径可能会有所不同)来修改它,打开文件可以看到如下的语句:

[mysqld]

Socket = /var/lib/mysql/mysql.sock

   说明mysqld.sock文件放在了/var/lib/mysql/文件夹下,所以不能在/tmp路径下找到该文件,通过做一个链接文件就可以解决这个问题:

   您可以在命令行下手动输入如下命令:

ln -s /var/lib/mysqld/mysqld.sock /tmp/mysql.sock

   修改完之后,程序就可以正常启动了。

   如果还是不能启动的话,可能是由于MySQL服务器没有打开,如果MySQL服务器没有打开的话,在/var/lib/mysql/目录下就不会有mysql.sock这个文件,所以即使做了链接文件就没有用,因为它根本找不到/var/lib/mysql/mysql.sock文件。所以使用命令开启MySQL服务器:

$service mysqld start

    如果想让MySQL服务器在每次计算机重启时启动,键入如下命令(root用户身份):

$chkconfig mysqld on

MySQL下mysql.sock丢失问题的解决[ubuntu, linux, mysqld.sock]

MySQL下mysql.sock丢失丢失的原因一般是因为配置文件不一致的原因,mysqld 错误启动,mysqld_safe 会清除一次mysql.sock 。解决方法是:

判断一般人解决故障时没有切换到mysql用户,造成权限有问题,无法创建mysql授权表,所以也就无法创建/tmp/mysql.sock 和hostname.pid文件。因此,总结解决方法如下(注: 使用root也可以):

#su mysql

$/usr/local/bin/mysql_install_db //重建授权表

$/usr/local/bin/mysqld_safe &

$/usr/local/bin/mysql //测试

mysq>bye;

$

文件已经解决,重新生成新的 /tmp/mysql.sock 和 hostname.pid

$su root

 

关于Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的问题

找不到mysql socket的问题,我最近碰到了好多次

重装系统以前,我的mysql,apache,php都是自己编译安装的,当时并没有碰到这些问题,

重装系统以后,我的mysql是通过yum安装的,apache1.37和php5.2是自己编译安装的,出现了这个问题

首先是mysqld启动不了,

我通过vim /etc/my.cnf,修改了[mysqld]选项下面的socket的值

socket=/var/lib/mysql/mysql.sock

ok,mysqld可以启动了

接下来,是mysql启动不了,同样,vim /etc/my.cnf,添加了如下脚本:

[mysql]

socket=/var/lib/mysql/mysql.sock

然后,mysqladmin启动不了,还是一样,在[mysqladmin]下面socket值设置为同样的路径

ok,可以启动了

最后,用php连接的时候,又出现这个问题了

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

我首先想到的是,在/etc/php.ini修改mysql.default_socket的值,在这个文件中,关于mysql.default_socket的值的说明是这样的,

; Default socket name for local MySQL connects.  If empty, uses the built-in MySQL defaults.

这个值一开始是空的,也就是说,如果我们不主动去修改的话,php将会使用内建在mysql中的默认值

于是,我修改了这个值,设置为:

mysql.default_socket=/var/lib/mysql/mysql.sock

然后我重新启动apache,结果无效;reboot系统,结果无效

我火大了,php就非得去连接/tmp/mysql.sock,可是我的系统里面就是没有这个路径下的这个文件,那我就给你链接一个,于是我做了下面的操作,

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

重新打开我的php页面,ok,这下能连接到数据库了。

就这样,我把这个问题解决了,可是我还是有点迷糊,为什么一定要去找/tmp/mysql.sock这个文件,是不是一开始我就给它ln一个链接就可以解决?这个mysql.sock到底是用来做什么的?于是我就产生了看看这个文件内容的想法,

cat /var/lib/mysql/mysql.sock

提示我,cat: /var/lib/mysql/mysql.sock: 没有那个设备或地址

less /var/lib/mysql/mysql.sock

/var/lib/mysql/mysql.sock is not a regular file (use -f to see it)

我强行查看!

less -f /var/lib/mysql/mysql.sock

/var/lib/mysql/mysql.sock: 没有那个设备或地址

~~

vim /var/lib/mysql/mysql.sock

提示权限不足,我是root用户耶,还提示权限不足,奇怪了

~~~~

ll /var/lib/mysql/mysql.sock

看到的属性是:

srwxrwxrwx 1 mysql mysql 0 11-21 14:39 /var/lib/mysql/mysql.sock

这个属性引起了我的注意,档案类型标志是s,还真没去了解过这样的类型,到鸟哥的私房菜去找了一下,原来,这个是资料接口档,用我们大陆说的习惯应该是套接字文件(sockets),这种文件一般用在网络上的资料套接,mysqld守护进程生成了这个文件,其他与mysql相关的程序想使用mysql,估计就是通过这个文件了。

这种特殊文件即使是最高权限的root用户,也是不能查看不能编辑的,有点像档案标志是p的管道文件。

MySQL中mysql.sock找不到的解决方法

链接MySQL时,报错:


cant connect to mysql server through socket '/tmp/mysql.sock'


本质上这个问题是mysql.sock在其他路径导致的。

有文章说可以通过修改my.cnf的socket路径,但个人尝试后发现,这样可能导致mysql的服务起不来。

笔者认为,还是用软连接比较安全,方法如下:


1、找到mysql.sock

使用 find / -name mysql.sock进行寻找。如果找不到,那么说明该socket可能不是这个名字。

因此,需要先找到my.cnf,输入:


find / -name my.cnf

vim /<your path to my.cnf>/my.cnf


在里面找到该sock的名字。例如笔者的就是mysqld.sock.

然后通过 find 定位,找到sock的路径。


2、软链接

把sock软链接到目标路径。以笔者的问题为例,就是:

ln -s /run/mysqld/mysqld.sock /tmp/mysql.sock


Problem Solved !

Happy Coding ~


1、在编译安装 mysql 的时候,会将mysql的配置文件复制到/etc/my.conf中:
 
[[email protected] mysql]# cp support-files/my-small.cnf /etc/my.cnf 将配置模板复制到mysql的配置文件
cp:是否覆盖"/etc/my.cnf"? y
 
2、可以通过查看/etc/my.conf查看mysql.sock的目录位置:
 

         
          
  1. [root @mysql ~]# cat /etc/my.cnf
  2. [mysqld]
  3. port = 3306
  4. socket = /tmp/mysql.sock
  5. skip-external-locking
  6. key_buffer_size = 16K
  7. max_allowed_packet = 1M
  8. table_open_cache = 4
  9. sort_buffer_size = 64K
  10. read_buffer_size = 256K
  11. read_rnd_buffer_size = 256K
  12. net_buffer_length = 2K
  13. thread_stack = 128K
3、在登录mysql的时候可以加上mysql.sock:
 

            
             
  1. [root @mysql ~]# mysql -u root -poldboy123 -S /tmp/mysql.sock
  2. Welcome to the MySQL monitor. Commands end with ; or \g.
  3. Your MySQL connection id is 5
  4. Server version: 5.5. 32 MySQL Community Server (GPL)
  5. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  6. Oracle is a registered trademark of Oracle Corporation and/or its
  7. affiliates. Other names may be trademarks of their respective
  8. owners.
  9. Type 'help; ' or '\h ' for help. Type '\c ' to clear the current input statement.
  10. mysql>
 
Mysql有两种连接方式: 
 
(1),TCP/IP 
 
(2),socket 
 
对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用。 
 
例如你无须定义连接host的具体IP地址,只要为空或localhost就可以。 
 
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。 
 
因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。 
 
那么对于外部连接,必须是要变更port才能连接的。 
 
linux下安装mysql连接的时候经常回提示说找不到mysql.sock文件,解决办法很简单: 
 
如果是新安装的mysql,提示找不到文件,就搜索下,指定正确的位置。 
 
如果mysql.sock文件误删的话,就需要重启mysql服务,如果重启成功的话会在datadir目录下面生成mysql.sock 到时候指定即可。 
 
如果还不行就选择用TCP连接方式连接就行了,其实windows下还支持管道连接方式。


启动或重启mysql不成功,提示:Another MySQL daemon already running with the same unix socket
出现此问题往往是上次mysql意外关闭造成的.最简便的解决方法就是找到mysql.sock文件删除掉,再重新启动mysqld即可成功.

在国外网站发现的解决方法。

原因多个MySQL进程使用了同一个socket。

两个方法解决:

第一个是立即关机 使用命令 shutdown -h now 关机,关机后在启动,进程就停止了。

第二个直接把mysql.sock文件改名即可。也可以删除,推荐改名。

然后就可以启动mysql了。


下面是国外原文


To prevent the problem from occurring, you must perform a graceful shutdown of the server from the command line rather than powering off the server.

# shutdown -h now


This will stop the running services before powering down the machine.

Based on Centos, an additional method for getting it back up again when you run into this problem is to move mysql.sock:

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

Restarting the service creates a new entry called mqsql.sock



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43279032/article/details/107939081

智能推荐

nginx自定义404、500页面更改或关闭favicon.ico_shardy1986的博客-程序员秘密

一、自定义错误页面1、在nginx配置文件nginx.conf的http中添加这样一句话,表明要使用自定义的错误提示页面:fastcgi_intercept_errors on; #表明使用自定义错误提示2、指定的server中配合,配置404.html或者500.html页面fastcgi_intercept_errors on;server { listen ...

自动驾驶汽车电子电气架构技术开发_SAUTOMOTIVE的博客-程序员秘密_自动驾驶电气架构

本文由李春,聂石启,司炎鑫,刘明春联合创作摘要对汽车电子电气架构进行概念综述;分析“深蓝”车型的自动驾驶系统框架结构和电子电气架构;总结归纳汽车行业电子电气架构的演进趋势,并结合汽车向智能化、网联化发展的趋势,对未来汽车电子电气架构进行展望。随着人工智能、计算机、5G、物联网、大数据、区块链等新一代技术与汽车产业的深度融合,自动驾驶汽车的重要性日益凸显,正逐渐成为全球汽车产业发展的战略制高点,世界各国正在加速布局。当前,智能化、网联化、电动化和共享化是汽车技术演进的重要特征和产业发展趋势

汇编入门基础_Ruoten的博客-程序员秘密_汇编入门

1.什么是汇编语言?汇编语言就是低级语言,直接描述/控制 CPU 的运行,我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。「汇编语言是二进制指令的文本形式」

【HANA系列】SAP HANA SLT 在表中隐藏字段并传入HANA的方法_ARICK2014的博客-程序员秘密

公众号:SAP Technical本文作者:matinal原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:【HANA系列】SAP HANA SLT在表中隐藏字段并传入HANA的方法前言部分大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。正文部分这篇本来是想大概讲一些过程,但是后来有整理了一下,所...

胡子决定编程语言运势[zt]_weixin_34006965的博客-程序员秘密

胡子决定编程语言运势[zt] 原作发表于《程序员》杂志2005年第一期 素材、策划:孟岩 执笔:方茜 (取材自: http://khason.biz/blog/2004/12/why-microsoft-can-blow-off-with-c.html) C#会前途黯淡,只因大胡子惹的祸?!有点耸人听闻吧。可是色列软件工程师 T...

python websocket库 安装_Python WebSocket_weixin_39928736的博客-程序员秘密

安装pip install websocket-client先来看一下,长连接调用方式:ws = websocket.WebSocketApp("ws://echo.websocket.org/",on_message = on_message,on_error = on_error,on_close = on_close)ws.on_open = on_openws.run_forever()长...

随便推点

我们到底该如何学习《数据结构与算法》?_愚公要移山的博客-程序员秘密

本文出自《愚公要移山》个人博客中,地址www.javachat.cc收录于《手牵手一起学习数据结构与算法》专栏前言:我们到底该不该学习算法与数据结构? 1、真的应该学习这个问题本身就不是个问题,所有人都在强调数据结构与算法比较重要,但是好像平时也没用到,无法直观的去感受它的重要性,于是把学习重心放在了常见的哪些框架身上,似乎只要熟悉了哪些框架的API,编程就会所向披靡。我举一个我自身的例子,我本科期间想做一个APP,主要是在线预约的功能,既然是在线预约,用户多了之后那就需要排队,当时也不管三.

自动驾驶系统中视觉感知模块的安全测试_SAUTOMOTIVE的博客-程序员秘密

本文由吴昊,王浩,苏醒,李明昊,许封元,仲盛联合创作摘要近年来,基于深度学习的视觉感知技术的发展极大地促进了车联网领域中自动驾驶的繁荣,然而自动驾驶系统的安全问题频出引发了人们对自动驾驶未来的担忧.由于深度学习系统的行为缺乏可解释性,测试基于深度学习的自动驾驶系统的安全性极具挑战性.目前已有针对自动驾驶场景的安全性测试工作被提出,但这些方法在测试场景生成、安全问题检测和安全问题解释等方面仍存在不足之处.针对基于视觉感知的自动驾驶系统,设计开发了一种场景驱动的、可解释强的、运行高效的安全性测试系统

July 28th 2017 Week 30th Friday_dflkg8956的博客-程序员秘密

If equal affection cannot be, let the more loving be me.如果没有相等的爱,那就让我爱多一点吧。There is seldom equal affection.If you want to be loved deeply, you ought to give more love to your lover first....

UNIX网络编程----非阻塞式I/O(十六)_鱼思故渊的博客-程序员秘密

UNIX网络编程-----非阻塞式I/O一、概述套接字的默认状态是阻塞的。这就意味着放发出一个不能立即完成的套接字调用时,其进程被投入睡眠,等待相应操作完成,可能阻塞的套接字调用可分为以下四类:1)             输入操作:包括read、readv、readmsg、readfrom、recv共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些输入函数之一,而且

图文解释什么是敏捷开发_夜光小兔纸的博客-程序员秘密_敏捷开发 游戏

精益创业的思想已经广为流传,MVP也已成为一个热门术语,但是MVP (Minimum Viable Product,最小可行产品) 这个术语本身却难以把握。到底什么是最小可行产品?仁者见仁、智者见智,这就造成了很多的困惑和担忧。在本文中,Henrik以4个真实而生动的产品开发案例揭示了MVP的本质——最早可体验的/可使用的/令人喜爱的产品。几年前,我画了这张图,并开始在介绍敏捷和精益开发时使用它:从那时起,这张图就像病毒一样传播!到处都出现了,在文章中出现,在演讲中出现,甚至在书中出现(Jeff Pa

常用视频格式与视频编解码标准介绍_Manaasdfasdf的博客-程序员秘密

【常用视频格式】细细算起来,视频文件可以分成两大类:其一是影像文件,比如说常见的VCD便是一例。其二是流式视频文件,这是随着国际互联网的发展而诞生的后起视频之秀,比如说在线实况转播,就是构架在流式视频技术之上的。流式视频(Streaming Video)采用一种“边传边播”的方法,即先从服务器上下载一部分视频文件,形成视频流缓冲区后实时播放,同时继续下载,为接下来的播放做好准备。这种“边传

推荐文章

热门文章

相关标签