只有MySQL复制结构

我可以设置MySQL作为一个从属只有复制结构的变化? ( CREATE / ALTER TABLE等)。 我有两个原因:

  1. 具有开发分支的多个开发人员应该始终使用从“主”开发数据库获取的“新鲜”数据结构。
  2. 共享(部分)相同的代码/脚本(想象一个符号链接的“核心”目录),但具有不同数据库(每个客户端1个)的多个项目/客户端,其结构应该与共享部分中的代码更改同时更新的代码,最less的停机时间。

如果这是不可能的,还有什么其他好的方法来同步mysql-datastructures,而不需要跨站点/数据库/服务器的实际数据? 不,结构变化不会经常发生,但是有足够多的不同数据库,所以花费很长时间来同步所有的实例,而且我希望能够限制停机时间,把时间花在更有趣的工作上。

我通常使用mysqldump转储模式。 但是,我相信黑洞引擎可以按照你的描述使用。

您将所有表ALTERBLACKHOLEINSERTUPDATE ,并且DELETElogging不会影响数据,因为黑洞不会存储数据。

您可以skip-innodb并设置default-storage-engine=BLACKHOLE ,创build的所有表将默认为BLACKHOLE除了那些创build为MyISAM ,因为MyISAM不能被禁用。 您需要在主服务器上创build表时注意到这一点,因为您可能需要稍后将ALTER回到从服务器的BLACKHOLE

不过,你所描述的是一个pipe理问题,而不是一个技术问题。 我build议configuration至less两个开发数据库,​​由基础架构团队维护。

第一,将是一个发展数据库。 开发人员有更多的权限访问这个数据库,并定期刷新数据。

第二个数据库将是一个QA或testing环境,开发人员不会有RW访问权限。 这允许正确的分段。

这两个数据库都将由IT人员对数据库进行生产更改进行validation,并将作为生产的暂存过程的一部分,从而确保跨环境的一致模式。

如果你想让开发者拥有遍布全球的数据库,那么他们根本无法维护,他们有责任确保他们的数据集足够满足他们的需求。 您可以通过程序在共享驱动器上提供架构转储,也可以通过RO访问提供黑洞复制从服务器。

不幸的是,MySQL复制不允许这样做。 你可以做的是定期运行mysqldump -d ,它将转储数据库和表结构,但是省去数据。 然后,您可以将此结构导入到一个新的数据库。

man mysqldump

 --no-data, -d Do not write any row information for the table. This is very useful if you want to dump only the CREATE TABLE statement for the table. 

我们现在在这里工作。 作为对数据库进行任何更改的一部分,我们运行此命令并将其保存到文件并将其推送到源代码pipe理。 Devs简单地拉下文件并应用更改。

既然你提到了符号链接,我会假设MySQL或多个数据库的实例要么在同一台服务器上,要么可以访问相同的驱动器。

假设这我会试图将主人的.frm链接到奴隶的.frm。 通过这种方式,每当主站更新结构更改时,从站将自动更新,但不会共享数据。 我其实并没有尝试过,但理论上应该是有效的。

“每个MyISAM表都以三个文件的forms存储在磁盘上,这些文件的名称以表名开始,并有扩展名来表示文件types,一个.frm文件存储表格格式,数据文件有一个.MYD(MYData )扩展名索引文件有一个.MYI(MYIndex)扩展名。