一、将用户的访问地址改为%
- 打开终端登录mysql数据库:
mysql -u root -p
- 查看user表
mysql>use mysql;
Database changeed
mysql>select host, user, authentication_string from user;
注意此处网上很多教程写的是password,那是老版的了,现在的MySQL的mysql数据库的user表中已经没有password字段了,而是换成了
authentication_string
±----------±-----------------±------------------------------------------+
| host | user | authentication_string |
±----------±-----------------±------------------------------------------+
| localhost | root | ********************************** |
| localhost | mysql.session | ********************************** |
| localhost | mysql.sys | ********************************** |
| localhost | debian-sys-maint | *********************************** |
±----------±-----------------±------------------------------------------+
4 rows in set (0.00 sec)
- mysql>
update user set host = '%' where user = 'root'
二、注释bind-address = 127.0.0.1
在Ubuntu系统中,MySQL默认只能本地访问,不能远程访问,因为访问地址被绑定死了为本地127.0.0.1,想要远程访问的话,需要去/etc/mysql/mysql.conf.d
中找到bind-address = 127.0.0.1
,然后注释掉这一句,也就是在这句前面加上#
号。
然后重启MySQL就可以了。
重启命令为:service mysql restart
二、开始修改配置:
1,登进MySQL之后,
2,输入以下语句,进入mysql库:
use mysql
3,更新域属性,'%'表示允许外部访问:
update user set host='%' where user ='root';
4,执行以上语句之后再执行:
FLUSH PRIVILEGES;
5,再执行授权语句:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
然后外部就可以通过账户密码访问了。
6,其它说明:
FLUSH PRIVILEGES; 命令本质上的作用是:
将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。
通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。
而不必冒太大风险。
三、可能存在的其它问题:
执行完之后,再用Navicat连接mysql,报错如下:
Client does not support authentication protocol requested by server;
报错原因:
mysql8.0 引入了新特性 caching_sha2_password;这种密码加密方式Navicat 12以下客户端不支持;
Navicat 12以下客户端支持的是mysql_native_password 这种加密方式;
解决方案:
1,用如下语句查看MySQL当前加密方式
select host,user,plugin from user;
查询结果
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys | mysql_native_password |
+-----------+------------------+-----------------------+
看第一行,root加密方式为caching_sha2_password。
2,使用命令将他修改成mysql_native_password加密模式:
update user set plugin='mysql_native_password' where user='root';
再次连接的时候,就成功了。