ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

本文介绍了使用“mysql”等命令管理数据库时,服务器抛出“ERROR 2002 (HY000): Can't connect to local MySQL server through socket”错误的解决方法。通过三种连接方式还原错误现场,解析了错误产生的原因,介绍了修复故障前的准备工作,并给出了两种故障解决方法。

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯!

有时候,当我们使用“mysql”、“mysqladmin”、“mysqldump”等命令管理数据库时,服务器抛出类似如下错误:

 

一、错误现场还原:


下面我们通过三种方式来连接,然后观察提示的错误信息:
 

  • 1、直接使用“mysql”命令,不带主机名参数;
  • 2、使用带了主机名“localhost”参数的“mysql -h localhost”命令;
  • 3、使用带了主机名“127.0.0.1”参数的“mysql -h 127.0.0.1”命令。

 

1、[root@lam7 opt]# mysql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)


2、[root@lam7 opt]# mysql -h localhost

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)


[root@lam7 opt]# mysql -h 127.0.0.1  (用此方法是可以进入到MariaDB ,可以进入之后忽略此问题)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 244
Server version: 10.1.19-MariaDB Source distribution

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

3、[root@lam7 opt]# mysql -h 127.0.0.1 (PS:有些用户也会出现此问题)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

通过上面实验可以看出,前面两种方式都能产生标题中的错误,而第三种方式连接是不会产生标题中的错误的(第三种方式这里产生的是由于密码问题拒绝访问的错误信息)

 

二、错误产生原因解析:


   这是由于我们连接数据库使用的主机名参数为“localhost”,或者未使用主机名参数、服务器默认使用“localhost”做为主机名。 使用主机名参数为“localhost”连接mysql服务端时,mysql客户端会认为是连接本机,所以会尝试以socket文件方式进行连接(socket文件连接方式,比“ip:端口”方式效率更高),这时根据配置文件“/etc/mysql.cnf”的路径,未找到相应的socket文件,就会引发此错误。


三、修复故障前准备:



1、看mysql服务是否在运行:


  由于“socket”文件是由mysql服务运行时创建的,如果提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”,找不到“socket”文件,我们首先要确认的是mysql服务是否正在运行。

#1:端口是否打开

[root@lam7 opt]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 57436 mysql 17u IPv6 160456 0t0 TCP *:mysql (LISTEN)

#2:mysqld服务是否正在运行(小七这边用的是centos7,所以会提示使用“/bin/systemctl status mysqld.service”)

[root@lam7 opt]# service mysqld status
Redirecting to /bin/systemctl status mysqld.service
mysqld.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)

#3:如果mariaDB,同样方法查服务是否正在运行:

[root@lam7 opt]# service mariadb status
Redirecting to /bin/systemctl status mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled)
Active: inactive (dead)

#4mysqld服务是否正在运行(此现状是mysql服务正常运行)

[root@lam7 opt]# service mariadb status
Redirecting to /bin/systemctl status mariadb.service
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2016-11-22 20:09:01 CST; 10min ago

2、确定“socket”文件正确位置:


  确定mysql服务正常运行后,产生此错误的原因只剩下“socket”文件路径不正确了,我们可以使用“find”命令或者“lsof”命令来确定socket文件的正确路径:

[root@lam7 opt]# lsof -c mysqld|grep sock$
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
mysqld 57436 mysql 18u unix 0xffff88000b55f440 0t0 160457 /opt/lampp/var/mysql/mysql.sock

[root@lam7 opt]# find / -name '*.sock'
/storage/db/mysql/mysql.sock

 

四、故障解决方法:


解决方案一:


  修改“/etc/my.cnf”配置文件,在/etc/php.ini文件中"[MySQL]"项下找到"mysql.default_socket",并设置其值指向正确的mysql服务socket文件即可,  在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下: 

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
...省略n行

[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

修改完后,重启mysqld服务,即可解决此问题。

 

解决方案二:(夜白是用此方法解决的问题)


  使用“ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock”命令,将正确的socket文件位置,软链接到提示错误的socket文件路径位置,即可解决此问题:

[root@lam7 opt]# ls /var/lib/mysql/mysql.sock
ls: 无法访问/var/lib/mysql/mysql.sock: 没有那个文件或目录

[root@lam7 opt]# ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root@lam7 opt]# ls /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock

这边讲述了mysql提供的“mysql”、“mysqldump”、“mysqladmin”等命令提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”的解决方法,如果需要解决“php”、“perl”、“python”等脚本语言提示此错误的问题

版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

 

转载来源:https://yq.aliyun.com/articles/606781

<think>首先,用户的问题是:MySQL ERROR 2002 Can't connect to local server through socket '/var/run/mysqld/mysqld.sock' solution。这是关于MySQL连接错误的,具体是无法通过指定的socket文件连接到本地MySQL服务器。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式,但在这个上下文中,可能没有数学表达式,所以我不需要担心。 - 独立公式必须使用$$...$$格式,但同样,这里可能没有复杂的数学。 - LaTeX语法正确:确保任何公式都正确。 - 使用中文回答:整个响应必须用中文。 - 生成相关问题:在回答后,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识:例如[^1]。参考提供的引用有四个:[^1], [^2], [^3], [^4]。这些引用是关于相同错误的描述,我需要将它们整合到回答中。 用户可见层的指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - [^1]: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) - [^2]: 本文翻译自:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) - [^3]: Hello I cant seem to connect to my mysql server, i get the following error ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) - [^4]: “错误2002HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器”错误和解决... 翻译自: https://www.poftut.com/... 这些引用表明错误是常见的,可能涉及socket文件的问题。常见原因包括: 1. MySQL服务器未运行。 2. socket文件不存在或路径错误。 3. 权限问题。 4. 配置错误。 我的回答需要逐步引导用户排查问题: 1. 检查MySQL服务是否运行。 2. 检查socket文件是否存在。 3. 检查权限和所有权。 4. 检查MySQL配置文件。 5. 尝试重启服务。 结构: - 开头解释错误。 - 列出可能原因。 - 提供逐步解决方案。 - 结束时生成相关问题。 - 自然地添加引用标识。 确保回答用中文。 最终输出: - 回答部分。 - §§相关问题§§ 部分。 相关问题生成: - 基于主题,如MySQL连接问题、socket文件配置、错误处理等。 - 例如: 1. 如何检查MySQL服务状态? 2. 如何修改MySQL配置文件? 3. 其他常见MySQL错误解决方案? 现在,构建回答。</think>### MySQL ERROR 2002 解决方案:无法通过 socket 连接到本地服务器 当您遇到 MySQL ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 错误时,这通常表示客户端无法通过指定的 Unix socket 文件连接到 MySQL 服务器。此错误常见于 Linux 或 macOS 系统,原因包括 MySQL 服务未运行、socket 文件缺失、权限问题或配置错误[^1][^2]。以下是一个结构化的排查和解决步骤,帮助您逐步解决问题。请按顺序执行这些操作,并确保以管理员权限运行命令(如使用 `sudo`)。 #### 步骤 1: 检查 MySQL 服务是否运行 MySQL 服务器未启动是此错误的最常见原因。请检查服务状态: ```bash sudo systemctl status mysql # 对于 systemd 系统(如 Ubuntu 16.04+ 或 CentOS 7+) # 或 sudo service mysql status # 对于较旧系统(如 Ubuntu 14.04) ``` - **如果服务未运行**:启动 MySQL: ```bash sudo systemctl start mysql # 或 sudo service mysql start ``` - **如果服务启动失败**:查看日志以获取线索: ```bash sudo tail -f /var/log/mysql/error.log # 常见日志路径 ``` 日志可能显示端口冲突或初始化失败。例如,如果端口 3306 被占用,需释放端口或修改 MySQL 配置[^3]。 #### 步骤 2: 验证 socket 文件是否存在 socket 文件 `/var/run/mysqld/mysqld.sock` 是连接的关键。检查文件是否存在: ```bash ls -l /var/run/mysqld/mysqld.sock ``` - **如果文件不存在**: - 创建目录并设置权限(MySQL 可能未自动创建): ```bash sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld # 确保所有权正确 ``` - 重启 MySQL 服务以生成文件: ```bash sudo systemctl restart mysql ``` - **如果文件存在但权限错误**:修复所有权和权限: ```bash sudo chown mysql:mysql /var/run/mysqld/mysqld.sock sudo chmod 755 /var/run/mysqld/mysqld.sock ``` #### 步骤 3: 检查 MySQL 配置文件 配置文件中的 socket 路径错误会导致此问题。编辑 MySQL 配置文件(通常为 `/etc/mysql/my.cnf` 或 `/etc/mysql/mysql.conf.d/mysqld.cnf`): ```bash sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # 常见路径 ``` - 在 `[mysqld]` 部分,确保 socket 路径正确: ``` [mysqld] socket = /var/run/mysqld/mysqld.sock ``` - 在 `[client]` 部分,添加或修改 socket 路径以匹配: ``` [client] socket = /var/run/mysqld/mysqld.sock ``` 保存文件后,重启服务: ```bash sudo systemctl restart mysql ``` #### 步骤 4: 测试连接并排查网络问题 - **使用 TCP/IP 代替 socket 连接**:如果 socket 问题无法解决,尝试强制使用 TCP/IP: ```bash mysql -u root -p -h 127.0.0.1 # 通过本地 IP 连接 ``` 如果成功,表明问题仅限于 socket 配置。 - **检查端口占用**:MySQL 默认端口 3306 可能被其他进程占用: ```bash sudo netstat -tuln | grep 3306 ``` 如果端口被占用,结束冲突进程或修改 MySQL 端口。 #### 步骤 5: 高级修复(如果以上步骤无效) - **重新安装 MySQL**:如果文件损坏,备份数据后重装: ```bash sudo apt purge mysql-server # Debian/Ubuntu sudo apt install mysql-server ``` - **检查文件系统错误**:使用 `fsck` 工具修复磁盘错误(需重启系统)[^4]。 - **查看系统资源**:内存或磁盘空间不足可能导致服务失败: ```bash free -h # 检查内存 df -h # 检查磁盘空间 ``` #### 常见原因总结 | 原因 | 解决方案 | |------|----------| | MySQL 服务未运行 | 启动服务 (`sudo systemctl start mysql`) | | Socket 文件缺失 | 创建目录并设置权限,重启服务 | | 配置文件错误 | 修改 `my.cnf` 中的 socket 路径 | | 权限问题 | 更改文件所有权 (`chown mysql:mysql`) | | 端口冲突 | 释放端口 3306 或修改配置 | 如果问题持续,请提供错误日志片段(如 `/var/log/mysql/error.log`),以便进一步诊断[^1][^4]。此错误通常通过服务重启或配置修正解决,成功率较高。
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值