Ubuntu 15.10 mysql错误1524 - unix_socket

在Ubuntu 15.10上,在某个时刻(可能是在安装和卸载mariadb之后),mysql无法运行。任务已经启动,但服务器却处于停止状态。 在命令行中:
mysql -u root -p
系统回复的内容类似于:
mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"
无法登录,找不到插件,在配置文件中没有错误(全部恢复为默认设置)。 如何重新控制并使MySQL服务器运行?

我对这个特定的错误不太熟悉,但你可以参考这个讨论:https://lists.launchpad.net/maria-developers/msg08177.html - Jos
@Jos:那个讨论可能并没有提供解决方案,或许是因为情况相似。我已经在谷歌上搜索了很多,但没有找到完整的解决方案。不过,我已经发布了一个可行的答案。 - Hydra Starmaster
关于错误信息的原因:unix_socket插件是MariaDB的一部分(而不是MySQL),需要加载它才能使使用它的授权工作。请参考以下链接:https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/ - JonnyJD
2个回答

"unix_socket" 已被 MySQL 认证过程调用(可能与数据库部分迁移到 MariaDB 有关,现已移除)。要使所有内容恢复正常,请执行以下操作:
sudo su
然后跟着:
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

这将完全停止mysql,绕过用户身份验证(无需密码)并使用用户“root”连接到mysql。

现在,在mysql控制台中,进入mysql管理数据库:

use mysql;
要将root密码重置为mynewpassword(根据您的意愿进行更改),只需确保执行以下操作:
update user set password=PASSWORD("mynewpassword") where User='root';
这个将覆盖认证方法,删除unix_socket请求(以及其他所有内容),恢复正常和有效的密码方法。
update user set plugin="mysql_native_password";
退出mysql控制台:
quit;
停止和启动与mysql相关的所有内容:
/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start
不要忘记退出su模式。 现在MySQL服务器已经启动并运行。您可以使用root登录它:
mysql -u root -p
或者你想要的任何内容。密码使用是有效的。 就这样。

我的 mysqld_safe 没有像 --skip-grant-tables 这样的选项...怎么回事? - heemayl
我使用的是mysqld 5.6.27-0ubuntu1版本。你可以通过查看mysqld --verbose --help来找到该选项。 - Hydra Starmaster
2这让我有了动力。与mysqld_safe不同的是,它抱怨参数--skip-grant-tables不存在,我使用了mysqld。然而,它一直抱怨无法在/var/run/mysqld/中创建套接字文件。我检查了apparmor配置,它具有适当的权限。为了解决这个问题,我必须执行mkdir /var/run/mysqld/,然后给予完全开放的权限:chmod -R 777 /var/run/mysqld/。然后,我终于可以启动守护进程并将插件更改为'mysql_native_password'。 - dennmat
1我的用户表没有密码字段(Ubuntu 16 mysql 5.7.13)。我使用了以下SQL语句:UPDATE mysql.user SET authentication_string = PASSWORD('foobar123'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost'; - Anthony Scaife
这里的说明很简明扼要,帮助我解决了问题。谢谢! - Eduardo B.
真是救了我一命,非常感谢你。2017年还能用! - Amjad
在mysqld停止崩溃之前,我不得不创建/var/run/mysqld目录,并将所有者设置为mysql。请不要像上面提到的那样设置777权限! - JPT

这是我完成这个任务的步骤:
/etc/init.d/mysql stop
sudo killall mysqld_safe
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
update user set password=PASSWORD("mynewpassword") where User='root';
update user set plugin="mysql_native_password";
quit;
/etc/init.d/mysql stop
sudo kill -9 $(pgrep mysql)
/etc/init.d/mysql start

2现在,在"mysql -u root"之后,我得到了以下错误提示: ERROR 1524 (HY000): Plugin 'root'未加载。 - dxvargas
听起来你把两个UPDATE查询搞混了。你是不是不小心设置了plugin="root"? - Adam Plocher