解决Ubuntu下MySQL远程登陆问题

  1. 修改mysql配置文件。mysql

    vim /etc/mysql/mysql.conf.d/mysqld.cnf
     找到 bind-address = 127.0.0.1 注释掉,保存退出。
    复制代码
  2. 容许全部用户远程登陆sql

    • 在服务器上经过root登陆mysql,输入密码登陆数据库

      mysql -u root -p 
      复制代码
    • 修改 root 的 host 属性为 %,vim

      use mysql;
        select host, user from user;
        update user set host = '%' where user = 'root'; 
      复制代码
  3. 在远程客户端Navicat上测试链接。服务器

  4. 若是Navicat提示错误:socket

    1698- access denied for user 'root'@'ip'
    复制代码

    可能的缘由为:测试

    在最近的Ubuntu安装(固然也多是其余安装)中,MySQL默认使用了UNIX auth_socket plugin插件。spa

    简单来讲这意味着当db_users使用数据库时,将会经过系统用户认证表进行认证。操作系统

    • 在服务器的mysql上执行.net

      mysql> SELECT User, Host, plugin FROM mysql.user;
        
        +------------------+-----------------------+
        | User             | plugin                |
        +------------------+-----------------------+
        | root             | auth_socket           |
        | mysql.sys        | mysql_native_password |
        | debian-sys-maint | mysql_native_password |
        +------------------+-----------------------+
      复制代码

      根据查询结果看出,root用户在使用 auth_socket 插件。

      解决方法:

      • 能够设置你的root用户使用 mysql_native_password 插件

        mysql> USE mysql;
          mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
          mysql> FLUSH PRIVILEGES;
          mysql> exit;
        复制代码
      • 用你的操做系统用户名代替YOUR_SYSTEM_USER

        mysql> USE mysql;
          mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
          mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
          mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
          mysql> FLUSH PRIVILEGES;
          mysql> exit;
        复制代码

      重启数据库

      若是使用了方法2,则须要经过操做系统的用户名来链接数据库。

参考:

  1. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  2. 解决 MySQL 的 ERROR 1698 (28000): Access denied for user 'root'@'localhost'
相关文章
相关标签/搜索