4.4.7 mysql_upgrade - MySQL 테이블 체크 및 업그레이드
mysql_upgrade는 모든 데이터베이스의 모든 테이블에 대해 MySQL 서버의 현재 버전과의 비 호환성을 확인합니다. 또한 mysql_upgrade는 시스템 테이블을 업그레이드하여 추가 된 수있는 새로운 권한 또는 기능을 사용할 수있게합니다.
mysql_upgrade은 테이블에 비 호환 가능성이 발견되면 테이블을 검사하고 문제가 발견 된 경우 테이블의 복구를 시도합니다. 테이블을 복구 할 수없는 경우에는 수동으로 테이블을 복구하는 방법 섹션 2.11.4 "테이블 또는 인덱스를 다시 만들거나 복구" 를 참조하십시오.
mysql_upgrade는 MySQL을 업그레이드 할 때마다 실행하도록하십시오.
Linux에서 MySQL을 RPM 패키지에서 설치하는 경우 서버와 클라이언트의 RPM을 설치해야합니다. mysql_upgrade는 서버 RPM에 포함되어 있지만, 클라이언트 RPM에 mysqlcheck가 포함되어 있기 때문에 클라이언트 RPM이 필요합니다. ( 섹션 2.5.5 "RPM 패키지를 사용하여 MySQL을 Linux에 설치" 를 참조하십시오.)
Windows Server 2008, Vista 이상에서는 mysql_upgrade를 관리자 권한으로 실행해야합니다. 그러기 위해서는 명령 프롬프트를 관리자 권한으로 실행하고 그 명령을 실행합니다. 그렇지 않으면 업그레이드가 제대로 실행되지 않을 수 있습니다.
업그레이드를 수행하기 전에 현재 MySQL 설치를 백업하도록하십시오. 7.2 절 "데이터베이스 백업 방법" 을 참조하십시오.
일부 업그레이드의 비 호환성은 MySQL 설치를 업그레이드하고 mysql_upgrade를 실행하기 전에 특수한 처리가 필요한 경우가 있습니다. 이러한 비 호환성이 사용하는 설치에 해당하는지 여부의 판단 및 그 대처 방법은 섹션 2.11.1 "MySQL 업그레이드" 를 참조하십시오.
mysql_upgrade를 사용하려면 서버가 실행 중인지 확인하십시오. 그 후, 다음과 같이 호출합니다.
shell> mysql_upgrade [ options ]
mysql_upgrade를 실행 한 후 시스템 테이블에 변경 사항이 적용되도록 서버를 중지하고 다시 시작합니다.
복수의 MySQL 서버 인스턴스가 실행중인 경우 원하는 서버에 적합한 연결 매개 변수를 사용하여 mysql_upgrade를 호출합니다. 예를 들어, 로컬 호스트에서 3306에서 3308까지의 포트에서 서버가 실행중인 경우 해당 포트에 연결하고 각각을 업그레이드합니다.
shell>mysql_upgrade --protocol=tcp -P 3306 [ other_options ]
shell>mysql_upgrade --protocol=tcp -P 3307 [ other_options ]
shell>mysql_upgrade --protocol=tcp -P 3308 [ other_options ]
Unix에서 로컬 호스트 연결은 --protocol=tcp
옵션을 사용하면 Unix 소켓 파일이 아닌 TCP / IP를 강제로 사용하여 연결이 이루어집니다.
mysql_upgrade는 다음 명령을 실행하여 테이블을 점검하고 수리 및 시스템 테이블의 업그레이드를 실행합니다.
mysqlcheck --no-defaults --databases --fix-db-names --fix-table-names mysql mysqlcheck --no-defaults --check-upgrade --databases --auto-repair mysql mysql <fix_priv_tables mysqlcheck --no-defaults --all-databases --skip-database = mysql --fix-db-names --fix-table-names mysqlcheck --no-defaults --check-upgrade --all-databases --skip-database = mysql --auto-repair
위의 명령에 대한주의 :
mysql_upgrade는 또한 mysql_upgrade 명령에
--write-binlog
옵션이 지정된 여부에 따라--write-binlog
또는--skip-write-binlog
를 mysqlcheck 명령에 추가합니다.mysql_upgrade은 mysqlcheck를
--all-databases
옵션으로 호출하기 때문에 모든 데이터베이스의 모든 테이블이 처리되어 완료하는 데 시간이 오래 걸릴 수 있습니다. 각 테이블은 잠겨 있기 때문에 작업 중에 다른 세션에서 사용할 수 없습니다. 확인 및 복구 작업에 시간이 걸릴 수 있고, 특히 큰 테이블에서는 시간이 오래 걸릴 수 있습니다.--check-upgrade
옵션으로 실행되는 검사의 자세한 내용은CHECK TABLE
문FOR UPGRADE
옵션에 대한 설명을 참조하십시오 ( 섹션 13.7.2.2 "CHECK TABLE 구문" 을 참조하십시오).fix_priv_tables
은 mysql_upgrade 의해 내부적으로 생성되어mysql
데이터베이스의 테이블을 업그레이드하기위한 SQL 문을 포함하는 스크립트를 나타냅니다.
체크 및 수복 한 모든 테이블은 현재의 MySQL 버전 번호로 표시됩니다. 그러면 다음 같은 버전의 서버에서 mysql_upgrade를 시작할 때 해당 테이블을 다시 확인하고 수정해야하는지 여부가 확실하게 알 수 있습니다.
mysql_upgrade는 또한 MySQL 버전 번호를 데이터 디렉토리의 mysql_upgrade_info
라는 파일에 저장합니다. 이것은 테이블의 검사를 생략 할 수 있도록 모든 테이블이 자료에 대해 체크 여부를 신속하게 확인하는 데 사용됩니다. 이 파일을 무시하고 어쨌든 검사를 수행하려면 --force
옵션을 사용합니다.
mysql_upgrade는 도움말 테이블의 내용은 업그레이드되지 않습니다. 업그레이드 절차는 섹션 5.1.10 "서버 측의 도움말" 을 참조하십시오.
기본적으로 mysql_upgrade는 MySQL root
사용자로 실행됩니다. mysql_upgrade 실행시 root
암호가 만료 된 경우 암호가 만료이며, 그 결과 mysql_upgrade이 실패했다는 메시지가 표시됩니다. 이 문제를 해결하려면 root
암호를 만료되지 않은 것으로 재설정하여 mysql_upgrade를 다시 실행합니다.
shell>mysql -u root -p
Enter password :****
<- enter root password here mysql>SET PASSWORD = PASSWORD('root-password');
mysql>quit
shell>mysql_upgrade [ options ]
mysql_upgrade는 다음 옵션을 지원합니다. 이들은 명령 행 또는 옵션 파일의 [mysql_upgrade]
그룹과 [client]
그룹에 지정할 수 있습니다. 다른 옵션은 mysqlcheck에 전달됩니다. 옵션 파일의 자세한 내용은 섹션 4.2.6 "옵션 파일 사용" 을 참조하십시오.
표 4.4 mysql_upgrade
옵션
형식 | 설명 | 도입 |
---|---|---|
--basedir | 사용하지 | |
--character-sets-dir | 문자 세트가 설치되어있는 디렉토리 | |
--compress | 클라이언트와 서버간에 전송되는 정보를 압축 | |
--datadir | 사용하지 | |
--debug | 디버깅 로그를 작성한다 | |
--debug-check | 프로그램이 종료 될 때 디버깅 정보를 출력 | |
--debug-info | 프로그램 종료시 디버그 정보, 메모리 및 CPU 통계를 출력 | |
--default-auth | 사용하는 인증 플러그인 | 5.6.2 |
--default-character-set | 기본 문자 집합을 지정 | |
--defaults-extra-file | 일반 옵션 파일 이외에 옵션 파일을 읽을 | |
--defaults-file | 지명 된 옵션 파일 만 읽을 | |
--defaults-group-suffix | 옵션 그룹의 접미사 값 | |
--force | MySQL의 현재 버전에 mysql_upgrade를 실행되어있는 경우에도 강제로 실행 | |
--help | 도움말 메시지를 표시하고 종료 | |
--host | 지정된 호스트에서 MySQL 서버에 연결 | |
--login-path | 로그인 경로 옵션을 .mylogin.cnf에서 읽기 | 5.6.6 |
--no-defaults | 옵션 파일을 읽지 | |
--password | 서버에 연결할 때 사용하는 비밀번호 | |
--pipe | Windows에서 명명 된 파이프를 사용하여 서버에 연결 | |
--plugin-dir | 플러그인이 설치되어있는 디렉토리 | 5.6.2 |
--port | 연결에 사용하는 TCP / IP 포트 번호 | |
--print-defaults | 기본 출력 | |
--protocol | 사용하는 연결 프로토콜 | |
--shared-memory-base-name | 공유 메모리 연결에 사용하는 공유 메모리의 이름 | |
--socket | 로컬 호스트에 연결하는 데 사용하는 Unix 소켓 파일 | |
--ssl | 연결에 SSL을 활성화 | |
--ssl-ca | 신뢰할 수있는 SSL CA의 목록이 들어있는 파일의 경로 | |
--ssl-capath | 신뢰할 수있는 SSL CA의 PEM 형식의 인증서를 포함하는 디렉토리의 경로 | |
--ssl-cert | PEM 형식의 X509 인증서가 포함 된 파일의 경로 | |
--ssl-cipher | SSL 암호화에 사용되는 허용 된 암호 목록 | |
--ssl-crl | 인증서 해지 목록을 포함하는 파일의 경로 | 5.6.3 |
--ssl-crlpath | 인증서 해지 목록 파일을 포함하는 디렉토리 경로 | 5.6.3 |
--ssl-key | PEM 형식의 X509 키를 포함하는 파일의 경로 | |
--ssl-verify-server-cert | 서버에 연결할 때 서버 인증서의 일반 이름 값을 호스트 이름에 대해 검증 | |
--tmpdir | 임시 파일 디렉토리 | |
--upgrade-system-tables | 시스템 테이블을 업데이트하고 데이터는 업데이트하지 | |
--user | 서버에 연결할 때 사용하는 MySQL 사용자 이름 | |
--verbose | 중복 모드 | |
--version-check | 적절한 서버 버전 확인 | 5.6.12 |
--write-binlog | 모든 문을 바이너리 로그에 기록 |
--help
짧은 도움말 메시지를 표시하고 종료합니다.
--basedir=
dir_name
MySQL 설치 디렉토리 경로. 이 옵션은 후방 호환성을 위해 받아 들일 수 있지만 무시됩니다. MySQL 5.7에서는 삭제되었습니다.
--character-sets-dir=
path
문자 세트가 설치되어있는 디렉토리. 섹션 10.5 "문자 세트 구성" 을 참조하십시오.
--compress
클라이언트와 서버가 압축을 지원하는 경우 그 사이에 송수신되는 정보를 압축합니다.
--datadir=
dir_name
데이터 디렉토리 경로. 이 옵션은 후방 호환성을 위해 받아 들일 수 있지만 무시됩니다. MySQL 5.7에서는 삭제되었습니다.
--debug[=
,debug_options
]-# [
debug_options
]디버그 로그를 기록합니다. 일반적인
debug_options
문자열은d:t:o,
입니다. 기본값은file_name
d:t:O,/tmp/mysql_upgrade.trace
입니다.--debug-check
프로그램 종료시 디버그 정보를 출력합니다.
--debug-info
,-T
프로그램 종료시 디버그 정보와 메모리 및 CPU 사용량 통계를 출력합니다.
--default-auth=
plugin
사용하는 클라이언트 인증 플러그인. 섹션 6.3.7 "플러그 인증" 을 참조하십시오.
이 옵션은 MySQL 5.6.2에서 추가되었습니다.
--default-character-set=
charset_name
charset_name
를 디폴트 문자 세트로 사용합니다. 섹션 10.5 "문자 세트 구성" 을 참조하십시오.--defaults-extra-file=
file_name
이 옵션 파일은 글로벌 옵션 파일 다음에 읽을 수 있지만 (UNIX의 경우) 사용자 옵션 파일 전에 읽도록하십시오. 파일이 없거나 액세스 할 수없는 경우 오류가 발생합니다.
file_name
은 전체 경로 이름이 아닌 상대 경로 이름으로 지정된 경우 현재 디렉토리를 기준으로 해석됩니다.--defaults-file=
file_name
지정된 옵션 파일 만 사용합니다. 파일이 없거나 액세스 할 수없는 경우 오류가 발생합니다.
file_name
은 전체 경로 이름이 아닌 상대 경로 이름으로 지정된 경우 현재 디렉토리를 기준으로 해석됩니다.--defaults-group-suffix=
str
일반적인 옵션 그룹뿐만 아니라 일반 이름에
str
의 접미사가 붙은 그룹도 읽습니다. 예를 들어, mysql_upgrade는 보통[client]
그룹 및[mysql_upgrade]
그룹을 읽습니다.--defaults-group-suffix=_other
옵션을 지정한 경우 mysql_upgrade는[client_other]
그룹과[mysql_upgrade_other]
그룹도 읽습니다.--force
mysql_upgrade_info
파일을 무시하고 MySQL의 현재 버전에 mysql_upgrade를 실행되어있는 경우에도 강제로 실행합니다.--host=
,host_name
-h
host_name
지정된 호스트의 MySQL 서버에 연결합니다.
--login-path=
name
지명 된 로그인 경로에서
.mylogin.cnf
로그인 파일의 옵션을 읽습니다. "로그인 경로"는host
,user
및password
라는 제한된 옵션 집합 만 허용 옵션 그룹입니다. 로그인 경로는 서버 호스트 및 서버에서 인증을위한 인증 정보를 나타내는 값의 집합이라고 생각합니다. 로그인 경로 파일을 작성하려면 mysql_config_editor 유틸리티를 사용합니다. 섹션 4.6.6 "mysql_config_editor - MySQL 구성 유틸리티" 를 참조하십시오. 이 옵션은 MySQL 5.6.6에서 추가되었습니다.--no-defaults
옵션 파일을 읽지 않습니다. 옵션 파일에서 알 수없는 옵션을 읽을로 인해 프로그램의 실행에 실패 할 경우
--no-defaults
를 사용하여 옵션을 읽지 못하도록 할 수 있습니다.예외적으로
.mylogin.cnf
파일은 존재하는 경우는 모든 경우에 읽습니다. 이는--no-defaults
를 사용하더라도 명령 행보다 안전한 방법으로 암호를 지정할 수 있습니다. (.mylogin.cnf
는 mysql_config_editor 유틸리티가 작성됩니다. 섹션 4.6.6 "mysql_config_editor - MySQL 구성 유틸리티" 를 참조하십시오).--password[=
,password
]-p[
password
]서버에 연결할 때 사용하는 암호입니다. 짧은 옵션 형식 (
-p
)을 사용하는 경우, 옵션과 패스워드 사이에 스페이스를 가질 수 없습니다. 명령 행에서--password
옵션 또는-p
옵션 뒤에password
의 값을 지정하지 않은 경우 mysql_upgrade는 그것을 요구합니다.명령 행에서 암호 지정은 안전하지 않다고 생각한다. 섹션 6.1.2.1 "비밀번호 보안에 대한 최종 사용자 지침" 을 참조하십시오. 옵션 파일을 사용하면 명령 행에서 암호를 지정하는 것을 방지 할 수 있습니다.
--pipe
,-W
Windows에서 명명 된 파이프를 사용하여 서버에 연결합니다. 이 옵션은 서버가 명명 된 파이프 연결을 지원하는 경우에만 적용됩니다.
--plugin-dir=
path
플러그인을 검색하는 디렉토리.
--default-auth
옵션을 사용하여 인증 플러그인을 지정했지만, mysql_upgrade이 그것을 찾을 수없는 경우이 옵션을 지정해야 할 수도 있습니다. 섹션 6.3.7 "플러그 인증" 을 참조하십시오.이 옵션은 MySQL 5.6.2에서 추가되었습니다.
--port=
,port_num
-P
port_num
연결에 사용하는 TCP / IP 포트 번호.
--print-defaults
프로그램 이름과 옵션 파일에서받는 모든 옵션을 출력합니다.
--protocol={TCP|SOCKET|PIPE|MEMORY}
서버에 연결하는 데 사용하는 연결 프로토콜. 이 옵션은 다른 연결 매개 변수는 필요한 프로토콜 이외의 것이 일반적으로 사용되는 경우에 유용합니다. 허용되는 값의 자세한 내용은 섹션 4.2.2 "MySQL 서버에 연결" 을 참조하십시오.
--shared-memory-base-name=
name
Windows에서 공유 메모리를 사용하여 생성되는 로컬 서버에 연결 공유 메모리 이름. 기본값은
MYSQL
입니다. 공유 메모리 이름은 대소 문자를 구분합니다.공유 메모리 연결을 가능하게하려면 서버는
--shared-memory
옵션으로 시작해야합니다.--socket=
,path
-S
path
localhost
에 연결하는 데 사용되는 Unix 소켓 파일 또는 Windows에서 사용하는 명명 된 파이프의 이름.--ssl*
--ssl
로 시작하는 옵션은 SSL을 사용하여 서버에 연결하는 것을 허용할지 여부를 지정하고 SSL 키와 인증서를 검색 할 위치를 지정합니다. 섹션 6.3.10.4 "SSL 명령 옵션" 을 참조하십시오.--tmpdir=
,dir_name
-t
path
임시 파일을 만드는 데 사용하는 디렉토리의 경로 이름.
--upgrade-system-tables
,-s
시스템 테이블을 업그레이드하고 데이터는 업그레이드하지 않습니다.
--user=
,user_name
-u
user_name
서버에 연결할 때 사용하는 MySQL 사용자 이름. 기본 사용자 이름은
root
입니다.--verbose
중복 모드. 프로그램의 동작에 대해 더 많은 정보를 출력합니다.
--version-check
,-k
mysql_upgrade를 연결할 서버의 버전을 확인하고 mysql_upgrade이 빌드 된 버전과 동일한 지 확인합니다. 그렇지 않은 경우는 mysql_upgrade는 종료합니다. 이 옵션은 기본적으로 활성화되어 있습니다.
--skip-version-check
를 사용하여 비활성화하십시오. 이 옵션은 MySQL 5.6.12에서 추가되었다.--write-binlog
mysql_upgrade의 실행 중에 바이너리 로깅을 활성화합니다. MySQL 5.6.6 이전 버전에서는 이것이 기본 동작이었습니다. (업그레이드 중에 바이너리 로깅을 해제하려면 프로그램을
--skip-write-binlog
에서 시작하여이 옵션의 반대를 사용할 필요가있었습니다.) MySQL 5.6.7에서 mysql_upgrade 의한 바이너리 로깅은 기본적으로 비활성화됩니다 (Bug # 14221043). 액션을 바이너리 로그에 기록하려면 명시 적으로--write-binlog
를 사용하여 프로그램을 호출합니다. (또한 MySQL 5.6.7에서--skip-write-binlog
옵션은 실제로는 아무것도하지 않습니다.)글로벌 트랜잭션 식별자를 사용하여 실행중인 MySQL 서버에서는 mysql_upgrade를 실행하는 것은 권장되지 않습니다 (Bug # 13833710). 이것은 GTID를 사용하는 것은 mysql_upgrade이 시스템 테이블에 대해
MyISAM
과 같은 비 트랜잭션 스토리지 엔진을 사용하여 실행해야하는 업데이트가 실패하는 것을 의미하기 때문입니다. 자세한 내용은 섹션 17.1.3.4 "GTID 기반 복제 제한 사항" 을 참조하십시오.