mysqlrouter使用
May 16, 2023
What #
mysqlrouter
是一个代理,可以将查询转发到配置好的数据库服务里。
Why #
在办公室网络环境下基于win10 wsl2
开发应用时,需要连接到主机所在局域网的其它机器上的数据库服务。
也就是说,存在机器:wsl2、主机、其它机器。
wsl2
通过NAT
网络模式与主机
互通,并且wsl2
可以访问外网。
但是wsl2
不能访问到其它机器
上的数据库服务,不知道是不是办公室网络环境存在限制。
为了使得wsl2
能访问到其它机器
上的数据库服务成立,在主机
启动mysqlrouter
充当代理,然后wsl2
通过访问代理来访问其它机器
。
Install #
可以使用mysql installer
选择安装。
简单模式 #
配置文件(mysqlrouter.conf):
[DEFAULT]
logging_folder = D:/Data/mysqlrouter/log
plugin_folder = C:/Program Files/MySQL/MySQL Router 8.0/lib # 这里是插件所在目录,必须是mysqlrouter安装路径下的目录,否则报错找不到插件
config_folder = D:/Data/mysqlrouter/etc # 启动配置默认查找目录,会在目录里寻找mysqlrouter.conf文件
runtime_folder = D:/Data/mysqlrouter/run
data_folder = D:/Data/mysqlrouter/data
[logger]
level = DEBUG
[routing:primary]
bind_address=172.20.96.1 # 主机ip地址
bind_port=6446 # 主机监听端口
destinations = 172.17.39.239:3306 # 目标机器,也就是实际执行查询的数据库服务所在机器的地址
mode = read-write
connect_timeout = 10
启动:mysqlrouter -c D:\Data\mysqlrouter\etc\mysqlrouter.conf
关闭防火墙或者配置规则允许端口通过。
在wsl2
机器上访问:mysql -h 172.20.96.1 -P 6446 -uroot -p
,即可访问到172.17.39.239:3306
机器上的数据库服务。
问题 #
报错:Error: Loading plugin... 找不到指定的程序。
mysqlrouter -c D:\Data\mysqlrouter\etc\mysqlrouter.conf
Error: Loading plugin for config-section '[routing:primary]' failed: D:/Data/mysqlrouter/lib/routing.dll: 找不到指定的程序。
PS D:\Project>
PS D:\Project> mysqlrouter_plugin_info D:/Data/mysqlrouter/lib/routing.dll routing
[ERROR] Could not load plugin file 'D:/Data/mysqlrouter/lib/routing.dll': 找不到指定的程序。
解决:需要将plugin_folder
配置的值改为mysqlrouter安装路径下的目录
。
其它代理 #
如果只是针对mysql
,则使用mysqlrouter
即可,但如果还有其它服务,则还不够。
goproxy #
这时,可以使用
goproxy
。
注意,这个项目的源码不是最新的(直接使用基于源码构建出来的proxy
会有与文档不一致的表现),需要去
下载最新的二进制执行文件.
解压后执行,即可启动代理,如下述命令将启动一个代理,其监听本地33080
端口,并将请求转发到172.17.39.239:3306
目标机器:
.\proxy.exe tcp -p ":33080" -T tcp -P "172.17.39.239:3306"
访问sqlserver #
通过代理(不同的端口)连接172.17.39.239
机器上的sqlserver
:
.\proxy.exe tcp -p ":33081" -T tcp -P "172.17.39.239:1433"
加密 #
如果要生成密钥,必须在linux
环境下使用proxy keygen
生成密钥(在windows
环境里会报错)。
自定义tcp代理 #
地址.
下载源码:git clone git@github.com:donnol/do.git
安装: go install ./cmd/letgo
使用: letgo proxy –remoteAddr=“172.17.39.239:3306”
默认监听端口54388
,将收到的数据转发到指定的地址:172.17.39.239:3306
。
可通过监听不同的端口转发数据到不同的地址。