2011-01-24 50 views
2

我得到了一個情況,我有幾個數據庫在同一臺服務器上運行。每個客戶端有一個數據庫(company1,company2等)。每個數據庫的結構應該與相同的表等相同,但每個數據庫中包含的數據將會不同。設置主數據庫來控制其他數據庫的結構

我想要做的是保持一個主數據庫,將不包含數據,但管理所有其他數據庫的結構,這意味着如果我添加,刪除或更改主數據庫中的任何表的變化也將被鏡像到其他數據庫。

例如:如果在主數據庫中創建一個名爲Table 1表,其他數據庫(公司1,Company2的等)也將獲得表1。

目前,它是由監視到主數據庫的運行在每個其他數據庫的查詢相同更改數據庫日誌的腳本來完成。看着數據庫複製,但從我的理解,這也將帶來從主數據庫的數據,這不是在這種情況下的選項。

我可以用某種邏輯與數據庫架構做呢?

所以basicly我問這裏是什麼:

  1. 我如何以最好的方式此同步發生的呢?我應該使用腳本監視日誌以進行更改還是使用其他方法?

  2. 如何避免現有的數據,如果一個表被改變越來越損壞? (如果表被丟棄,數據會被刪除)

  3. 從master數據庫同步被認爲是一種很好的方式來做我想做的事(在幾個數據庫中有一個易於維護的結構)?

  4. 怎麼會做出這樣的更新會影響數據庫的性能?

希望我的問題很清楚,並且這不是其他一些線程的重複。如果有更多的信息和/或需要我的問題的一個更好的explantion,讓我知道:)

+0

上ServerFault http://serverfault.com/questions/176936/mysql-replicate-structure-only可能的答案 – sreimer 2011-01-24 17:12:12

回答

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」分貝,將調用「創建/維持」腳本。尋找插入並作出相應的反應。