-
修改mysql配置文件。
vim /etc/mysql/mysql.conf.d/mysqld.cnf 找到 bind-address = 127.0.0.1 注释掉,保存退出。 -
允许所有用户远程登录
-
在服务器上通过root登录mysql,输入密码登录
mysql -u root -p -
修改 root 的 host 属性为 %,
use mysql; select host, user from user; update user set host = '%' where user = 'root';
-
-
在远程客户端Navicat上测试连接。
-
如果Navicat提示错误:
1698- access denied for user 'root'@'ip'可能的原因为:
在最近的Ubuntu安装(当然也可能是其他安装)中,MySQL默认使用了UNIX
auth_socketplugin插件。简单来说这意味着当db_users使用数据库时,将会通过系统用户认证表进行认证。
-
在服务器的mysql上执行
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,则需要通过操作系统的用户名来连接数据库。
-
-