我在Ubuntu 12.04 LTS (Precise穿山甲)上安装了LAMP,然后在phpMyAdmin上设置根密码。我忘记密码了,现在无法登录。当我试图通过终端更改密码时,我得到:

错误2002 (HY000):无法通过套接字连接到本地MySQL服务器 ' / var /运行/ mysqld / mysqld。袜子”(2)

我该如何解决这个问题?我无法打开LAMP,卸载它或重新安装它。


当前回答

您应该验证/var/run/mysqld.的组的所有者如果不是mysql。Mysql,然后做:

su root
chown mysql.mysql /var/run/mysqld

其他回答

你检查过LAMPP是否在运行吗?

sudo bash <path>/lampp start

对我来说,路径就是

sudo bash /opt/lampp/lampp start

您正在本地运行,这意味着您的客户端与服务器运行在同一台机器上。

确保你的Unix用户可以访问/读取/var/run/mysqld .sock:

ls -als /var
ls -als /var/run
ls -als /var/run/mysqld
ls -als /var/run/mysqld/mysqld.sock

如果没有,请与系统管理员或数据库管理员联系,以提供对这些目录的足够的读/执行访问,或将套接字文件移到其他位置。

我不能解释,但在kubuntu 12.04.2之后

Sudo apt-get autoremove linux-headers-3.2.0-37 linux-headers-3.2.0-37-generic

它开始起作用了

在我的情况下,似乎我不能真正杀死mysql进程,当我运行

sudo service mysql stop
ps -ef | grep mysql

mysql进程一直在那里,看起来它阻塞了套接字文件,新的mysql进程不能自己创建它。

这很有帮助

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

现在我能够登录数据库使用

mysql -u root

然后更新root密码:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS:我在更新根密码时遇到了麻烦,似乎是“auth_socket”插件的问题,所以我必须创建具有完整权限的新用户

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

这将创建一个没有密码的用户“super”,然后你可以连接mysql -u super

在我的例子中,默认端口3306正在被其他进程使用,因此它没有启动。在我停止了其他服务,并做了sudo服务mysql启动后,它工作得很好。顺便说一句,您可以使用sudo lsof -Pn -iTCP:3306之类的东西来查看谁可能正在使用该端口。