“一对多数据库”中的数据库结构复制

时间:2013-01-29 23:03:43

标签: mysql replication

我正在研究一些我想称之为复制的东西,但可能还有一些其他的技术词汇 - 因为据我所知,“复制”是将结构及其数据完全复制到奴隶。我只想要结构复制。我的术语可能是错误的,这就是为什么我似乎无法自己找到答案。

是否可以设置一个mysql环境,在更改,添加或删除时,将主结构复制到多个本地数据库?我正在寻找一种解决方案,其中每个用户都拥有自己的数据库实例,并拥有自己独特的数据,但具有相同的表结构。当对主结构进行更新时,每个用户数据库都应该复制相同的过程。

E.g。正在添加 master.table1 的列,该列由 user1.table1 user2.table1 复制。

我的第一个想法是在PHP中编写一个更新程序,但感觉这是一个内置于数据库的非常基本的功能,因为我的结论是索引查找会更快,数据更少(〜总计)数据由用户划分)并且可能更安全(没有不幸的泄漏,如果有的话)。

2 个答案:

答案 0 :(得分:1)

您可能需要考虑使用数据库“迁移”,这是由Ruby on Rails框架推广的。 This Google search for PHP database migrations可能是你的起点。

概念是,在开发应用程序并进行架构更改时,可以创建SQL迁移脚本以前滚或回滚架构更改。这使得很容易“迁移”您的数据库模式以使用特定的代码版本(例如,如果您在需要每个需要不同版本的数据库的多个环境中处理分支代码)。

这不会像您建议的那样自动进行更新,但肯定是朝着正确方向迈出的一步。还有像Toad for MySQL和Navicat这样的工具,它们对模式同步有一定程度的支持。但同样,这些将是手动比较/同步。

答案 1 :(得分:1)

我为数据库中的每个更改使用简单的SQL脚本集解决了这个问题,名为year-month-day-description.sql,它以字典顺序运行(这就是为什么它以date开头)。

当然你不想每次都运行它们。因此,要知道我需要执行哪些脚本,每个脚本都有简单的插入,它将脚本的文件名插入到数据库的表中。因此更新程序PHP脚本只是创建脚本列表,在表中删除它们并运行其余的脚本。

这个解决方案很好,您也可以包含数据转换。而且,它可以是全自动的,只要脚本没问题,就不会发生任何不好的事情。