17.4.1.27 서버 측 도움말 테이블의 복제
서버는 HELP
문의 정보를 저장하는 테이블을 mysql
데이터베이스에 보관합니다 ( 섹션 13.8.3 "HELP 구문" 을 참조하십시오). 이 테이블은 섹션 5.1.10 "서버 측의 도움말" 에서 설명한대로 수동으로로드 할 수 있습니다.
도움말 테이블 내용은 MySQL 레퍼런스 매뉴얼에서 추출됩니다. 각 MySQL 릴리즈 시리즈에 별 설명서 버전이 있으므로 도움말의 내용도 각 시리즈 별입니다. 일반적으로 서버 버전과 일치하는 버전의 도움말 내용을로드하십시오. 이것은 복제에 밀접한 관계가 있습니다. 예를 들어, MySQL 5.5 마스터 서버는 MySQL 5.5 도움말 내용을로드되지만 5.6 도움말 내용이 더 적합 MySQL 5.6 슬레이브 서버는 반드시 그 내용을 복제 할 필요가 없습니다.
이 섹션에서는 서버가 복제에 참여하면 도움말 테이블 내용의 업데이트를 어떻게 관리하는지 설명합니다. 서버 버전이이 작업의 하나의 요인입니다. 다른 하나는 도움말 테이블 구조가 마스터와 슬레이브로 다를 수 있다는 것입니다.
도움말 내용이 fill_help_tables.sql
라는 파일에 저장되어 있다고합니다. MySQL 배포판에서는이 파일은 share
또는 share/mysql
디렉토리 아래에 있으며, 최신 버전은 언제든지 http://dev.mysql.com/doc/index-other.html 에서 다운로드 할 수 있습니다.
도움말 테이블을 업그레이드하려면 다음 단계를 사용입니다. 여기에서 설명하는 mysql 명령의 연결 매개 변수는 표시되지 않습니다. 어떤 경우에도 mysql
데이터베이스의 테이블을 변경할 수있는 권한을 가진 root
등의 계정을 사용하여 서버에 연결하십시오.
mysql_upgrade를 먼저 슬레이브에서 실행하고 마스터에서 실행하여 서버를 업그레이드합니다. 슬레이브를 먼저 업그레이드하는 것이 일반적인 원칙입니다.
도움말 테이블 내용을 마스터에서 슬레이브에 복제 여부를 결정합니다. 하지 않으면 마스터와 각 슬레이브에 개별적으로 내용을로드합니다. 또는 마스터 및 슬레이브에서 도움말 테이블 구조의 비 호환성을 확인하고 필요할 경우 해결 한 후 내용을 마스터에로드하고 거기에서 슬레이브에 복제합니다.
도움말 테이블 내용을로드하는 이러한 두 가지 방법을 지금부터 자세히 설명합니다.
슬레이브에 복제없이 도움말 테이블 내용을로드하는
도움말 테이블의 내용을 복제하지 않고로드하려면 서버 버전에 적합한 내용을 포함 fill_help_tables.sql
파일을 사용하여 마스터 및 각 슬레이브에 각각 다음 명령을 실행합니다 (명령 행에 입력 합니다).
mysql --init-command="SET sql_log_bin=0" mysql < fill_help_tables.sql
복제 토폴로지에서 슬레이브가 다른 슬레이브 마스터로 작동하고있는 경우 각 서버 (슬레이브 포함)에 --init-command
옵션을 사용합니다. SET
문은 바이너리 로깅을 억제합니다. 업그레이드 할 각 서버에서 명령이 실행되면 완료입니다.
슬레이브에 복제 예 도움말 테이블 내용을로드하는
도움말 테이블의 내용을 복제하지 않는 경우는 마스터와 슬레이브 간의 도움말 테이블 비호를 확인합니다. help_category
및 help_topic
테이블의 url
컬럼은 처음에는 CHAR(128)
이었지만, 긴 URL에 대응하기 위해 새로운 MySQL 버전에서는 TEXT
입니다. 도움말 테이블 구조를 확인하려면 다음 문을 사용합니다.
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'mysql' AND COLUMN_NAME = 'url';
오래된 구조 테이블의 경우 문은 다음과 같은 결과를 반환합니다.
+---------------+-------------+-------------+ | TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | +---------------+-------------+-------------+ | help_category | url | char(128) | | help_topic | url | char(128) | +---------------+-------------+-------------+
새로운 구조의 테이블의 경우 문은 다음과 같은 결과를 반환합니다.
+---------------+-------------+-------------+ | TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | +---------------+-------------+-------------+ | help_category | url | text | | help_topic | url | text | +---------------+-------------+-------------+
마스터와 슬레이브 모두가 오래된 구조의 경우, 또는 모두가 새로운 구조의 경우 호환성이기 때문에 마스터에서 다음 명령을 실행하여 도움말 테이블의 내용을 복제 할 수 있습니다.
mysql mysql < fill_help_tables.sql
테이블 내용은 마스터에로드 된 후 슬레이브에 복제됩니다.
마스터와 슬레이브의 도움말 테이블이 호환되지 않는 경우 (하나의 서버가 오래된 구조에서 다른 새로운 구조) 도움말 테이블 내용을 최종적으로 복제 않거나 내용을 복사 할 수 있도록 테이블 구조를 호환 할지 여부를 선택할 수 있습니다.
결국 내용을 복제하지 않는 것을 결정한 경우, 이미 설명했듯이,
--init-command
옵션으로 mysql을 사용하여 마스터와 슬레이브를 개별적으로 업그레이드합니다.그렇지 않고 테이블 구조에 호환하기로 결정하면 서버에서 오래된 구조의 테이블을 업그레이드합니다. 마스터 서버의 테이블 구조가 이전합니다. 다음 문을 실행하여 테이블을 새로운 구조로 수동으로 업그레이드합니다 (이미 새로운 구조의 슬레이브로 변경이 복제되는 것을 방지하기 위해, 여기에서는 바이너리 로깅이 비활성화되어 있습니다).
SET sql_log_bin=0; ALTER TABLE mysql.help_category ALTER COLUMN url TEXT; ALTER TABLE mysql.help_topic ALTER COLUMN url TEXT;
다음 마스터에서 다음 명령을 실행합니다.
mysql mysql < fill_help_tables.sql
테이블 내용은 마스터에로드 된 후 슬레이브에 복제됩니다.