问题描述:mysql数据库默认只允许localhost和127.0.0.1连接,当在配置数据库连接的url时,使用本地IP会连接失败

今天在使用mybatis做登陆验证时,mybatis-config.xml文件中dataSource配置如下:

<property name="url" value="jdbc:mysql://localhost:3306/antSys?useSSL=false"/>

此时能成功使用数据库,但是当我把 localhost 改为 本地ip 后,数据库连接失败,使用IDEA测试连接报错:

mysql windows配置多个ip地址 mysql设置ip地址连接_java

 现整理记录一下如何设置mysql数据库允许输入本地ip连接。

1. 修改mysql配置文件

原因:mysql数据库安装时,默认只允许localhost或127.0.0.1本地连接

使用命令查看电脑上mysql配置文件my.cnf路径,一般默认是在 /etc/mysql里

user@user:~$ mysql --help | grep my.cnf
      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

根据路径找到配置中的bind-address和mysqlx-bind-address,更改为0.0.0.0

mysql windows配置多个ip地址 mysql设置ip地址连接_数据库_02

 但是我本地实际更改的文件为mysqld.cnf,路径为/etc/mysql/mysql.conf.d/mysqld.cnf

mysql windows配置多个ip地址 mysql设置ip地址连接_mysql_03

修改完成后,重新启动mysql,使用命令如下:

sudo service mysql restart

2.查询root用户权限

 进入mysql库:

-> mysql -u root -p
-> use mysql;

使用下面的命令查看root用户的权限:

select user ,host,select_priv,insert_priv,update_priv,grant_priv from user where user='root';

正常权限开启情况应如下图,其中host列中%也可以是自己的本地ip:

mysql> select user ,host,select_priv,insert_priv,update_priv,grant_priv from user where user='root';
+------+-----------+-------------+-------------+-------------+------------+
| user | host      | select_priv | insert_priv | update_priv | grant_priv |
+------+-----------+-------------+-------------+-------------+------------+
| root | %         | Y           | Y           | Y           | Y          |
| root | localhost | Y           | Y           | Y           | Y          |
+------+-----------+-------------+-------------+-------------+------------+
2 rows in set (0.00 sec)

如果root用户未正确开启权限,直接创建新用户并赋权限时,会报错:

ERROR 1410 (42000): You are not allowed to create a user with GRANT
2.1 如果查询到grant_priv为N

如果查询到的grant_priv为N,则root用户权限未开启,应先开启权限:

update user set grant_priv='Y' where user='root';
2.2 如果查询到host只有localhost一行

此时,应开启本地ip的权限(只能在本地ip下访问)或者直接%(用户可以再任意ip下访问,给root用户可以直接%,成为超级管理员),否则没有办法创建其他可使用本地ip访问数据库的用户。开启方式为:

grant all privileges on *.* to 'root'@'%';//开启root用户%的权限
flush privileges;//更新权限缓存

其中的%可以替换为自己的本地ip地址,最后一定要flush privileges更新权限缓存

此时已经可以直接以root用户使用本地ip访问数据库了,但是如果想再创建新用户给其他人使用,方便管理和数据安全,可以继续以下步骤。

3.创建新用户并授权

3.1 创建新用户

创建用户并设置密码:

create user 'CW'@'ip' IDENTIFIED BY 'WC';

其中CW和WC可以替换为自己创建的用户名和密码。

3.2 给新用户授权

此时授权既要授权host为localhost,也要授权本地ip或者直接%的权限(此时建议只开启固定ip的权限):

grant all privileges on database.* to 'CW'@'ip' with grant option;

其中database.*表示只授权用户CW对数据库database中的所有表。

重要的事情说三遍!重要的事情说三遍!重要的事情说三遍!

亲测,在3.1中创建新用户时,如果创建的是localhost:

create user 'CW'@'localhost' IDENTIFIED BY 'WC';

那么在授权时,就只能授权localhost:

grant all privileges on database.* to 'CW'@'localhost' with grant option;

授权其他,比如'CW'@'IP'或者CW'@'%'就会报不允许授权的错误:

ERROR 1410 (42000): You are not allowed to create a user with GRANT

即创建时和授权时,要对应。创建为localhost,授权就要是localhost;创建为固定ip,授权就要是固定ip;创建为%,授权就要是%

授权好后,可以使用命令查看该用户的权限:

show grants for 'CW'@'%';

4.测试连接

使用IDEA,以刚创建好的用户,使用ip访问数据库,成功!!

mysql windows配置多个ip地址 mysql设置ip地址连接_java_04