mysql-proxy安装 连接内网云数据库UDB

参考:https://blog.csdn.net/weixin_34221332/article/details/94051340

1、购买了的云数据库UDB。位于广东区。 

2、Mysql云数据库可以很容易的建立Slave库(需另外购买从库),自动实现读写分离和负载均衡。因为从库属于主库,课用同一个ip访问,平台底层自动实现读写分离。

3、云数据库UDB没有外网IP不能直接访问。可以找一个有外网IP的云主机UHost,安装mysql-proxy,通过mysql-proxy将云主机的某一端口上访问请求转发给后面的云数据库UDB。

4、必须找同一平台、同一可用区的云主机UHost安装。比如云数据库UDB位于广东区,云主机UHost最好也要位于广东区,因为其内网要能ping通。我有一个上海区的UHost,怎么装都无法启动mysql-proxy,最终是因为这个云主机无法连接到广东区的云数据库UDB。

5、mysql-proxy只支持http方式连接数据库。不支持jdbc那种socket连接的方式。

https://stackoverflow.com/questions/6544635/mysql-connect-via-proxy-in-java

Try using socksProxyHost and socksProxyPort system properties. Look here at chapter "2.4) SOCKS" and here. (The http.proxyHost will not work with JDBC.)

 

1、安装mysql-proxy(以CentOS 7.6为例

[root@10-13-4-243 ~]# yum install mysql-proxy

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

[root@10-13-4-243 ~]# mysql-proxy -V
mysql-proxy 0.8.5
  chassis: 0.8.5
  glib2: 2.36.3
  libevent: 2.0.21-stable
  LUA: Lua 5.1.4
    package.path: /usr/lib64/mysql-proxy/lua/?.lua
    package.cpath: /usr/lib64/mysql-proxy/lua/?.so
-- modules
  proxy: 0.8.5

2、配置mysql-proxy

此服务默认缺省端口为4040

可以使用命令行开启,最好使用配置文件,配置文件内容如下:此配置只配置了代理功能,并没有配置读写分离

[root@10-13-4-243 ~]# vim /etc/mysql-proxy.cnf

[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 = mysql-proxy

#
#Proxy Configuration
#proxy-address = 0.0.0.0:3307 # 这里我们注释这一行,代理端口就默认改为了4040,也可以不改,后面连接端口就改为3307就可以了。
proxy-backend-addresses = 10.13.7.185  # 内网的数据库地址,默认3306端口
#proxy-read-only-backend-addresses =
#proxy-lua-script =
#proxy-skip-profiling = true
#

# Admin Configuration
# admin-address = 0.0.0.0:4041 # 监听端口是4041
admin-lua-script = /usr/lib64/mysql-proxy/lua/admin.lua
admin-username = name  # 数据库用户名
admin-password = pwd  # 数据库密码

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

chmod 0660 /etc/mysql-proxy.cnf

3、启动:

[root@10-13-4-243 ~]# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

查看是否启动成功:

[root@10-13-4-243 ~]# netstat -anplut|grep mysql-proxy
tcp        0      0 0.0.0.0:4040            0.0.0.0:*               LISTEN      1641/mysql-proxy    
tcp        0      0 0.0.0.0:4041            0.0.0.0:*               LISTEN      1641/mysql-proxy    

4、报错情况

[root@localhost ~]# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
2018-12-28 20:49:35: (critical) Key file contains key 'daemon' which has value that cannot be interpreted.
2018-12-28 20:49:35: (message) Initiating shutdown, requested from mysql-proxy-cli.c:367
2018-12-28 20:49:35: (message) shutting down normally, exit code is: 1

可能的原因

1、云主机的4040端口要开

2、云主机可以连接到UDB,或ping通

3、配置有问题。如果采用了ucloud文档里面的配置,启动肯定是失败的,会报上面的错误。ucloud的配置如下

    [mysql-proxy]

    admin-username=root    #admin用户名

    admin-password=123fsck    #admin密码

    admin-lua-script=/usr/lib64/mysql-proxy/lua/admin.lua    #lua位置,参见上面的版本信息

    daemon=true        # mysql-proxy以守护进程方式运行

    keepalive=true        #保持连接启动进程会有2个, 一号进程用来监视二号进程

    proxy-backend-addresses=10.6.X.XX  #目标地址,udb内网地址,默认端口3306

    log-file=/var/log/mysql-proxy.log

    log-level=debug

5、后来需要安装docker。在 yum update 更新了yum包,并安装了docker后,mysql-proxy就无法启动了

2020-08-09 20:31:04: (critical) plugin admin 0.8.5 started
2020-08-09 20:31:04: (critical) plugin proxy 0.8.5 started
2020-08-09 20:31:04: (debug) max open file-descriptors = 1024
2020-08-09 20:31:04: (message) admin-server listening on port :4041
2020-08-09 20:31:04: (message) proxy listening on port :4040
2020-08-09 20:31:04: (critical) getaddrinfo("10.13.7.185  # 内网的数据库地址,默认3306端口") failed: Name or service not known (-2)
2020-08-09 20:31:04: (critical) chassis-mainloop.c:270: applying config of plugin proxy failed
2020-08-09 20:31:04: (critical) mysql-proxy-cli.c:599: Failure from chassis_mainloop. Shutting down.
2020-08-09 20:31:04: (message) Initiating shutdown, requested from mysql-proxy-cli.c:600

在getaddrinfo时,解析失败,看了很长时间,感觉是这个方法把mysql-proxy.cnf文件里的,地址和后面的文字都作为地址来解析了,所以才失败。然后把“#内网的数据库地址,默认3306端口” 这段文字去掉,就能成功启动了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值