我的问题开始与我不能登录根在我的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。但我注意到它并没有提示我输入密码。它不是应该要求输入管理员密码吗?


当前回答

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

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服务器和apache

sudo service mysql restart
sudo apache services restart

当您安装插件或执行任何数据库命令时,这是一个常见问题。

试试这个命令,

sudo service mysql start

由于多次安装mysql而出现此错误。 执行如下命令:

ps -A|grep mysql

通过以下命令终止进程:

sudo pkill mysql

然后运行命令:

ps -A|grep mysqld

也可以通过运行:

sudo pkill mysqld

现在你已经完全设置好了,只需运行以下命令:

service mysql restart
mysql -u root -p

又有很好的工作mysql吗

在/etc/mysql/my.cnf目录下找到my.cnf文件 (相应地改变它表示socket的位置)

port            = 3306
socket          = /tmp/mysql.sock

这里是一些特定程序的条目 下面的值假设您至少有32M ram

它的正式名称是[safe_mysqld]。两个版本目前都进行了解析。

[mysqld_safe]
socket          = /tmp/mysql.sock
nice            = 0

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

open-files-limit = 2048

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