mysql-proxy 代理让内网数据库被有限制的访问
最近公司有个 A高校 的数据迁移需求,数据库为mysql和mongodb
- 数据从原来 A高校 课程中心迁移到 新平台,新平台为本公司平台
- 本公司的数据库在内网,平时开放的时候需要安装vpn访问
- 迁移数据时,需要在 A高校 的内网访问数据
- A高校 无法访问外网(哈哈哈),只能开通到端的外网访问,也就是访问指定ip指定端口
这个需求本身还复杂很多,这里只是写一下解决这个数据访问的问题
- 对外机器 外网ip 18.1136.1835.414 【仅为实例,非真实】
- 内网数据库地址 mysql2.proxy.xx.com:1234 mysql登录账户 root 密码123456 【仅为实例,非真实】
下载mysql-proxy
https://downloads.mysql.com/archives/proxy/ 下载对应版本的gz
cd /opt
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
tar -zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-debian6.0-x86-64bit mysql-proxy
编辑/etc/profile
文件 在环境变量中加入一下
LUA_PATH="/opt/mysql-proxy/share/doc/mysql-proxy/?.lua"
export LUA_PATH
export PATH=$PATH:/usr/local/mysql-proxy/bin
执行一下 source /etc/profile
重新加载一下环境变量
接下来是mysql-proxy配置文件
mkdir -p /opt/mysql-proxy/conf
vim /opt/mysql-proxy/conf/mysql-proxy.conf
mysql-proxy.conf内容如下
[mysql-proxy]
daemon = true
pid-file = /var/run/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = debug
max-open-files = 1024
plugins = admin,proxy
user = root
proxy-address = 0.0.0.0:3307
proxy-backend-addresses = mysql2.proxy.xx.com:1234
admin-lua-script = /opt/mysql-proxy/lua/admin.lua
admin-username = root
admin-password = 123456
- 含注释配置文件
[mysql-proxy]
daemon = true
pid-file = /var/run/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = debug
max-open-files = 1024
plugins = admin,proxy
user = root #当前启动服务的 Linux用户为root
proxy-address = 0.0.0.0:3307 #代理后mysql访问3307。所以最后我们访问的mysql就为 18.1136.1835.414:3307,账号、密码保持不变
proxy-backend-addresses = mysql2.proxy.xx.com:1234 #内网mysql的访问地址
admin-lua-script = /opt/mysql-proxy/lua/admin.lua
admin-username = root #内网mysql的访问用户
admin-password = 123456 #内网mysql的访问密码
修改mysql-proxy.conf权限,如果不修改后面会报错,需要660 的权限
chmod 660 mysql-proxy.conf
- 启动mysql-proxy服务
/opt/mysql-proxy/bin/mysql-proxy --defaults-file=/opt/mysql-proxy/conf/mysql-proxy.conf
最后因为是阿里云的服务器,所以还得要去开放防火墙和安全组
netstat -tunlp
查看使用中的端口
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 12898/mysql-proxy
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 12898/mysql-proxy
在安全组中允许4041
3307
最后就能使用外网访问了。再将ip和端口 18.1136.1835.414:3307 告诉 A高校 信息中心的人开放 该ip和端口的上行权限
你还可以在阿里云的安全组中限制访问端口
4041
3307
的IP,具体参考安全组的配置