Mysql-proxy代理内网数据库
Mysql-proxy
参考:https://segmentfault.com/q/1010000000394160
情景分析:首先您需要正在使用UCloud云主机(uhoust)以及云数据库(udb)。
鉴于udb无外网ip不能直接访问,可利用mysql-proxy将udb跳转到云主机的某一端口上进行访问,方便客户操作。
1. 安装mysql-proxy
[root@localhost ~]# yum install mysql-proxy
查看版本:
[root@localhost ~]# mysql-proxy -V
mysql-proxy 0.8.5
chassis: 0.8.5
glib2: 2.28.8
libevent: 1.4.13-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
配置mysql-proxy
大家也可以mysql-proxy -help-all查看它的帮助选项
此服务默认缺省端口为4040,也就是通过访问4040就能访问目标3306
但是新版mysql-proxy已经将4040改为了3307,默认3307。
可以直接命令开启服务,不过推荐使用配置文件,步骤如下:
[root@localhost ~]# 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.41.1.2 # 内网的数据库地址,默认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 = root # 数据库用户名
admin-password = rootdbpassword # 数据库密码
写好配置文件保存后需要改变权限,以上配置是由mysql-proxy自动生成的,所以权限已经是660了,可以查看一下:
[root@localhost ~]# ll /etc/mysql-proxy.cnf
-rw-rw---- 1 root root 519 Aug 10 2016 /etc/mysql-proxy.cnf
如果不是,用以下命令修改。
[root@localhost ~]# chmod 0660 /etc/mysql-proxy.cnf
3. 启动进程
[root@localhost ~]# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
查看是否启动成功:
[root@localhost ~]# netstat -anplut|grep mysql-proxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 28110/mysql-proxy
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28110/mysql-proxy
若关闭kill命令把程序终止
4. 打开防火墙端口
需要在UCloud管理控制台中 打开云主机3307端口。
5. 测试
在外网环境,另一台主机:
[root@localhost ~]# mysql -u root -p -P3307 -h host
host为uhoust外网ip
6、错误分析
错误1、
[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
配置不对,可能用了网上的配置比如:
[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
用这段配置就会报上述错误,版本不一样。新版mysql-proxy会自动生成/etc/mysql-proxy.cnf配置,我们修改相应字段就好了。如上述步骤2。
错误2、
[root@localhost ~]# mysql -hxx.xx.xx.xx -P4041 -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11690111
Server version: 5.6.20-ucloudrel1-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
ERROR 1105 (07000): use 'SELECT * FROM help' to see the supported commands
mysql> use mysql;
ERROR 1105 (07000): [admin] we only handle text-based queries (COM_QUERY)
mysql> select * from mysql.user;
ERROR 1105 (07000): use 'SELECT * FROM help' to see the supported commands
mysql> select * from help
-> ;
+------------------------+------------------------------------+
| command | description |
+------------------------+------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
+------------------------+------------------------------------+
2 rows in set (0.14 sec)
mysql> select * from backends
-> ;
+-------------+-------------------+---------+------+------+-------------------+
| backend_ndx | address | state | type | uuid | connected_clients |
+-------------+-------------------+---------+------+------+-------------------+
| 1 | 10.41.1.2:3306 | unknown | rw | NULL | 0 |
+-------------+-------------------+---------+------+------+-------------------+
1 row in set (0.18 sec)
这是因为一开始我们用了这样的配置:
[root@localhost ~]# 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
proxy-backend-addresses = 10.41.1.2
#proxy-read-only-backend-addresses =
#proxy-lua-script =
#proxy-skip-profiling = true
#
# Admin Configuration
# admin-address = 0.0.0.0:4041
admin-lua-script = /usr/lib64/mysql-proxy/lua/admin.lua
admin-username = root
admin-password = rootdbpassword
以上两点不一样,此时我们查看mysql-proxy进程,会发现
[root@localhost ~]# netstat -anplut|grep mysql-proxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 28110/mysql-proxy
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28110/mysql-proxy
这里,这个配置是新版的mysql-proxy配置,如上述所示,此时mysql-proxy的代理端口是3307,监听端口是4041,但是你的进程连接的却是这个监听端口,所以会报上述错误。此时,我们只需要将连接端口改为3307就可以了。(老版mysql-proxy的端口是4040.)
[root@localhost ~]# mysql -hxx.xx.xx.xx -P4041 -uroot -p
改为===》
[root@localhost ~]# mysql -hxx.xx.xx.xx -P3307 -uroot -p
错误就解决了。
Mysql-proxy代理内网数据库的更多相关文章
- 通过ssh管道连接内网数据库(mysql)
公网连接内网数据库(如云数据库)时,通常需要白名单:如果不是白名单IP,通常需要一个跳板机(类似代理)来连接内网数据库, 下方以mysql为例(其他数据库基本一致): import pymysql a ...
- mysql proxy代理安装和配置
mysql proxy代理安装和配置 服务器说明: 192.168.1.219 mysql主库(主从复制) 192.168.1.177 mysql从库(主从复制) 192.168.1.202 ...
- 代理内网上网-iptables
代理内网上网-iptables 1.1 环境说明 主机A:(能上网) ip:内172.16.1.7/24 外10.0.0.7/24 系统CentOS 6.9 主机B:(不能上网) ip:内172.16 ...
- holer实现外网访问内网数据库
外网访问本地数据库 本地安装了数据库,只能在局域网内访问,怎样从公网也能访问内网数据库? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装并启动数据库 默认安装的数据库端口是33 ...
- 通过mysql-proxy映射外网访问内网数据库
配置教程: 转自:http://www.centoscn.com/mysql/2015/0107/4437.html centos安装mysql-proxy mysql-proxy的用处就不再说了 m ...
- [原创]K8飞刀20150725 支持SOCKS5代理(内网渗透)
工具: K8飞刀编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/7/26 3:41:11 简介: ...
- iptables之NAT代理-内网访问外网
1.前言 本文使用NAT功能:内网服务器,想上网又不想被攻击. 工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做 ...
- 【docker-compose】使用docker-compose启动spring-boot+mysql,服务内连数据库报错:create connection SQLException, url: jdbc:mysql://mysql:33061/swapping?useSSL=false&useUnicode=true&characterEncoding=UTF-8, errorCode 0,
完整配置在这里, https://www.cnblogs.com/sxdcgaq8080/p/10070948.html 启动报错如下: 2018-12-05 01:04:05.569 ERROR 1 ...
- CentOS squid代理内网主机上网 openVpn配置
随机推荐
- Java的JAR包, EAR包 ,WAR包 都是干什么的,有什么区别
JAR包:打成JAR包的代码,一般作为工具类,在项目中,会应用到N多JAR工具包: WAR包:JAVA WEB工程,都是打成WAR包,进行发布,如果我们的服务器选择TOMCAT等轻量级服务器,一般就打 ...
- 关于uboot的一些优化
转载于:http://blog.163.com/solylee@126/blog/static/1718231572010101910485331/ 本人的开发环境是u-boot-1.1.6版本,fe ...
- C++知识点总结(6)
1.double和float的存储方式 float遵从的是IEEE R32.24 ,而double 遵从的是R64.53.无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表 ...
- PHP中几种加密形式
1.Md5加密和Crypt都是单向加密: 登陆时把登录密码转为md5值,然后和数据库中的进行比较. 其中crypt中的盐值支持多种: 以CRYPT_STD_DES是以/0-9A-Za-z/中的两个字符 ...
- 【摘自lvs官网】lvs介绍
Linux Virtual Server项目的目标 :使用集群技术和Linux操作系统实现一个高性能.高可用的服务器,它具有很好的可伸缩性(Scalability).可靠性(Reliability)和 ...
- windows xp版本的chrome浏览器去哪里下载呢?
http://www.265.com/chrome-download/?slice 265没记错的话应该是GOOGLE的一个导航网站吧,所以可信度是比较高的.
- p3634 [APIO2012]守卫
传送门 分析 1.先预处理出不被0覆盖的点,然后对每个点处理出在它左边离他最近的点和在他右边理他最近的点. 2.对于每个至少存在一个忍者的区间,先将它左右边界处理为不被0所覆盖.排序后将包含其他区间的 ...
- 本地方法中printf如何传给java--java系统级命名管道
本地方法中printf如何传给java--java系统级命名管道 摘自:https://blog.csdn.net/dog250/article/details/6007301 2010年11月13日 ...
- 学会使用postman工具模拟请求-----待补充
登录: backstop 密码:backstop的密码 记得加上header,在swagger中有content-type. 请求,则是api下对应的请求. get请求直接加入链接即可. post请求 ...
- TCP/IP的三次握手和四次放手
一开始个人对于三次握手和四次挥手这个东西还是有时候会忘记,可能理解的不是非常深刻,所以今天就自己动手来记录一下这个知识点,方便以后查看.总结完之后发现总结的还是可以的哈哈. 三次握手建立连接 第一次: ...