如何在亚马逊EC2上的Ubuntu系统中设置和配置MySQL代理

3

我正在尝试在亚马逊EC2上的Ubuntu系统上设置MySQL代理。我已经完成以下步骤:

sudo apt-get install mysql-proxy --yes
vi /etc/default/mysql-proxy

我将以下内容放在"/etc/default/mysql-proxy"上。
ENABLED="true"
OPTIONS="--proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua
     --proxy-address=127.0.0.1:3306
     --proxy-backend-addresses=private_ip_of_another_ec2_db_server:3306,private_ip_of_another_ec2_db_server:3306"

还有一种方法是使用"--proxy-address=private_ip_or_public_ip_of_proxy-server:3306 or 4040"和"--proxy-backend-addresses=public_ip_of_another_ec2_db_server:3306,public_ip_of_another_ec2_db_server:3306"进行绑定。

之后,我尝试像这样使用mysql从另一台电脑连接代理服务器:

mysql -u some_user -pxxxxx -h proxy_server_ip
or 
mysql -u some_user -pxxxxx -h proxy_server_ip -P 4040

但它没有起作用,显示错误:

ERROR 2003 (HY000): Can't connect to MySQL server on 'ip' (10061)

我想告诉你,你可以远程连接数据库服务器,我允许任何主机进行远程连接。
我还尝试了 /etc/init.d/mysql-proxy start 或 /etc/init.d/mysql-proxy restart ,但没有结果。
只是想告诉你,/etc/init.d/mysql-proxy stop 显示失败。
请问有人能帮助我在 Ubuntu 上设置和配置 mysql-proxy 吗?
===
编辑
我从 Stack Overflow 的其他问题中找到了一些帮助,并根据评论中的建议,进行了以下步骤。现在它似乎正常工作了。
我在代理服务器上本地安装了 mysql-client 和 mysql-server,然后尝试使用以下命令运行 mysql-proxy:
mysql-proxy --proxy-backend-addresses=10.73.151.244:3306 --proxy-backend-addresses=10.73.198.7:3306 --proxy-address=:4040 --admin-username=root --admin-password=root --admin-lua-script=>/usr/lib/mysql-proxy/lua/admin.lua

然后我尝试远程连接到代理服务器,并且它可以工作。但是当我关闭终端时,代理停止工作,所以似乎需要在screen下运行此命令。

请问我是否需要在screen下运行此命令,或者有没有其他方法使其一直处于运行状态?


1
Win32错误代码10061:无法建立连接,因为目标计算机积极拒绝了它。 这与--proxy-address=127.0.0.1:3306完全一致。如果在配置中包含该选项,则代理将拒绝来自外部计算机的连接。不要远程测试,先本地测试,确保本地正常工作后再进行远程测试。 - Michael - sqlbot
测试远程配置,你建议使用哪种?通知你我没有在本地安装mysql客户端或服务器(我只安装了mysql代理)。 - user3011768
如果你不从本地测试开始,那么你会让自己变得更加困难。安装mysql-client...你迟早都需要它。另外,在启动代理时根本不要指定“--proxy-address”,代理应该默认监听所有可能的IP地址,TCP端口4040。注意在测试时得到的错误代码末尾的代码(例如你发布的示例中的10061)。以后,C:>perror 10061(替换任何不同的代码)将为你提供这个错误的翻译。 - Michael - sqlbot
Michael,请检查一下我问题的编辑部分,并给我建议。 - user3011768
2个回答

2

无需在mysql-proxy上安装Mysql客户端或Mysql服务器。

安装mysql-proxy时已经编译了“完整守护进程功能”。

如果您正在运行Ubuntu Server,可以使用UPSTART服务脚本。

该脚本可以复制到/etc/init/mysql-proxy.conf中。

# mysql-proxy.conf (Ubuntu 14.04.1) Upstart proxy configuration file for AWS RDS
# mysql-proxy - mysql-proxy job file

description "mysql-proxy upstart script"
author "shadowbq <shadowbq@gmail.com>"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
expect daemon

# Run before process
pre-start script
    [ -d /var/run/mysql-proxy ] || mkdir -p /var/run/mysql-proxy
    echo "starting mysql-proxy"
end script

# Start the process
exec /usr/bin/mysql-proxy --plugins=proxy --proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua --log-level=debug --proxy-backend-addresses=private_ip_of_another_ec2_db_server:3306,private_ip_of_another_ec2_db_server:3306 --daemon --log-use-syslog --pid-file=/var/run/mysql-proxy/mysql-proxy.pid

在上面的例子中,我将AWS RDS服务器硬编码到脚本中,而不是调整默认值和配置文件。

日志被重定向到 /var/log/syslog 以进行完整的调试,以帮助解决问题。请确保在生产环境中更改日志级别。 - shadowbq

1

安装升级版0.8.5

注意:

apt仓库没有0.8.5版本,因此我们需要从mysql官方网站下载tar文件。

先决条件 :-

创建文件/etc/default/mysql-proxy并添加以下内容 ENABLED="true" OPTIONS="--defaults-file=/etc/mysql/mysql-proxy.cnf"

安装步骤 :-

  1. 下载mysql-proxy 0.8.x
  2. 在/usr/local目录下解压
  3. 使用/usr/local/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit/bin更新PATH环境变量 vim /etc/environment (更新环境变量路径) cd /usr/local/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit/bin

  4. 运行命令sudo ./mysql-proxy --defaults-file=/etc/mysql/mysql-proxy.cnf

示例mysql-proxy.cnf文件

[mysql-proxy]
log-level=debug
log-file=/var/log/mysql-proxy.log
pid-file = /var/run/mysql-proxy.pid
daemon = true
--no-proxy = false
admin-username=ADMIN
admin-password=ADMIN
proxy-backend-addresses=RDS-ENDPOINT:RDS-PORT
admin-lua-script=/usr/lib/mysql-proxy/lua/admin.lua
proxy-address=0.0.0.0:4040
admin-address=localhost:4041
  1. 更改RDS或mysql的主机IP和端口

  2. 通过代理连接到Mysql服务器,使用

    mysql -h {proxy-host-ip} -P 4040 -u {mysql_username} -p


只有升级版本的mysql代理0.8.5才能与最新的mysql良好配合。因此,在升级后,它的功能良好。请按照上述步骤操作。 - devzone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接