原创

解决MySQL数据库无法远程连接问题



在使用Windows系统远程连接linux下的MySQL数据库时,提示无法连接。解决方法如下:

第一、允许MySQL数据库被远程连接

编辑/etc/mysql/mysql.conf.d/mysqld.cnf 配置文件,注释bind-address = 127.0.0.1这一行,然后重启MySQL服务。

vim /etc/mysql/mysql.conf.d/mysqld.cnf

注释掉以下一行,使用#号注释:

# bind-address = 127.0.0.1

重启服务:

service mysql restart

第二、授权允许远程连接的用户

首先以root用户登录MySQL:

sudo mysql -uroot -p

输入root密码登录MySQL。 以授权root用户为例:

mysql> grant all privileges on *.* to root@"%" identified by "password" with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

命令解释 *.*:第一个代表数据库名;第二个代表表名。这里的意思是所有数据库里的所有表都授权给用户; root:授予root账号; %:表示授权的用户IP,这里代表任意的IP地址都能访问MySQL; password:分配账号对应的密码; with grant option:这个选项表示该用户可以将自己拥有的权限授权给别人; flush privileges:刷新权限信息。 如果出现以下错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY "password"' at line 1

使用SELECT @@VERSION命令检查自己的版本是否为8.0以上,8.0以上的mysql版本把将创建账户和赋予权限分开了,需要进行以下操作。

#创建账户
create user 'root'@'%' identified by  'password';

#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to 'root'@'%' with grant option;

#改密码&授权超用户,本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;

详细如下:

mysql> create user 'root'@'%' identified by  '431241wjw';
Query OK, 0 rows affected (0.15 sec)

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.11 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.10 sec)

mysql> exit
Bye

现在就可以使用Workbench或者Navicat等工具连接MySQL了。 使用Navicat连接有可能出现以下错误:

1251-Client does not support authentication protocol requested by server;consider upgrading MySQL client

出现这种情况的原因是:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 我们需要把mysql用户登录密码加密规则还原成mysql_native_password。 首先以root用户登录MySQL:

sudo mysql -uroot -p

输入root密码登录MySQL。然后使用以下命令:

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;    #修改加密规则(这行不写也可以)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';     #更新一下用户的密码 
FLUSH PRIVILEGES;     #刷新权限

详细如下:

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '431241wjw';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

至此,你可以百分之八连接到MySQL数据库了。

软件教程
MySQL
环境配置

评论