String url = \"大众jdbc:mysql://192.168.183.134:3306/mysql\"大众;

便是先在网络层连上IP为192.168.183.134的主机,再去连接这台主机的详细端口3306(传输层),然后传输层达成连接后,在运用层用账号密码上岸,访问mysql数据库:

Connection conn = DriverManager.getConnection(url, user, password);

一开始我疑惑是否端口设置问题,然后在/etc/mysql/my.cnf上加上了port=3306,结果还是连不上,显示端口谢绝访问。

然后用命令$netstat -apn 找到端口3306的一条信息:

phpsocket远程不行长途衔接 Mysql 掉败的解决办法 Node.js

tcp 0 0 127.0.0.1:3306 0.0.0.0: LISTEN

仔细一看,这里供应的IP是127.0.0.1,结合socket编程的履历,一样平常要吸收任意主机发送的时,IP会设置为0.0.0.0,而127.0.0.1(回送地址)是否意味着只能本地访问?然后打开同学的Debian查看他的mysql占用端口时,果真如我所想:

tcp 0 0 0.0.0.0:21 0.0.0.0: LISTEN

经由一番搜索后,得出结论是mysql默认只供应给本地访问,而要开启远程访问功能须要额外设置。
从安全的角度看这也是合理的。

设置方法还是修正配置文件/etc/mysql/my.cnf

[client]default-character-set=utf8[mysqld]default-storage-engine=INNODBcharacter-set-server=utf8collation-server=utf8_general_ciport=3306bind-address=0.0.0.0

utf8干系的是之前本地录入汉字数据时创造插入失落败,男人和VARCHAR不兼容,在mysql模式下输入STATUS查看的状态时:

Server characterset: latin1Db characterset: latin1Client characterset: utf8Conn. characterset: utf8

经由这个修正后,前2个字符集就全变成了utf8,支持中文。
其他的修正就犹如我所说的,绑定IP为0.0.0.0,即吸收任意地址的主机的连接,端口绑定3306。

但是依然不能访问,只不过缺点信息发生了改变,这次很明确了,是显示用户没有连接权限,也便是说用户只能本地连接,依然搜索资料后得出办理方案如下:

1.新建用户远程连接mysql数据库

mysql> grant all on . to team@'%' identified by 'java123' with grant option;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)

2.支持root用户许可远程连接mysql数据库

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

参考:配置mysql许可远程连接的方法