我遇到了一个案例,我在同一台服务器上运行了几个数据库。每个客户端(company1,company2等)都有一个数据库。每个数据库的结构应该与相同的表等相同,但每个数据库中包含的数据将是不同的。
我想要做的是保留一个不包含数据的主数据库,但管理所有其他数据库的结构,这意味着如果我添加,删除或更改主数据库中的任何表,更改也将被镜像掉到其他数据库。
示例:如果在主数据库中创建了名为Table1的表,则其他数据库(company1,company2等)也将获得table1。
目前,它由一个脚本完成,该脚本监视数据库日志以查找对master数据库所做的更改,并在每个其他数据库上运行相同的查询。看看数据库复制,但从我的理解,这也将带来master数据库中的数据,在这种情况下不是一个选项。
我可以使用某种逻辑来对付数据库模式吗?
基本上我在这里问的是:
如何以最佳方式实现此同步?我是否应该使用监视日志以进行更改的脚本或其他方法?
如果表格被更改,如何避免现有数据损坏? (如果表被删除,数据会被删除)
从主数据库同步是否被认为是做我想做的好方法(在几个数据库中具有易于维护的结构)?
如何制作这样的更新会影响数据库的性能?
希望我的问题很清楚,这不是其他线程的重复。如果需要更多信息和/或更好地解释我的问题,请告诉我:)。
答案 0 :(得分:0)
您可以使用以下命令获取给定模式的表列表:
select TABLE_NAME from information_schema.tables where TABLE_SCHEMA='<master table name>';
将此列表用于脚本或存储过程ala:
create database if not exists <name>;
use <name>;
for each ( table_name in list )
create table if not exists <name>.table_name like <master_table>.table_name;
现在我想到了你可能会在'information_schema.tables'数据库上设置一个触发器来调用'create / maintain'脚本。寻找插入物并做出相应的反应。