Ubuntu 15.10 MySQL错误1524-unix_socket


51

在Ubuntu 15.10上,某时(也许在安装并删除了mariadb之后)mysql无法运行。任务已启动,但服务器已关闭。

在命令中:

mysql -u root -p

系统回复如下:

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

无法登录,找不到插件,配置文件中没有错误(全部为默认值)。

如何重新获得控制权,并使mysql服务器运行?


我不熟悉此特定错误,但请参见以下讨论:lists.launchpad.net/maria-developers/msg08177.html
Jos

@Jos:可能是在类似情况下的讨论也没有提供解决方案。我已经在Google上搜索了很多,但没有找到完整的解决方案。无论如何,我已经发布了一个有效的答案。
Hydra Starmaster 2015年

关于错误消息的原因:unix_socket插件是MariaDB(不是MySQL)的一部分,需要加载才能使使用它的授权起作用:mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

Answers:


94

mysql身份验证过程已调用“ unix_socket”(可能与数据库到mariadb的部分迁移有关,现已删除)。要使所有内容恢复正常工作,请执行su:

sudo su

然后按照:

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

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

现在,在mysql控制台中,使用mysql管理数据库:

use mysql;

要将根密码重置为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

不要忘记exitsu模式。

现在,mySQL服务器已启动并正在运行。您可以使用root登录:

mysql -u root -p

或任何你想要的。密码使用有效。

而已。


mysqld_safe没有选择--skip-grant-tables
heemayl 2015年

我在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 '16

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';
安东尼·斯卡夫

这里的说明简洁明了,并帮助我解决了该问题。谢谢!
Eduardo B.

11

这是我执行此操作的步骤:

/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

1
现在,在“ mysql -u root”之后,我得到:错误1524(HY000):未加载插件“ root”
dxvargas

听起来您好像混淆了两个UPDATE查询。您是否意外设置了plugin =“ root”?
亚当·普洛彻
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.