解決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'
相關文章
相關標籤/搜索