Loading...
MySQL 9.5 Reference Manual 9.5의 3.4 What the MySQL Upgrade Process Upgrades의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
새 버전의 MySQL을 설치하는 것은 기존 설치의 다음 부분들을 업그레이드해야 할 수 있습니다:
mysql 시스템 스키마. 이 스키마에는 MySQL 서버가 동작하는 동안 필요로 하는 정보를 저장하는 테이블들이 포함됩니다
( Section 7.3, “The mysql System Schema” 참조).
mysql 스키마 테이블들은 크게 두 가지 범주로 나뉩니다:
데이터 딕셔너리 테이블: 데이터베이스 객체 메타데이터를 저장합니다.
시스템 테이블(즉, 나머지 비-데이터 딕셔너리 테이블): 기타 운영 목적을 위해 사용됩니다.
기타 스키마. 일부는 내장되어 있고 서버가 “소유”한 것으로 간주될 수 있으며, 나머지는 그렇지 않습니다:
사용자 스키마.
업그레이드가 필요할 수 있는 설치 구성 요소에는 서로 다른 두 개의 버전 번호가 연관됩니다:
데이터 딕셔너리 버전: 데이터 딕셔너리 테이블에 적용됩니다.
서버 버전(MySQL 버전이라고도 함): 시스템 테이블과 기타 스키마의 객체에 적용됩니다.
두 경우 모두, 기존 MySQL 설치에 적용되는 실제 버전은 데이터 딕셔너리에 저장되고, 현재 기대되는 버전은 새 MySQL 버전에 컴파일되어 있습니다.
실제 버전이 현재 기대되는 버전보다 낮으면, 그 버전과 연관된 설치 구성 요소는 현재 버전으로 업그레이드되어야 합니다.
두 버전 모두 업그레이드가 필요함을 나타내는 경우, 데이터 딕셔너리 업그레이드가 먼저 수행되어야 합니다.
앞에서 언급한 두 개의 서로 다른 버전을 반영하여, 업그레이드는 두 단계로 진행됩니다:
Step 1: 데이터 딕셔너리 업그레이드.
이 단계에서는 다음을 업그레이드합니다:
mysql 스키마의 데이터 딕셔너리 테이블.
실제 데이터 딕셔너리 버전이 현재 기대되는 버전보다 낮으면, 서버는 업데이트된 정의를 가진 데이터 딕셔너리 테이블을 생성하고, 저장된 메타데이터를 새 테이블로 복사한 후, 기존 테이블을 새 테이블로 원자적으로 교체하고, 데이터 딕셔너리를 재초기화합니다.
Performance Schema,
INFORMATION_SCHEMA,
ndbinfo.
Step 2: 서버 업그레이드.
이 단계는 기타 모든 업그레이드 작업으로 구성됩니다.
기존 MySQL 설치의 서버 버전이 새로 설치된 MySQL 버전보다 낮으면, 나머지 전부를 업그레이드해야 합니다:
mysql 스키마의 시스템 테이블(남아 있는 비-데이터 딕셔너리 테이블).
sys 스키마.
사용자 스키마.
데이터 딕셔너리 업그레이드(step 1)는 서버의 책임이며, 서버는 시작 시 필요하다면 이 작업을 수행합니다. 단, 이를 수행하지 못하도록 하는 옵션으로 서버를 실행한 경우는 예외입니다.
해당 옵션은 --upgrade=NONE 입니다.
데이터 딕셔너리가 오래된 상태인데도 서버가 이를 업그레이드하지 못하도록 차단되어 있는 경우, 서버는 실행되지 않고 대신 에러와 함께 종료됩니다. 예를 들면 다음과 같습니다:
1[ERROR] [MY-013381] [Server] Server shutting down because upgrade is 2required, yet prohibited by the command line option '--upgrade=NONE'. 3[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine 4[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
--upgrade 서버 옵션은 서버가 시작 시 자동 업그레이드를 수행할지, 그리고 어떻게 수행할지를 제어합니다:
옵션을 지정하지 않거나
--upgrade=AUTO를 사용하면,
서버는 오래되었다고 판단한 모든 것을 업그레이드합니다(step 1과 2).
--upgrade=NONE를 사용하면,
서버는 아무것도 업그레이드하지 않습니다(step 1과 2를 건너뜀).
하지만 데이터 딕셔너리를 업그레이드해야 하는 상황에서는 에러와 함께 종료합니다.
오래된 데이터 딕셔너리 상태로 서버를 실행하는 것은 불가능합니다. 서버는 데이터 딕셔너리를 업그레이드하거나 종료하는 두 가지 중 하나만을 허용합니다.
--upgrade=MINIMAL를 사용하면,
서버는 필요하다면 데이터 딕셔너리, Performance Schema,
INFORMATION_SCHEMA만 업그레이드합니다(step 1).
이 옵션으로 업그레이드한 후에는, 레플리케이션 내부 구현이 의존하는 시스템 테이블이 업데이트되지 않기 때문에 Group Replication을 시작할 수 없으며, 다른 영역에서도 기능이 감소된 것이 눈에 띌 수 있습니다.
--upgrade=FORCE를 사용하면,
서버는 필요하다면 데이터 딕셔너리, Performance Schema,
INFORMATION_SCHEMA를 업그레이드하고(step 1),
나머지 모든 것에 대해 업그레이드를 강제로 수행합니다(step 2).
이 옵션은 서버가 모든 스키마의 모든 객체를 확인하므로, 서버 시작 시간이 더 오래 걸릴 수 있습니다.
FORCE는 서버가 필요 없다고 판단하는 경우에도 step 2 작업을 강제로 수행하도록 할 때 유용합니다.
FORCE가 AUTO와 다른 점 중 하나는, FORCE를 사용하면 help 테이블이나 time zone 테이블과 같은 시스템 테이블이 누락된 경우 서버가 이를 다시 생성한다는 것입니다.
업그레이드 step 2 동안 발생하는 작업에 대한 추가 사항:
sys 스키마가 설치되어 있지 않으면 설치하고, 설치되어 있는 경우 현재 버전으로 업그레이드합니다.sys 스키마가 존재하지만 version 뷰가 없는 경우에는 에러가 발생합니다. 이는 해당 스키마가 사용자가 생성한 스키마임을 나타낸다고 가정하기 때문입니다:1A sys schema exists with no sys.version view. If 2you have a user created sys schema, this must be renamed for the 3upgrade to succeed.
이 경우 업그레이드를 진행하려면, 먼저 기존 sys 스키마를 제거하거나 이름을 변경합니다.
그런 다음 업그레이드 절차를 다시 수행합니다(step 2를 강제로 수행해야 할 수 있습니다).
sys 스키마 검사를 방지하려면, 서버를 --upgrade=NONE 또는
--upgrade=MINIMAL 옵션과 함께 시작합니다.
Step 2는 시스템 테이블을 업그레이드하여 현재 구조를 가지도록 합니다. 여기에는 help 테이블은 포함되지만 time zone 테이블은 포함되지 않습니다.
Time zone 테이블을 로드하는 절차는 플랫폼에 따라 다르며 DBA의 판단이 필요하므로 자동으로 수행될 수 없습니다.
Step 2가 mysql 스키마의 시스템 테이블을 업그레이드할 때,
mysql.db,
mysql.tables_priv,
mysql.columns_priv,
mysql.procs_priv 테이블의 프라이머리 키에서 컬럼 순서를 변경하여 호스트 이름과 사용자 이름 컬럼을 나란히 배치합니다.
호스트 이름과 사용자 이름을 함께 배치하면 인덱스 조회를 사용할 수 있어,
CREATE USER,
DROP USER,
RENAME USER 구문과
다수의 권한을 가진 다수 사용자에 대한 ACL 검사에서 성능이 향상됩니다.
인덱스를 삭제하고 다시 생성해야 하며, 시스템에 사용자와 권한이 많이 존재하는 경우 이 작업에는 시간이 걸릴 수 있습니다.
Step 2는 필요에 따라 모든 사용자 스키마의 모든 테이블을 처리합니다.
테이블 검사에는 긴 시간이 걸릴 수 있습니다. 각 테이블은 처리되는 동안 잠기며, 그동안 다른 세션에서는 사용할 수 없습니다.
특히 큰 테이블의 경우, 검사와 복구 작업은 시간이 오래 걸릴 수 있습니다.
테이블 검사는 CHECK TABLE 구문의 FOR UPGRADE 옵션을 사용합니다.
이 옵션이 의미하는 바에 대한 자세한 내용은 Section 15.7.3.2, “CHECK TABLE Statement”를 참조하십시오.
테이블 검사를 방지하려면, 서버를 --upgrade=NONE 또는
--upgrade=MINIMAL 옵션과 함께 시작합니다.
테이블 검사를 강제로 수행하려면, 서버를 --upgrade=FORCE 옵션과 함께 시작합니다.
Step 2는 검사 및 복구된 모든 테이블에 현재 MySQL 버전 번호를 표시(mark)합니다.
이렇게 하면 동일한 서버 버전에서 이후에 업그레이드 검사가 다시 수행될 때, 특정 테이블을 다시 검사하거나 복구해야 할 필요가 있는지 판단할 수 있습니다.
3.3 Upgrade Best Practices
3.5 Changes in MySQL 9.5