问题描述: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数据库允许输入本地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
但是我本地实际更改的文件为mysqld.cnf,路径为/etc/mysql/mysql.conf.d/mysqld.cnf
修改完成后,重新启动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访问数据库,成功!!