我的问题开始与我不能登录根在我的mysql安装更多。我试图运行mysql没有密码打开…但每当我执行命令时

# mysqld_safe --skip-grant-tables &

我再也拿不回提示了。我试图按照这些说明恢复密码。

屏幕看起来是这样的:

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

我不知道这是否正常。但我把这些信息也包括进来,以防有用。

我最终决定卸载并重新安装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。在各自的位置都不好。

/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-server和mysql-client。但我注意到它并没有提示我输入密码。它不是应该要求输入管理员密码吗?


当前回答

我在Ubuntu上使用XAMPP。我在通过终端连接数据库时发现了这个错误。我没有任何配置就解决了这个问题,因为XAMPP中的默认套接字文件路径写在“/opt/lampp/etc/my.cnf”中,如下所示:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

现在你可以通过在终端上用mysql命令给出这个套接字路径参数来连接:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

这个过程没有任何构型。

如果你不想每次都输入套接字路径,那么在my.cnf中通过“/var/run/mysqld/mysqld.sock”修改默认路径。提供权限并重新启动mysql服务器。

编辑: 最近我安装了Ubuntu 20.04,并试图安装MySQL服务器,但我的系统崩溃了,根本无法工作。所以我刚刚完全删除了MySQL,安装了MariaDB。它的工作就像一个魅力没有任何问题。

其他回答

我也有同样的问题。在挣扎了一个小时后,我找到了一种无需重新安装mysql-common、mysql-client、mysql-server的方法来纠正它。

首先,进入“/var/run/mysqld”。你会发现mysql。Sock并不存在。只需删除整个mysqld目录并重新创建它并为其提供必要的特权。

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

现在,完整地杀死mysql进程。它可能会在运行“/etc/init”时显示“等待页面清理器”。D /mysql status”命令,即使关闭服务。

要完全关闭服务,请使用

# pkill -9 mysqld

进程终止后,尝试再次使用

# /etc/init.d/mysql start

你会发现它工作得很好!而且阻止它也没有问题。

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

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

查找系统中所有的套接字文件:

sudo find / -type s

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

一旦你找到套接字被打开的位置,在/etc/my.cnf文件中添加或编辑这一行,并附上套接字文件的路径:

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

Sometimes the system startup script that launched the command line executable specifies a flag --socket=path. This flag could override the my.cnf location, and that would result in a socket not being found where the my.cnf file indicates it should be. Then when you try to run the mysql command line client, it will read my.cnf to find the socket, but it will not find it since it deviates from where the server created one. So, Unless you care where the socket resides, just changing the my.cnf to match should work.

然后停止mysqld进程。具体操作方法因系统而异。

如果你是linux系统的超级用户,如果你不知道你的Mysql设置使用的具体方法,试试下面的其中一个:

服务mysqld停止 /etc/init.d / mysqld停止 Mysqladmin -u root -p shutdown 一些系统没有设置一个优雅的方式来停止mysql(或者由于某种原因mysql没有响应),你可以强制终止mysql: 一步:pkill -9 mysqld 两步(最不可取): 使用pgrep mysql或ps aux | grep mysql | grep -v grep查找mysql的进程号 假设进程id是4969,终止kill -9 4969

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

确保套接字上的权限是这样的,无论运行mysqld的用户可以读/写它。一个简单的测试是将其打开到完全读/写,看看它是否仍然有效:

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

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

另外,运行mysqld进程的用户必须能够访问套接字所在的目录。

对我来说唯一有效的方法是从我的系统中完全卸载MYSQL。所以我做了以下事情:

sudo apt-get remove mysql-server -y
sudo rm -r /var/lib/mysql
sudo rm -r /etc/mysql
sudo apt-get remove mysql-client -y
sudo apt-get remove mysql-common -y
sudo apt-get remove phpmyadmin -y
sudo apt-get install mysql-server -y

我在Ubuntu上使用XAMPP。我在通过终端连接数据库时发现了这个错误。我没有任何配置就解决了这个问题,因为XAMPP中的默认套接字文件路径写在“/opt/lampp/etc/my.cnf”中,如下所示:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

现在你可以通过在终端上用mysql命令给出这个套接字路径参数来连接:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

这个过程没有任何构型。

如果你不想每次都输入套接字路径,那么在my.cnf中通过“/var/run/mysqld/mysqld.sock”修改默认路径。提供权限并重新启动mysql服务器。

编辑: 最近我安装了Ubuntu 20.04,并试图安装MySQL服务器,但我的系统崩溃了,根本无法工作。所以我刚刚完全删除了MySQL,安装了MariaDB。它的工作就像一个魅力没有任何问题。