自己充当MySQL服务器结果连不上的先去查子网穿透工具用了没,没用的直接看第四部分。
(如下无实质性内容,不想看的直接往下翻,作者啰里啰嗦干什么,呸,全是废话)
首先,我写这么长的标题不是因为我闲的。这都是我自己为了解决这个问题向各个平台扔出的无数个可能给我答案的问题中的几个。为了广大初学者的福祉,我干脆把这些问题全部列在标题和简介上,主打的就是一个争取一步到位。
我想对于像我这种初学者来说,哪能想得到MySQL远程连接需要子网穿透工具这种不在常规学习范畴的工具,我搜了半天一直都在谈配置MySQL。确实,是需要配置,但是,没有子网穿透这一关键技术,那校园网就是不可逾越的鸿沟,什么都配置好了,就是连不上,那叫一个来气。
没有子网穿透,就是只能在局域网(而且得是那种192.168.10.x,校园网那种10开头的还不行)里面连接MySQL。而常规的跨局域网连接也多见于服务器-用户主机的连接模式,服务器都是配置好的,直接连就行。但是,万一搞个小项目,用随便一台笔记本电脑当MySQL服务器呢?这种情况怎么连,用什么工具,要什么操作,对我当初而言可谓折磨。今日我便要尽我能力讲好这个流程,争取让每一台安装了MySQL的电脑,都能成为一台可以跨网访问的MySQL服务器。
(从此部分开始,如果有任何问题,可选择自己去查,或者通过评论区、私信、个人主页简介加好友三个方式询问)
各人配置有异,因此我仅指出我的配置,并不给出推荐配置,各软件之间也无版本上存在的必要
系:
HUAWEI MATEBOOK 14D(512G)(只要是台笔记本,只要平常用着不卡的要死就行,有没有单独的网卡什么的都无所谓,这不能构成借机换笔记本的理由doge)
MySQL 8.0.28(必需)
Python 3.6.8(测试用,不必需)
PyCharm Community Edition 2021.3.2(测试用,不必需)
花生壳8.6.0.48614(子网穿透工具,必需,一搜一大把,别的也行,我就会用这一个,就用这个了,一般也够用)
本文覆盖到的问题场景包括:
实验室局域网/家庭局域网的跨局域网MySQL连接配置
校园网的跨子网/跨局域网MySQL连接配置
虽然,这篇文章主打的是子网穿透的部分,而且写的人也很多,但是这部分也得简单说说。
首先,下载MySQL自不必说,可以参考这篇文章,一般出不了问题。
为了实现远程连接,需要准备一个支持远程连接的账户,默认的最高权限root账户是本地连接的,出于数据库安全考虑,一般不推荐将root账户改为可以远程访问,而是另开若干个具有明确权限限制的可远程访问MySQL用户,创建该类用户的方法如下:
-- 场景为:新建一个名为remote_connect的可远程访问用户,登录密码为laytzhqq(别对着首拼胡思乱想,两岸一统,中华千秋)
create user "remote_connect"@"%" identified by "laytzhqq";
-- 在上面代码中,%代表允许从任意IP地址访问,如果填localhost则只允许本机访问,若设定其他固定IP则只允许特定主机访问
为账户授予相关权限:
--场景为:向可远程访问用户remote_connect授予对test_database数据库的test_table数据表的全部权限
grant all privileges on test_database.test_table to "remote_connect"@"%";
--上述语句直译:grant 全部权限 on test_database数据库.test_table数据表 to remote_connect用户@远程访问权限;
(对于上述所示授权内容,详参这篇文章,里面有具体的关于权限内容的叙述,此处仅简单说明)
注意,一般情况下,MySQL都是支持通过创建远程连接用户来进行远程连接的,但是,不排除有安装过程中就出问题的,需要修改my.ini(也有可能是my.cnf)。这个问题我真解决不了,遇到了只能发挥主观能动性自己找。不过不要轻易怀疑自己的配置文件my.ini出问题了,这个地方出现问题的概率不高,而且一旦改的时候不小心动了不该动的,结果……你懂的?(都是自己的教训,修改一次就得重写一次my.ini,这玩意从来没给过我改回来的机会,最后发现根本不是my.ini的问题)
先找到花生壳的官网,去下载安装花生壳。安装在哪里,怎么安装,毋需多言。
注意:这玩意没有特别离谱的需求的话是免费的,不要走什么歪门邪道下载。别下载了被植入木马的程序,到时候对你发起攻击或者用你电脑挖矿就不好玩了。
这个按照操作流程来就行,我已经忘记了当初是怎么登陆的了,反正……就这样再那样,和平常登录没什么区别;
登录进去之后,点到内网穿透那里去,点“映射数”那里(我是有映射的,但一个刚开始用的账号是没有的):
(同时我们这里可以看到,每个月预先分配免费的1G流量,一个体验版账户可以建立两个免费的TCP映射,不需要花钱)
然后弹出一个网站(我忘记这里是不是还要登陆了),点击新增映射:
新增映射的界面是这样的:
这些框框里需要填和选的内容都有:
左栏第一个:应用名称:随便写;
左栏第二个:应用图标:随便选;
左栏第三个:映射类型:选TCP。MySQL使用TCP协议作为传输层协议;
右栏第一个:TCP类型:选普通TCP。至少我觉得普通TCP就够用了;
右栏第二个:映射模板:选不使用模板。我没用,各位随意;
右栏第三个:外网域名:第一次自动生成一个。记不清了,反正不需要花钱买;
右栏第四个:外网端口:选动态端口。没事,只要这个端口不出现很久没有流量的情况,就不会给你换端口;
右栏第五个:内网主机:填127.0.0.1。即本机回环地址,别填ipconfig显示的IP,换个网络就变了,不稳妥;
右栏第六个:内网端口:填你MySQL的端口。这个一般是3306,但在安装的时候这个东西是你自己配置的,可能不是3306,建议现场去my.ini(或my.cnf)里面查,那个port=xxxx的就是(我不知道你的my.ini在哪哦,自己当时放在哪里了自己找);
右栏第七个:带宽:选1。基本够用,不够用的后面有解决方法;
右栏第八个:夜间带宽:关闭加速。这个无所谓。
以上就是我的填写过程,同志们自取所需,和而不同。
首先是关于免费获取更好服务的途径(仅限学生)
点击升级:
然后在弹出的页面上部导航栏处找到活动专区,下拉栏里面有“未来之星”活动:
然后进入活动界面(下图),就按照它的指示走就可以了,我没试过,不过应该没问题,需要的话可以去试试。
(此处提供MySQL(CMD直连),Python(pymysql),Java(JDBC)三种方式)
(由于本人自使用MySQL起就一直用CMD窗口操作,所以Navicat,SQL Server都没用过,而且除Python,Java外其他语言我不会,因此仅提供三种测试途径,见谅)
直接通过MySQL(CMD窗口)尝试连接:
--在另一台设备上使用remote_connect用户(密码为laytzhqq),向目标主机(子网穿透后IP地址为115.236.153.177,端口为50691,是前面我们配置过的那台主机)发起连接请求
mysql -h115.236.153.177 -nremote_connect -P50691 -playtzhqq
--直译:mysql -h地址 -n用户 -P端口 -p密码
通过Python(pymysql)尝试连接:
import pymysql as py
# 一切场景同上,除了加了个database,用的也是之前说过的test_database
conn = py.connect(host="115.236.153.177", user="remote_connect", password="laytzhqq", port=50691, database="test_database", charset="utf8")
print("Connect Successfully")
conn.commit()
conn.close()
# 出现报错基本上都是配置不到位
通过Java(JDBC)尝试连接:
import java.sql.Connection;
import java.sql.DriverManager;
public class JDBCUtil {
public Connection GetConn() {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = null;
String dbUsername = "remote_connect";
String dbPassword = "laytzhqq";
String dbUrl = "jdbc:mysql://115.236.153.177:50691/test_database?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
System.out.println("Connect Successfully")
conn.close()
}
}
# 这个出现错误有可能是你的驱动不到位,与MySQL连接无关,
我真谢谢子网穿透了;
别拿着我给的端口和IP测试,跑不通的;
我也写不了太全,很多细节的东西如果需要的话要单独查,当然,直接来问也行(然后就我帮你查,我也不一定知道答案)。