본문으로 건너뛰기

보조 데이터베이스 추가하기

커뮤니케이션 서버를 추가했을 때 메인 서버의 부하를 줄이기 위해 커뮤니케이션 서버와 연동할 보조 데이터베이스를 추가하고 연결하는 방법을 안내합니다.

알아두기
  • 보조 데이터베이스를 추가하려면 멀티 커뮤니케이션 서버 라이선스가 필요합니다. 라이선스 정책에 대한 자세한 내용은 다음 문서를 참고하세요.

  • 커뮤니케이션 서버 설치에 대한 자세한 내용은 다음 문서를 참고하세요.

시작하기 전에

MariaDB를 사용하는 환경에서 데이터베이스 간 통신할 때 IP 주소가 아닌 도메인 또는 호스트 이름을 사용한다면 다음 안내 사항을 반드시 확인하세요.

  • IP 주소를 사용하지 않는다면 Create user 또는 Grant 등록이 불가능할 수 있습니다.

  • 도메인 또는 호스트 이름을 사용하여 통신한다면 반드시 localhost에 대해 user 및 권한 등록이 되어 있는지 확인하세요.

  • BioStar X를 간편 설치 방식으로 설치했다면 루트(root) 계정이 localhost로만 user 및 권한이 등록되어 있기 때문에 해당 서버의 IP 주소나 127.0.0.1로 추가 등록해야 합니다.

등록 방법

호스트가 127.0.0.1이고, User가 root인 계정에 대해서 비밀번호가 설정되어 있는지 확인하고, 설정되어 있지 않다면 반드시 비밀번호를 설정하고 권한을 부여하세요.

  1. 호스트가 127.0.0.1이고, User가 root인 계정에 대해서 비밀번호가 설정되어 있는지 확인하세요.

    SELECT * FROM mysql.user;

    빈칸이면 비밀번호가 설정되어 있지 않기 때문에 다음 항목에 있는 쿼리를 실행해서 비밀번호 추가 및 권한 부여를 반드시 진행하세요.

  2. 호스트가 127.0.0.1이고, User가 root인 계정에 대해서 비밀번호를 설정하고 권한을 부여하세요.

    ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1';

    CREATE USER '<Main DB AC User>'@'127.0.0.1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB AC User>'@'127.0.0.1';
    CREATE USER '<Main DB AC User>'@'::1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB AC User>'@'::1';

    CREATE USER '<Main DB TA User>'@'127.0.0.1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB TA User>'@'127.0.0.1';
    CREATE USER '<Main DB TA User>'@'::1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB TA User>'@'::1';

    CREATE USER '<Main DB VE User>'@'127.0.0.1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB VE User>'@'127.0.0.1';
    CREATE USER '<Main DB VE User>'@'::1' IDENTIFIED BY '<Main DB AC Schema Password>';
    GRANT ALL PRIVILEGES ON *.* TO '<Main DB VE User>'@'::1';

    FLUSH PRIVILEGES;
    Example
    ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'admin1234!';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1';
    FLUSH PRIVILEGES;

IP 주소로 통신 설정

아래 설정을 통해 강제로 IP 주소로 통신하도록 설정할 수 있습니다.

  1. BioStar X를 설치한 다음 경로로 이동하세요.

    C:\Program Files\BioStar X\ta\mariadb-11.4.4-winx64

  2. my.cnf 파일을 권리자 권한으로 열고 [mysqld] 섹션에 skip-name-resolve 옵션을 추가하세요.

    [mysqld]
    port = 3312
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    socket = /tmp/mysql.sock
    skip-external-locking
    key_buffer_size = 32M
    max_allowed_packet = 64M
    ...
    skip-name-resolve
  3. MariaDB 서비스를 재시작하세요.

보조 데이터베이스 추가

보조 데이터베이스를 추가하는 방법을 안내합니다. 사용하는 데이터베이스 종류에 따라 MariaDB와 SQL Server, 두 가지 방법이 있습니다.

MariaDB

메인 데이터베이스

신규 보조 데이터베이스에서 메인 데이터베이스로 접근할 수 있도록 계정 및 권한을 부여하세요.

CREATE USER '<Main DB AC Schema User>'@'<Sub DB IP>' IDENTIFIED BY '<Main DB AC Schema Password>';

GRANT ALL PRIVILEGES ON <Main DB AC Schema>.* TO '<Main DB AC Schema User>'@'<Sub DB IP>';
FLUSH PRIVILEGES;
Example
CREATE USER 'biostarx_ac_user'@'192.168.12.42' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON biostar2_ac.* TO 'biostarx_ac_user'@'192.168.12.42';
FLUSH PRIVILEGES;

보조 데이터베이스

메인 데이터베이스에서 신규 보조 데이터베이스로 접근할 수 있도록 계정 및 권한을 부여하세요.

CREATE USER '<Sub DB AC Schema User>'@'<Main DB IP>' IDENTIFIED BY '<Sub DB AC Schema Password>';

GRANT ALL PRIVILEGES ON <Sub DB AC Schema>.* TO '<Sub DB AC Schema User>'@'<Main DB IP>';
FLUSH PRIVILEGES;
Example
CREATE USER 'biostarx_ac_user'@'192.168.12.161' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON biostar2_ac.* TO 'biostarx_ac_user'@'192.168.12.161';
FLUSH PRIVILEGES;

FederatedX 사용 여부 확인

메인 및 보조 데이터베이스에서 아래 명령어를 실행해 FederatedX 스토리지 엔진이 활성화되어 있는지 확인하세요.

SHOW ENGINES;

쿼리 결과에 Engine : FEDERATED, Support : YES라고 표시되면 이미 설치되어 있습니다. FederatedX 스토리지 엔진이 설치되어 있지 않다면 아래 쿼리를 실행하세요.

INSTALL PLUGIN federated SONAME 'ha_federatedx';
알아두기

MariaDB를 설치한 경로 하위에서 lib/plugin 폴더에 ha_federatedx.dll 파일이 있는지 확인하세요. 일반적으로 C:\Program Files\MariaDB {version}\lib\plugin 경로에 dll 파일이 존재합니다.

서버 별칭 등록

보조 데이터베이스에 생성될 federatedX 테이블이 메인 데이터베이스의 원본 테이블에 접근할 수 있도록 서버 별칭(alias)을 등록하세요.

CREATE SERVER 'default' FOREIGN DATA WRAPPER mysql OPTIONS (HOST '<Main DB IP>', PORT <Main DB PORT>, DATABASE '<Main DB AC Schema>', USER '<Main DB AC USER>', PASSWORD '<Main DB AC USER Password>');

-- 정상 등록 확인
SELECT * FROM mysql.servers;

기존 등록한 서버 이름에 Host, Port, DB, User, Password에 대한 정보를 변경해야 한다면 Alter 문으로 수정할 수 있습니다. 일부 정보만 변경할 수도 있습니다.

ALTER SERVER 'default' OPTIONS (HOST '<Main DB IP>', PORT <Main DB PORT>, DATABASE '<Main DB AC Schema>', USER '<Main DB AC USER>', PASSWORD '<Main DB AC USER Password>');
Example
CREATE SERVER 'default' FOREIGN DATA WRAPPER mysql OPTIONS (HOST '192.168.12.161', PORT 3312, DATABASE 'biostar2_ac', USER 'biostarx_ac_user', PASSWORD 'password');

ALTER SERVER 'default' OPTIONS (HOST '192.168.12.161', PORT 3312, DATABASE 'biostar2_ac', USER 'biostarx_ac_usermt__fttid__', PASSWORD 'password');

보조 데이터베이스에 필요한 테이블은 아래 순서대로 진행해서 메인 데이터베이스의 테이블을 보조 데이터베이스에 link 설정하세요.

  • 아래는 메인 데이터베이스에서 CREATE TABLE 문 쿼리 생성 쿼리입니다.

    select
    concat(
    'CREATE TABLE IF NOT EXISTS <SubDB_AC_Database_Schema>.', table_name,
    ' ENGINE=FEDERATED ',
    'CONNECTION=''default/', table_name, ''';'
    ) as create_table_sql
    from information_schema.TABLES
    where TABLE_SCHEMA = '<MainDB_AC_Database_Schema>'
    AND TABLE_TYPE = 'BASE TABLE'
    AND NOT TABLE_NAME REGEXP '^t_lg[0-9]{6}$'
    AND NOT TABLE_NAME REGEXP '^t_almevt[0-9]{6}$'
    AND NOT TABLE_NAME REGEXP '^t_lgalmtrstrc[0-9]{6}$'
    ORDER BY TABLE_NAME;
    알아두기

    FederatedX 특성 상 Table_type이 'BASE TABLE'으로 설정하는 것을 권장합니다. VIEW type도 가능하지만 권장하지는 않습니다.

Service Manager 설정

  1. BioStar X Service Manager를 실행하세요. (시작 BioStar XBioStar X Service Manager)

  2. 화면 왼쪽 사이드바에서 DATABASE 메뉴를 클릭하세요.

  3. 화면 오른쪽 상단의 + Add Database 버튼을 클릭하세요.

  4. 데이터베이스 추가 화면에서 각 항목을 입력하세요.

    • Name: 데이터베이스 이름을 입력하세요.

    • Description: 데이터베이스 설명을 입력하세요.

    • DB Type: 데이터베이스 유형을 선택하세요. (Maria, MS SQL)

    • Host: 데이터베이스 서버의 호스트 이름 또는 IP 주소를 입력하세요.

    • Port: 데이터베이스 서버의 포트 번호를 입력하세요.

    • AC / TA: AC, TA 데이터베이스의 이름, 사용자, 비밀번호를 입력하세요.

  5. 데이터베이스가 정상 연결되었는지 확인하려면 화면 오른쪽 상단의 Test Connection 버튼을 클릭하세요.

  6. 설정을 저장하려면 화면 오른쪽 상단의 Save 버튼을 클릭하세요.

SQL Server

메인 데이터베이스 권한 부여

sysadmin 권한을 가진 계정으로 메인 데이터베이스에 아래 권한을 부여하세요.

GRANT ALTER ANY LINKED SERVER TO [<MAIN DATABASE AC USER>];
GRANT ALTER ANY LOGIN TO [<MAIN DATABASE AC USER>];
Example
GRANT ALTER ANY LINKED SERVER TO [biostar_x_user];
GRANT ALTER ANY LOGIN TO [biostar_x_user];

보조 데이터베이스 권한 부여

  1. sysadmin 권한을 가진 계정으로 보조 데이터베이스에 테이블 및 사용자에 대한 User Mapping 연결이 필요합니다. 이 때 db_owner 역할 추가가 필요합니다.

  2. 추가할 데이터베이스에 아래 권한을 부여하세요.

    GRANT ALTER ANY LINKED SERVER TO [<SUB DATABASE AC USER>];
    GRANT ALTER ANY LOGIN TO [<SUB DATABASE AC USER>];
    Example
    GRANT ALTER ANY LINKED SERVER TO [biostar_x_user_sub];
    GRANT ALTER ANY LOGIN TO [biostar_x_user_sub];

Service Manager 설정

BioStar X Service Manager를 통해서 보조 데이터베이스를 추가하세요.

  1. BioStar X Service Manager를 실행하세요. (시작 BioStar XBioStar X Service Manager)

  2. 화면 왼쪽 사이드바에서 DATABASE 메뉴를 클릭하세요.

  3. 화면 오른쪽 상단의 + Add Database 버튼을 클릭하세요.

  4. 데이터베이스 추가 화면에서 각 항목을 입력하세요.

    • Name: 데이터베이스 이름을 입력하세요.

    • Description: 데이터베이스 설명을 입력하세요.

    • DB Type: 데이터베이스 유형을 선택하세요. (Maria, MS SQL)

    • Host: 데이터베이스 서버의 호스트 이름 또는 IP 주소를 입력하세요.

    • Port: 데이터베이스 서버의 포트 번호를 입력하세요.

    • AC / TA: AC, TA 데이터베이스의 이름, 사용자, 비밀번호를 입력하세요.

  5. 데이터베이스가 정상 연결되었는지 확인하려면 화면 오른쪽 상단의 Test Connection 버튼을 클릭하세요.

  6. 설정을 저장하려면 화면 오른쪽 상단의 Save 버튼을 클릭하세요.

알아두기
  • 설정을 완료하고, 메인 데이터베이스와 보조 데이터베이스에 각각 Linked Server 설정이 자동 진행됩니다.

  • 데이터베이스 정보를 수정할 때에도 Linked Server 설정은 자동 변경됩니다. 메인 데이터베이스를 수정할 때에는 등록되어 있는 모든 보조 데이터베이스에 Linked Server 설정이 변경된 정보로 반영됩니다. 보조 데이터베이스를 수정할 때에는 메인 데이터베이스와 해당 보조 데이터베이스만 변경된 정보로 반영됩니다.

Linked Temp Table 쿼리문 생성

메인 데이터베이스에서 아래 쿼리 실행해서 보조 데이터베이스에 생성할 Linked Temp Table 쿼리문을 생성하세요.

USE [<AC Schema>];
GO
DECLARE @LinkedServer sysname = N'default';
DECLARE @SourceSchema sysname = N'dbo';
DECLARE @TargetSchema sysname = N'dbo';

SELECT
'IF OBJECT_ID(N''' + QUOTENAME(@TargetSchema,'') + '.' + QUOTENAME(t.name,'') + ''', ''SN'') IS NOT NULL '
+ 'DROP SYNONYM ' + QUOTENAME(@TargetSchema) + '.' + QUOTENAME(t.name) + ';'
+ 'CREATE SYNONYM ' + QUOTENAME(@TargetSchema) + '.' + QUOTENAME(t.name)
+ ' FOR ' + QUOTENAME(@LinkedServer) + '.' + QUOTENAME(DB_NAME()) + '.' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';'
AS recreate_synonym_sql
FROM sys.tables AS t
JOIN sys.schemas AS s
ON s.schema_id = t.schema_id
WHERE s.name = @SourceSchema
AND t.is_ms_shipped = 0
AND t.name NOT LIKE 't_lg[0-9][0-9][0-9][0-9][0-9][0-9]'
AND t.name NOT LIKE 't_almevt[0-9][0-9][0-9][0-9][0-9][0-9]'
AND t.name NOT LIKE 't_lgalmtrstrc[0-9][0-9][0-9][0-9][0-9][0-9]'
ORDER BY t.name;
Example
-- 예시
USE [main_ac_x_215];
GO
DECLARE @LinkedServer sysname = N'default'; -- Linked Server name set in the sub DB
DECLARE @SourceSchema sysname = N'dbo'; -- Schema to target in the main DB
DECLARE @TargetSchema sysname = N'dbo'; -- Schema to create synonyms in the sub DB (reflected in the output string)

SELECT
'IF OBJECT_ID(N''' + QUOTENAME(@TargetSchema,'') + '.' + QUOTENAME(t.name,'') + ''', ''SN'') IS NOT NULL '
+ 'DROP SYNONYM ' + QUOTENAME(@TargetSchema) + '.' + QUOTENAME(t.name) + ';'
+ 'CREATE SYNONYM ' + QUOTENAME(@TargetSchema) + '.' + QUOTENAME(t.name)
+ ' FOR ' + QUOTENAME(@LinkedServer) + '.' + QUOTENAME(DB_NAME()) + '.' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';'
AS recreate_synonym_sql
FROM sys.tables AS t
JOIN sys.schemas AS s
ON s.schema_id = t.schema_id
WHERE s.name = @SourceSchema
AND t.is_ms_shipped = 0
AND t.name NOT LIKE 't_lg[0-9][0-9][0-9][0-9][0-9][0-9]'
AND t.name NOT LIKE 't_almevt[0-9][0-9][0-9][0-9][0-9][0-9]'
AND t.name NOT LIKE 't_lgalmtrstrc[0-9][0-9][0-9][0-9][0-9][0-9]'
ORDER BY t.name;

보조 데이터베이스에 쿼리문 실행

앞서 생성된 CREATE SYNONYM 쿼리를 전체 복사하세요. 추가할 보조 데이터베이스 서버로 접속해서 아래와 같이 쿼리를 작성하고 실행하세요. 보조 데이터베이스의 AC 스키마 안에 Synonyms(동의어)에 저장됩니다.

use [<Sub DB AC Database>];

IF OBJECT_ID(N'[dbo].[T_ACSGR]', 'SN') IS NOT NULL DROP SYNONYM [dbo].[T_ACSGR];CREATE SYNONYM [dbo].[T_ACSGR] FOR [default].[main_ac_x_215].[dbo].[T_ACSGR];
IF OBJECT_ID(N'[dbo].[T_ACSGRLVLS]', 'SN') IS NOT NULL DROP SYNONYM [dbo].[T_ACSGRLVLS];CREATE SYNONYM [dbo].[T_ACSGRLVLS] FOR [default].[main_ac_x_215].[dbo].[T_ACSGRLVLS];
IF OBJECT_ID(N'[dbo].[T_ACSGRSENT]', 'SN') IS NOT NULL DROP SYNONYM [dbo].[T_ACSGRSENT];CREATE SYNONYM [dbo].[T_ACSGRSENT] FOR [default].[main_ac_x_215].[dbo].[T_ACSGRSENT];
IF OBJECT_ID(N'[dbo].[T_ACSGRUSS]', 'SN') IS NOT NULL DROP SYNONYM [dbo].[T_ACSGRUSS];CREATE SYNONYM [dbo].[T_ACSGRUSS] FOR [default].[main_ac_x_215].[dbo].[T_ACSGRUSS];
...
이 페이지가 도움이 되었나요?