如何使用 MySQL Proxy 代理同一台服务器上不同命名的数据库?

如何使用 MySQL Proxy 代理同一台服务器上不同命名的数据库?

我希望我的 MySQL 服务器上有两个数据库:

  • 开发数据库
  • 设备数据库

但是,为了防止每个人的脚本、查询浏览器设置和其他任何内容在我们从使用一个数据库切换到另一个数据库时发生变化,我希望每个人都连接到 DEV_DB,然后使用类似 MySQL Proxy 的东西运行一个 lua 脚本,该脚本知道当前活动的数据库是 DEV_DB_A 并将查询路由到那里。如果我们将数据库的新版本恢复到 DEV_DB_B 或进行一些更改(例如对表进行分区),我们可以通过更改一个 Lua 脚本轻松切换到 DEV_DB_B,而不是到处更新引用。

我曾希望能够在 mysql 数据目录内进行符号链接,但是那不起作用,所以看来 MySQL Proxy 是一种合理的方法。

作为 Lua 和 MySQL Proxy 的新手,我想知道是否有其他人通过这种方式解决该问题以及它是如何工作的。

答案1

使用 MySQL Proxy 实际上是尝试解决 MySQL 中缺少的 RENAME DATABASE 功能的一种方法。此功能曾经存在,但当它被证明不可靠时被删除

最后我解决了这个问题,可以通过对每个表发出 RENAME TABLE DEV_DB_A.table1 到 DEV_DB_B.table1 语句来解决。我发现的唯一问题是 RENAME 具有触发器的表失败,因为MySQL 网站上有描述

为了方便起见,我写了一个小的python脚本来帮我做这个工作。当我看到这是一个别人的问题我添加了一些基本的错误检查和选项,使其更易于使用,并已将其发布给其他人github

答案2

使用 MySQL Proxy 之类的工具来抽象数据库有很多好处。最主要的好处是无需更改应用程序即可进行查询操作。不过,高可用性和冗余解决方案通常最好使用其他技术来解决。

根据您的描述,您似乎希望能够动态移动数据库设备而无需更改应用程序。要实现这一点,只需为您的数据库指定一个 IP 别名 (VIP) 即可。MySQL 不绑定到接口,这使得 IP 重新定位可以透明地完成,对 MySQL 和您的应用程序也是如此。

如果您有其他要求,请进一步描述,我可能会为您提供其他替代方案。

相关内容