修改mysql配置文件。mysql
vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address = 127.0.0.1 註釋掉,保存退出。
複製代碼
容許全部用戶遠程登陸sql
在服務器上經過root登陸mysql,輸入密碼登陸數據庫
mysql -u root -p
複製代碼
修改 root 的 host 屬性爲 %,vim
use mysql;
select host, user from user;
update user set host = '%' where user = 'root';
複製代碼
在遠程客戶端Navicat上測試鏈接。服務器
若是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,則須要經過操做系統的用戶名來鏈接數據庫。