0%

如何使用MySQL-Proxy使MySQL实例可以通过外网访问?

产品在demo阶段,我们往往把各种服务都装在一台主机上面,如web服务,数据库服务等。但在生产环境上运行应用时,我们还是得把web服务和数据库服务分开。我们在使用Ucloud或阿里云提供的云数据库时,往往是不能直接在外网通过数据库管理工具(如:MysqlWorkBench)来管理数据库的,因为云数据库服务只提供给我们一个内网的ip。

鉴于MySQL实例不能通过外网IP直接访问,可使用MySQL-Proxy将MySQL实例跳转至云主机(UHost)的端口进行访问。今天我们先不谈MySQL-Proxy的读写分离的问题。

在云主机(UHost)安装MySQL-Proxy:

1
yum install mysql-proxy

也可以从官网下载解压后直接运行。
地址:http://dev.mysql.com/downloads/mysql-proxy/

安装结束后,可通过如下命令查看相关信息:

1
mysql-proxy -V

查看MySQL-Proxy帮助选项:

1
mysql-proxy -help -all

MySQL-Proxy默认端口为4040,通过访问4040端口就可以访问3306端口。

使用命令行开启MySQL-Proxy,步骤如下:

1
2
3
touch /etc/mysql-proxy.cnf

vim /etc/mysql-proxy.cnf

输入如下内容:

1
2
3
4
5
6
7
8
9
10
[mysql-proxy]
admin-username=root # admin用户名(可以不填)
admin-password=password # admin密码(可以不填)
admin-lua-script=/usr/lib64/mysql-proxy/lua/admin.lua #lua位置,参见上面的版本信息(可以不填)
daemon=true # mysql-proxy以守护进程方式运行(这项填了以后会报错,目前没找到原因,可以在运行时通过nohup在后台运行)
keepalive=true # 保持连接启动进程会有2个, 一号进程用来监视二号进程
proxy-address=:4044 # 监听端口,默认为4040
proxy-backend-addresses=10.6.X.XX # 目标地址,udb内网地址,默认端口3306
log-file=/var/log/mysql-proxy.log
log-level=debug

配置文件保存后需要改变权限:

1
chmod 0660 /etc/mysql-proxy.cnf

启动:

1
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

使用kill命令可以将程序终止。

在外网环境测试:

1
mysql -h$uhost_ip -P4040 -u$User -p$Password

$uhost_ip为UHost的外网IP。

注意:

需要在UCloud管理控制台中,打开云主机(UHost)的4040端口。