记录Windows下移动云平台OneNet之数据可视化View连接本地MySQL数据库
项目相关背景:最近在写一个关于智慧电网的项目系统,最终发现自己设计的UI实在太丑,于是想利用云平台开放的可视化view模板使得自己的系统更高大上一点,修改好模板之后,因为所有的数据都必须要求是动态的数据,因此就在连接本地数据库的时候出现了问题。
文章目录
前言
问题描述:本地数据库连接后报错
“com.alibaba.druid.pool.GetConnectionTimeoutException: wait milis 2000, active 0, maxActive 8,creating 0, createEmorCount 1”。
原因分析
本地数据库未开启允许外网访问,且内网IP云平台无法访问。
-
本地数据库想要连接到云平台,首先要允许MySQL
端口
(一般来说MySQL默认端口为3306)来通过防火墙,然后给别的IP地址赋予权限
来访问本地数据库。 -
实现公网IP映射,
内网穿透访问MySQL数据库
(在这里我使用花生壳
映射IP,操作简单)
提示:以下是本篇文章正文内容,下面案例可供参考
一、解决方案
1. 允许外网访问本地数据库。
自定义规则允许防火墙通过
端口3306
(分别建立入站规则和出站规则)。
打开高级安全 Windows Defender防火墙
。
点击入站规则—>新建规则(规则类型选择端口
),然后点击下一步。
输入端口号3306
,点击下一步,选择允许连接,一直点击下一步。
最后选择一个卡哇伊的名称,就完成了。
出站规则的建立和入站规则一样。
允许本地MySQL外网访问。
修改mysql配置文件
配置文件my.ini(默认位置为“C:\ProgramData\MySQL\MySQL Server 8.0”)的修改首先要改变读写权限,右击文件,打开文件属性,点击安全来修改用户权限(赋予Users所有权限)。
配置文件my.ini中添加:
1. [mysqld]
2. port = 3306
3. bind-address = 0.0.0.0
然后重新启动mysql服务,执行service mysql restart。
设置mysql用户支持外网访问
登录数据库:
1. mysql -u root -p
然后输入密码。
查询host:
1. mysql> use mysql;
2. mysql> select user,host from user;
数据库默认root的访问ip为localhost,因此先修改访问ip为“%”,即允许所有ip(访问;然后刷新权限。
1. mysql> update user set host='%' where user='root';
2. mysql> flush privileges;
最后授权用户:
注意!!!
这里有一个大坑让我跌进去两天没出来!!!
授权任意主机以用户root和密码rootpwd(你的root密码)连接到mysql服务器。
错误的授权方式(直接赋予权限):
1. mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
2. mysql> flush privileges;
mysql执行会报错!!!
应该分别授权:
1. CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
2. GRANT ALL ON *.* TO 'root'@'%';
3. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
4. FLUSH PRIVILEGES; #刷新权限
2. 公网IP映射,内网穿透访问本地MySQL。
###下载花生壳,安装。
新增自定义映射:
在APP内查看域名指向IP(即IP映射地址):
至此,大功告成!!!
PS:如果你的mysql版本在8.0以上还有一个问题需要解决:
服务器时区异常!!!
新版的数据库使用的时区与本地时区有区别,标准时区使用的是Unix元年的时间为起始点到当前时间中间所做的动作。国际标准失去与本地相差 8 个小时。
在数据库名后面加:
1. ?serverTimezone=UTC
即:
最后测试连接:
总结
** 第一次在CSDN记录我的小趴菜日常,希望能够帮到有用的朋友,各位开发区大佬嘴下留情,哪里有不合适的地方多多赐教!!!**