mysql|mariaDB 问题解决方案

Debian 安装mysql|mariaDB以后,通常都会出现各种始料未及的错误,本教程将介绍如何解决此问题。

“Plugin ‘unix_socket’ is not loaded 或 ERROR 1698 (28000): Access denied for user ‘root’@’localhost’.

什么是Unix_Socket插件?

MariaDB 5.2.0中首先支持Unix_Socket身份验证插件,允许用户使用操作系统凭据通过Unix套接字连接到MariaDB。
默认情况下不安装此插件。

注意:某些情况也会出现上述问题。
在Debian 9中,某个情况下(也许在安装和删除mariadb之后)mysql无法运行。提示错误“Plugin ‘unix_socket’ is not loaded”。

解决方案

首先切换root

1
su -

然后按照:

1
2
3
systemctl stop mariadb.service
mysqld_safe --skip-grant-tables &
mysql -uroot

这将完全停止mysql,绕过用户身份验证(不需要密码)并使用用户“root”连接到mysql。
现在,在mysql控制台中,使用mysql管理db:

1
use mysql;

要将root密码重置为mynewpassword(根据您的需要更改),只是为了确保:

1
update user set password=PASSWORD("mynewpassword") where User='root';

而这一个将覆盖身份验证方法,删除unix_socket请求(和其他一切),恢复正常和工作的密码方法:

1
update user set plugin="mysql_native_password";

退出mysql控制台:

1
quit;

停止并启动与mysql相关的所有内容:

1
2
3
systemctl stop mariadb.service
kill -9 \$(pgrep mysql)
systemctl restart mariadb.service

MySQL远程访问权限

MariaDB默认是不允许用户远程登录的,如果需要远程登录,则需要以下操作。

允许root用户远程登录MariaDB

  1. 修改配置文件的端口绑定

    打开的目录可能会根据MySQL的版本稍有不同,可以先尝试打开/etc/mysql/mariadb.conf.d/*这些配置文件,若该文件不存在或文件内容为空,则尝试下面的文件路径。

    1
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

    在下面行的开头加上#,注释掉该行,然后保存退出:

    1
    bind-address = 127.0.0.1
  2. 修改访问权限

    进入mysql,输入如下命令,输入密码,进入mysql命令行

    1
    mysql -u root -p

    授权root用户访问权限,并刷新权限,此处的root可用其它MySQL用户替换,pwd部分需替换为该用户对应的密码

    1
    2
    3
    grant all privileges on *.* to [email protected]"%" identified by "newPWD" with grant option;
    flush privileges;
    exit;
  3. 重启mysql服务

    1
    /etc/init.d/mysql restart