首页 文章

错误:'Can' t通过socket连接到本地MySQL服务器'/var/run/mysqld/mysqld.sock'(2)' - 缺少/var/run/mysqld/mysqld.sock

提问于
浏览
233

我的问题开始于我无法在我的mysql安装上以root用户身份登录 . 我试图在没有打开密码的情况下运行mysql ...但每当我运行命令时

# mysqld_safe --skip-grant-tables &

我永远不会得到提示 . 我试图关注these instructions to recover the password .

屏幕看起来像这样:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

我没有得到提示开始键入SQL命令来重置密码 .

当我按CTRL C杀死它时,我收到以下消息:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

如果我重试命令并保留足够长的时间,我会得到以下一系列消息:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

但是如果我尝试以root身份登录,请执行以下操作:

# mysql -u root

我收到以下错误消息:

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

我检查了 /var/run/mysqld/mysqld.sock 文件不存在 . 该文件夹,但不是文件 .

另外,我不知道这是否有帮助,但是我跑了 find / -name mysqld 它想出了:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

我是Linux和MySQL的新手,所以我不知道这是否正常 . 但我会包含这些信息以防它有所帮助 .

I finally decided to uninstall and reinstall mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

以与上面相同的顺序再次重新安装所有软件包后,在phpmyadmin安装期间,我得到了同样的错误:

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

所以我再次尝试卸载/重新安装 . 这次,在我卸载软件包之后,我还手动将所有mysql文件和目录重命名为 mysql.bad 各自的位置 .

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

然后我再次尝试重新安装 mysql-servermysql-client . 但我've noticed that it doesn' t提示我输入密码 . 是不是应该要求管理员密码?

30 回答

  • 182

    用户加载步骤的答案对我有用 . 有时需要在 /etc/mysql/my.cnf 中添加行来编辑文件到客户端

    [client]
    password = your_mysql_root_password
    port  = 3306
    host  = 127.0.0.1
    socket  = /var/lib/mysql/mysql.sock
    
  • 2

    要查找系统上运行的所有套接字文件:

    sudo find / -type s
    

    我的Mysql服务器系统在 /var/lib/mysql/mysql.sock 打开套接字

    找到套接字打开的位置后,使用套接字文件的路径添加或编辑/etc/my.cnf文件中的行:

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

    有时,启动命令行可执行文件的系统启动脚本会指定标志 --socket=path . 此标志可以覆盖my.cnf位置,这将导致找不到my.cnf文件指示的插座 . 然后,当您尝试运行mysql命令行客户端时,它将读取my.cnf以查找套接字,但由于它与服务器创建的不同,因此无法找到它 . 所以,除非你关心套接字所在的位置,否则只需更改my.cnf即可 .

    然后,停止mysqld进程 . 您如何做到这一点因系统而异 .

    如果您是linux系统中的超级用户,如果您不知道Mysql安装程序使用的特定方法,请尝试以下操作之一:

    • service mysqld stop

    • /etc/init.d/mysqld stop

    • mysqladmin -u root -p shutdown

    • 有些系统没有't setup to have an elegant way to stop mysql (or for some reason mysql doesn' t响应)你可以强制终止mysql:

    • 一步: pkill -9 mysqld

    • 两步(最不喜欢):

    • 使用 pgrep mysqlps aux | grep mysql | grep -v grep 查找mysql的进程ID

    • 假设进程id是 4969kill -9 4969 终止

    执行此操作后,您可能希望在 /var/run/mysqld/ 中查找pid文件并将其删除

    确保套接字上的权限是这样的,即任何用户mysqld正在运行,因为它可以读/写它 . 一个简单的测试是将其打开到完全读/写并查看它是否仍然有效:

    chmod 777 /var/run/mysqld/mysqld.sock
    

    如果这样可以解决问题,则可以根据安全设置根据需要定制套接字的权限和所有权 .

    此外,运行mysqld进程的用户必须可以访问套接字所在的目录 .

  • 9

    试试这个命令,

    sudo service mysql start
    
  • 0

    由于多次安装mysql而发生此错误 . 运行命令:

    ps -A|grep mysql
    

    使用以下方法终止进程:

    sudo pkill mysql
    

    然后运行命令:

    ps -A|grep mysqld
    

    同时运行以下命令终止此过程:

    sudo pkill mysqld
    

    现在您已完全设置,只需运行以下命令:

    service mysql restart
    mysql -u root -p
    

    有一个非常好的工作mysql了

  • 3

    解决方案更容易 .

    • 首先,您必须找到(在带有"sudo find / -type s"的终端中) mysql.sock 文件所在的位置 . 在我的情况下它是 /opt/lampp/var/mysql/mysql.sock

    • 启动终端并发出 sudo Nautilus
      这将以超级用户权限启动您的文件管理器

    • 从Nautilus导航到 mysql.sock 文件所在的位置

    • 右键单击该文件,然后选择“生成链接”

    • 将链接文件重命名为 mysqld.sock 然后右键单击该文件并将其剪切

    • 转到 /var/run 并创建一个名为 mysqld 的文件夹并输入它

    • 现在右键单击并粘贴链接文件

    • 瞧!您现在将在 /var/run/mysqld/mysqld.sock :)处拥有 mysqld.sock 文件

  • 0

    安装后只需启动MySQL服务:

    对于Ubuntu:

    sudo service mysql start;
    

    对于CentOS或RHEL:

    sudo service mysqld start;
    
  • 1

    好吧,只需复制并粘贴这些代码:这应该在终端,服务器内部,当您的mysql数据库没有正确安装时,以及当您收到此错误时:'无法通过套接字连接到本地MySQL服务器'/ var / run / mysqld / mysqld.sock'(2)' .

    Stop MySql

    sudo /etc/init.d/mysqld stop
    

    Restart it or start it

    sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start
    

    Make a link like this and give it to the system

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

    Run a secure installation which guides all the process you need to do to configure mysql

    /usr/bin/mysql_secure_installation
    
  • 0

    我遇到了同样的错误发现这是由于软件包的升级,所以在重启系统后我解决了错误 .

    我认为由于sql库/包更新发生了错误,所以如果你正在做一些升级尝试这个:)

  • 2

    Ubuntu上有一个带有MySQL 5.6和5.7的错误,只要MySQL服务停止或重新启动, var/run/mysqld/ 就会消失 . 这可以防止MySQL运行 . 找到了这个解决方法,这并不完美,但至少它会在停止/重启后运行:

    mkdir /var/run/mysqld/
    chown mysqld /var/run/mysqld/
    
  • 34

    这个问题有很多原因,但有时只是重新启动mysql服务器,它将解决问题 .

    sudo service mysql restart
    
  • 11

    *错误:'无法通过套接字连接到本地MySQL服务器'/var/run/mysqld/mysqld.sock'(2)'

    solutions

    最后卸载并重新安装mysql . **

    • sudo apt-get删除mysql-server

    • sudo apt-get删除mysql-client

    • sudo apt-get删除mysql-common

    • sudo apt-get删除phpmyadmin

    然后再安装

    • sudo apt-get install mysql-server-5.6

    执行此操作后,将使用164 MB的额外磁盘空间 .

    • 你想继续吗? [是/否] Y按YES进行完整安装

    ...... .......

    • 最后你会得到这些线......

    设置libhtml-template-perl(2.95-1)......

    设置mysql-common-5.6(5.6.16-1~exp1)...处理libc-bin的触发器(2.19-0ubuntu6)处理ureadahead的触发器(0.100.0-16)...

    • 然后

    root @ ubuntu1404:〜#mysql -u root -p(对于你应该使用的每个密码)

    • 输入密码:

    • 注意:输入的密码应与mysql的安装时密码相同(如.root,system,admin,rahul等...)

    然后输入

    • USE rahul_db(数据库名称);

    谢谢 . **

  • 90

    你可以在 /var/run/mysqld 中找到 mysqld.sock 如果你已经 sudo apt-get install mysql-server 安装了 mysql-server

  • 3

    也许有人面临这个问题 . 我在 Ubuntu 14 上使用 Mysql Workbench 并收到此错误 .

    mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect
    

    通过运行 sudo find / -type s 查找您的套接字文件,在我的情况下它是 /run/mysqld/mysqld.sock

    所以,我刚刚在 tmp 目录中创建了这个文件的链接 .

    sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
    
  • 9

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

    /etc/my.cnf 添加以下行:

    [client]
    socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]
    

    并重启服务: service mysql restart

    这对我有用

  • 1

    在ubuntu上使用XAMPP:

    • /var/run 目录中创建名为 mysqld 的文件夹 . 您可以使用命令 sudo mkdir /var/run/mysqld 来完成此操作 .

    • 创建一个由XAMPP服务器启动时创建的 mysql.sock 文件的符号链接 . 您可以使用命令 sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock .

    注意:mysql.sock文件是在服务器启动时创建的,当服务器停止时会被删除,因此有时您创建的链接可能会被破坏,但只要您使用sudo /启动服务器就可以使用它opt / lampp / lampp start或任何其他方式 .

    • 启动服务器(如果尚未运行)并再次尝试执行程序 .

    祝好运!我希望你这次能逃脱它 .

  • 2

    在我的情况下,两个mysqld进程正在运行..使用pkill -9 mysqld杀死了可选进程

  • 1

    如果你的系统上有很多数据库和表,如果你在my.cnf中设置了 innodb_file_per_table ,那么你的mysql服务器可能已经用完了打开的对象/文件(或者更确切地说是这些对象的描述符)设置一个新的最大值号码

    open-files-limit = 2048
    

    并重启mysql . 当根本没有创建套接字时,这种方法可能有所帮助,但实际上这可能不是真正的问题,存在潜在的问题 .

  • 0

    我刚刚在Ubuntu 14.10上遇到过这个问题

    转而认为 mysql-server 已不再安装(不知何故已被删除)但我无法安装它,因为存在一些破坏的包和依赖性问题/冲突 .

    最后我不得不重新安装mysql

    sudo apt-get remove mysql-client
    sudo apt-get install mysql-server
    
  • 7

    这已经提到了几次,但这对我来说很有效:

    service mysql restart

  • 1

    host 更改为 127.0.0.1 对我有用 .

    /etc/mysql/my.cnf 中编辑该文件,并将以下提到的行添加到该部分: client

    [client]
    port  = 3306
    host  = 127.0.0.1
    socket  = /var/lib/mysql/mysql.sock
    

    完成后 . 执行以下命令 .

    sudo service mysql start
    
  • 0

    我在Ubuntu的虚拟机上运行我的MySQL,所发生的事情是当我重新启动主机和VM时,IP已经改变了 . 我已将mysql配置为在IP 192.168.0.5上运行,现在由于动态分配IP,我的新IP为192.168.0.8

    如果您遇到同样的问题,只需使用命令 ifconfig 检查您的IP .

    使用命令 cat /etc/mysql/my.cnf | grep bind-address 检查MySQL绑定

    如果两个IP都相同,则重新安装mysql服务器

    如果没有,那么使用nano,vi,vim或您喜欢的任何内容在 /etc/network/interfaces 中更改您的IP .

    我更喜欢 sudo nano /etc/network/interfaces

    并输入以下内容

    auto eth0
    iface eth0 inet static
    address 192.168.0.5
    netmask 255.255.255.0
    

    保存interfaces文件,重新启动界面 sudo ifdown eth0 && sudo ifup eth0 将"eth0"替换为您的网络接口

    重启MySQL sudo service mysql stop 后跟 sudo service mysql start

    如果你遇到和我一样的问题,你很高兴!

  • 4

    我也会检查mysql配置 . 我用我自己的服务器遇到了这个问题,但我有点太仓促并错误配置了我机器的innodb_buffer_pool_size .

    innodb_buffer_pool_size = 4096M

    它通常可以运行到2048年,但我想我没有必要的内存来支持4场演出 .

    我想这也可能发生在其他mysql配置设置中 .

  • 1

    我在CentOS VPS上遇到过类似的问题 . 如果MySQL在启动后无法启动或不断崩溃,请尝试以下步骤:

    1)找到my.cnf文件(我的位于/etc/my.cnf)并添加以下行:

    innodb_force_recovery = X.

    将数字从1替换为6,从1开始,然后在MySQL无法启动时递增 . 设置为4,5或6可以删除您的数据,所以要小心并阅读之前的http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html .

    2)重启MySQL服务 . 此时只会运行SELECT,这是正常的 .

    3)使用mysqldump逐个转储所有数据库/模式,不要压缩转储,因为无论如何你必须在以后解压缩它们 .

    4)仅移动(或删除!)/ var / lib / mysql中的bd目录,保留根目录中的各个文件 .

    5)停止MySQL,然后取消注释1)中添加的行 . 启动MySQL .

    6)恢复3)中倾倒的所有bd .

    祝好运!

  • 0
  • 18

    在archlinux上我遇到了这个错误,问题是 mysqld -service没有运行 .

    但是我无法按照Archlinux文档中的指示使用 systemctl start mysqld 启用mysql-service . 我认为错误是这样的

    找不到mysqld.service

    我首先需要重启系统 .

    然后我再次输入命令(并输入 systemctl enable mysqld ),现在 mysql 能够找到创建的 mysql.sock .

  • 3

    当我在digitalocean上调整Droplet的大小时,我遇到了这种类型的问题 . 我升级了mysql版本并为我工作 . 这是我应用的教程 - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html

  • 2

    我尝试了几乎所有列出的解决方案,没有任何工作,直到我重新启动机器,然后当我发出命令“service mysql restart”时mysql服务器重新启动 .

  • 150

    在我的情况下,问题是/etc/mysql/my.cnf中的绑定地址,然后:

    nano /etc/mysql/my.cnf

    搜索绑定地址并删除特定的主机IP(不是127.0.0.1)

  • 5

    当MariaDB启动时会创建mysql.sock文件,并在关闭MariaDB时将其删除 . 它赢得了't exist if MariaDB is not running. maybe you didn' t安装MariaDB . 您可以遵循以下指示:https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

  • 3

    在终端提示符处尝试以下操作:

    sudo mysql
    

    一旦允许您进入,您就可以创建新用户并在他们需要访问的特定数据库上授予您想要的权限 .

    Mysql 5.7改变了一些东西,默认情况下使用auth_socket插件(而不是mysql_native_password)来保护帐户不被黑客入侵 . 您可以通过设置root的插件字段来覆盖它,但除非您有充分的理由,否则您可能不应绕过保护 . 特别是当 sudo mysqlmysql -u root -p 更容易时 .

    我从Raspberry Pi帮助网站找到了所有地方的这些信息 . 在Lubuntu 18.04之后工作就像一个魅力,让我感到非常恼火几个小时 .

相关问题