因为本人需要做一个项目,后端数据库就用MySQL实现。但是,想要别人连接数据库,那就得先让别人能连上,并且有一个合理权限的用户。但是在建立用户后并不能别人连接我的MySQL,这是为什么呢?因为我现在所在的是局域网,并不能被别的局域网连接上。

    那就记录一下解决过程吧:

进行用户创建以及权限配置

  1. 本机登录MySQL(我这里登陆的是root,也应该只有root才能给予权限)

  2. 创建一个新用户

    首先使用mysql数据库:

    1
    use mysql

    ![](2022-04-29 MySQL内网穿透.assets/2022-04-29-mysql添加用户.png)

    大致意思如上,就是我建立了一个用户,他叫test,并且可以从任意IP(%通配符)登入,且密码为testword。

  3. 更改权限

    ![](2022-04-29 MySQL内网穿透.assets/2022-04-29-mysql更改用户权限.png)

    大致意思就是给予test用户所有关于project_ds这个数据库的权限。

  4. 登录

    你在本地局域网登陆的时候,其实是可以登录了。因为局域网可以访问你本地的数据库,可以直接与你的网关进行通信。但是,别人找不到你的网关啊,你的网关在局域网里面。除非你装网线的时候叫师傅帮你装个公网IP哈哈。

进行内网穿透

​ 下面就比较简单了,就是借外部服务器打造一个简单的反向代理环境,让你的电脑好像能被访问成外网。(外部服务请求先发送到服务器,再通过相应的连接端口转发给本机)

​ 这里推荐一个工具,叫ngrok(国内为小米球)。一包卫龙解决代理问题。

​ 这里提供一下简单的两个bat,一个是mysql启动,一个是mysql启动+ngrok启动。

1
2
3
4
5
@echo OFF
:START
echo.
Ngrok.exe -config Ngrok.conf -log=Ngrok.log -log-level=info start-all
goto TUNNEL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"


@echo off

set /p msg=MySQL Service - Y for open, N for close:
echo off
if %msg% == Y goto start
if %msg% == y goto start
if %msg% == N goto stop
if %msg% == n goto stop

:start
net start MySQl

set /p msg=Ngrok - Y for open, N for close:
echo off
if %msg% == N goto end
if %msg% == n goto end
cd /d D:\Gadgets\Ngrok
call start_Ngrok.bat
goto end

:stop
net stop MySQl

:end

echo bye
pause