mysql - 多个服务器上的常量

标签 mysql authentication refactoring constants credentials

问题是,如何更新一个常量?这听起来像是一个愚蠢的问题,但让我们看看我的问题的背景:

背景

我管理一个服务器网络,其中包括一个 MySQL 服务器、多个 HTTP 服务器和一个 Minecraft 服务器(安装了 Minecraft 的玩家可以连接到并一起玩的自托管服务器)。所有的用户端服务(HTTP服务器、Minecraft服务器、用户应用程序)都直接或间接与MySQL服务器相关。 MySQL数据库为每个玩家账户存储不同的数据,例如玩家的在线/离线状态等。

在编程中,常量用于创建对在运行时不会改变的值的一般引用。特别是对于软件内部标识符,例如数据标志、位掩码等。就我而言,我还使用常量来存储特定数据,例如 MySQL 服务器的地址和其他凭据。所以当我想改变服务器地址时,我只需要从一点修改它们,例如服务器内部的一个constants.php

问题

  1. 当我将 MySQL 数据库迁移到另一台主机或更改密码时,我必须更新每台服务器上的详细信息。不可能创建一个提供服务器地址的中心化数据提供者,因为MySQL服务器本身就是中心化数据提供者。这意味着,每次更改该值时,我都必须更新所有服务器。我还必须维护一个非常私密和本地的所有这些地方的列表(可能必须写在备忘录上并将其粘贴在我的计算机上!),因为很难找到所有这些引用资料。所以,我的问题是,是否有更好的管理方式可以让我从一个地方改变值(value)观?请注意,服务器位于不同的主机上,因此不可能将其放入本地文件中,并且创建一个集中式数据提供程序(称为密码提供程序)来提供数据听起来并不合理也可以访问真正的集中式数据提供商(MySQL),因为如果我需要更改 MySQL 数据库详细信息,我也同样需要更改密码提供商详细信息。
  2. 这不是一个问题。但由于这是一个类似的问题,我也将其放在这里。我使用整数位掩码来存储玩家排名。例如,如果玩家是 VIP,则他有一个 0x01 标志,如果玩家是主持人,他有一个 0x10 标志,以及 0x11 如果同时是 VIP 和版主,反之亦然。我也想重构位掩码值,但这会很麻烦,因为我需要关闭所有服务器并更新MySQL值,更新每台服务器上的常量,然后重新启动所有服务器,以避免期间潜在的安全漏洞的更新。有更方便的方法吗?

这也是一个网络管理问题,但我认为它更多地与编程相关。

最佳答案

  1. 我们正在谈论部署系统。例如我们可以使用 卡皮斯特拉诺:https://github.com/capistrano/capistrano 。我们需要 将constants.php保存到git并在capistrano中创建任务以进行部署 将此文件发送到每个服务器。我使用此工具来部署项目,这些项目是俄罗斯互联网部分最繁忙的 50 个站点之一:)

  2. 我们正在谈论数据迁移。所以有几种方法。其中有些会停机,有些则不会(有时取决于具体情况)。

无需停机即可进行数据迁移:

  1. 修改您的应用程序,使其能够理解旧版本的玩家位掩码 和新的
  2. 部署修改后的应用
  3. 将位掩码更新到您的数据库
  4. 修改您的应用,使其仅理解新的位掩码变体
  5. 部署修改后的应用

关于mysql - 多个服务器上的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666263/

相关文章:

asp.net - 如何禁用表单例份验证

ios - 登录后SwiftUI LoginView不会消失

python - 无法使用 pickle 和多个模块加载文件

android studio 3 beta 4.无法进行重构

java - 完整性检查 - 使用 JUNIT 时对象数量显着增加

php - 计算数据库中的行数?

php - MySQL查询不插入数据

refactoring - 是否可以使用 NDepend 来查找 OOP 语言中的类分区?

java - 将数据库数据转换为对象

PHP/mySQL 多维数组还是面向对象的方法?