2011-01-24 2 views
2

동일한 서버에서 여러 데이터베이스가 실행되는 경우가 있습니다. 각 클라이언트 (회사 1, 회사 2 등)에 대해 하나의 데이터베이스가 있습니다. 이러한 각 데이터베이스의 구조는 동일한 테이블 등으로 동일해야하지만 각 데이터베이스에 포함 된 데이터는 달라집니다.다른 데이터베이스의 구조를 제어하기 위해 master 데이터베이스 설정

데이터를 포함하지 않는 마스터 db를 유지하면서 다른 모든 데이터베이스의 구조를 관리합니다. 즉, 마스터 db의 테이블을 추가, 제거 또는 변경하면 변경 사항도 미러링됩니다. 밖으로 다른 데이터베이스.

예제 : Table1이라는 테이블이 마스터 DB에 생성되면 다른 데이터베이스 (company1, company2 등)도 table1을 가져옵니다.

현재는 master 데이터베이스에 대한 변경 사항을 모니터링하고 다른 데이터베이스 각각에 대해 동일한 쿼리를 실행하는 데이터베이스 로그를 모니터링하는 스크립트에 의해 수행됩니다. 데이터베이스 복제를 살펴 보았지만 이것이 이해되면 마스터 데이터베이스의 데이터도 가져올 것입니다.이 경우 옵션이 아닙니다.

데이터베이스 스키마에 대해 일종의 논리를 사용할 수 있습니까?

그래서 basicly 내가 여기 부탁 해요 것입니다 :

  1. 가 어떻게이 동기화가 최선의 방법으로 그렇게 할 수 있습니까? 변경 사항이나 다른 방법으로 로그를 모니터링하는 스크립트를 사용해야합니까?

  2. 테이블이 변경되면 기존 데이터가 손상되는 것을 어떻게 방지합니까? (테이블을 떨어 뜨리면 데이터가 제거됩니다.)

  3. master 데이터베이스와의 동기화가 바람직한 방법으로 간주됩니까 (여러 데이터베이스에서 유지 관리가 쉬운 구조)?

  4. 이러한 업데이트는 어떻게 데이터베이스 성능에 영향을 줍니까?

희망 사항이 명확하고 다른 스레드와 중복되지 않습니다. 추가 정보 및/내 문제의 더 나은 explantion이 필요하거나 알려 경우 :

+0

ServerFault에 대한 가능한 대답은 http://serverfault.com/questions/176936/mysql-replicate-structure-only입니다. – sreimer

답변

0

를 다음을 사용하여 주어진 스키마 테이블의 목록을 얻을 수 있습니다

select TABLE_NAME from information_schema.tables where TABLE_SCHEMA='<master table name>'; 

사용을 스크립트에 대한 목록을 또는 저장 프로 시저 람은 :

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'DB에 트리거를 넣을 수 있습니다. 삽입물을 찾아 그에 따라 대응하십시오.

관련 문제