[MySQL][Install] - 5.7 Upgrade 방법
- Databases/MySQL
- 2019. 12. 21.
■ DBMS에서의 메이저 버전과 마이너 버전.
데이터 베이스 벤더마다 메이저 버전과 마이너 버전이 있습니다. 먼저 메이저 업그레이드와 마이너 업그레이드는 근본적으로 다릅니다. 보통 메이저 버전은 대규모로 DBMS 스펙이나 엔진변경, 신규 기능 추가 등이 되었을때 주로 메이저 버전이 출시됩니다. 보통 몇년에 한번 나옵니다. 그런만큼 OS도 최소지원 사양을 만족해야 합니다. 또한 최신DBMS의 최고의 조합은 벤더사가 말하는 최적의 OS 버전입니다. 그 최적의 OS가 최신 버전이라면 가능하면 그 버전에 맞추는게 좋습니다. 벤더가 개발할때나 테스트했을때 그 버전이 가장 궁합에 맞기 때문입니다.
마이너 버전은 오류수정, 보안 이슈, 기능 변경, 혹은 기타 이유에 따른 긴급패치 발표등 주로 이슈에 대응하는 버전으로 나옵니다. 만약 중요한 보안이 업데이트 되었다면 가능하면 설치하시는것을 권고 드립니다. 마이너 업데이트 발표시 관심을 가지고 보게되면 많은 정보들을 얻을 수 있습니다.
MySQL의 메이저 버전과 마이너 버전의 표기법은 다릅니다. 보통 메이저 버전을 앞자리로 합니다. Oracle을 예로 들면 Oracle 10,11,12 이런식으로 나가는데 반해 MySQL은 5.x 즉 x가 메이저 버전입니다. 5.6은 MySQL 6버전 5.7은 MySQL 7버전입니다. 8버전부터 앞자리를 메이저 버전으로 두기 시작했습니다. 마이너 버전은 5.x.x입니다. 즉 3번째 자리가 마이너 버전입니다. 자바도 예전엔 1.2, 1.3, 1.4 이런식으로 버전이 배포되었던걸로 알고 있습니다. 비슷하게 쓰여졌다고 생각하시면 될것 같습니다.
■ 메이저 버전 업그레이드시 고려사항
위에서 얘기했듯 최신 메이저 버전이 발표되었다면 몇년만에 나오는 것일테고, 그런만큼 사용하고 있는 하드웨어 장비도 노후화가 되어 있을 수 있습니다. 장비가 계속 쓸만하다면 굳이 바꾸실 필요가 없습니다. 신규OS와 DBMS소프트웨어를 설치해서 사용해도 됩니다. 하지만 노후화가 심해 사용하기 힘든 정도까지 왔다면, 그외 다른 이유로 스펙업이 필요하다면 그에 맞는 전략을 세워 진행해야 합니다.
마이너 버전은 간단히 엔진 업그레이드로 쉽게 끝낼 수 있습니다. 명령어 하나로 간단히 업그레이드가 됩니다. 그리고 다운타임을 적게 가져갈 수도 있습니다. 자신이 사용하는 기능이나 보안에 문제가 생겼다면 필히 패치를 통하여 안정적으로 운영하시는것이 좋습니다.
■ MySQL 업그레이드시 반드시 읽어봐야 할 문서 내용
먼저 업그레이드를 하기에 앞서 반드시 공식문서에 나와 있는 업그레이드 가이드를 반드시 읽어보시기 바랍니다. 특히 메이저 버전을 업그레이드 할때는 꼼꼼하게 읽어보시기를 추천드립니다.
먼저 중요하게 볼 사항은 다음과 같습니다.
- 최소 OS 지원사항
지원가능한 OS버전은 정말 중요한 부분입니다. 현재 설치된 OS가 최소 지원 버전을 만족하지 못하면 새로 설치를 해야 합니다. 새로설치를 하게 된다면 그에 따른 전략이 필요합니다.
- 엔진 변경 사항
프로세스에서 쓰레드 방식으로 바뀐다던지, 옵티마이저가 엄청나게 기능이 추가되고 핵심 알고리즘이 변경되었거나 하는 내용이 있습니다. 한번 읽어보면 재미있는 내용들도 많이 있습니다.
- 신규기능
메이저 발표는 많은 신규 기능을 추가로 발표합니다. 트렌드가 되는 기술이 있다면 그 기술을 흡수하고 사용할 수 있도록 합니다. 예를 들면 json 컬럼을 만든다던지, 빅데이터용 colum base의 엔진을 발표한다던지 하는것들이 될 수 있습니다.
- 변경된 기능, 제거된 기능
중요한 내용중에 하나입니다. 기존의 펑션이나 프로시져 사용방법이 바뀌거나 기능 추가로 인해 사용법이 약간 틀려졌을수도 있습니다. 반드시 읽어보고 사용된 기능이 있다면 하위 호환 여부를 판단해 고칠지 말지를 결정해야 합니다. 또한 만약 제거된 기능이 있다면 그 기능에 대한 여파를 측정하고 대체할 만한게 있는지 판단해 보아야 합니다. 기능을 없앤단 얘기는 사용자들이 잘 안쓰고 있다는 말로도 일맥상통하므로 이 기회에 제거하는것도 하나의 방법이 될 수 있습니다. 참고로 제거되는 기능은 최소 1년 전부터 계속 발표를 하게 되니 눈여겨 보시는것이 좋습니다.
- 신규 파라미터
새로운 파라미터들을 검토해 보시는걸 추천드립니다. 평소에 어떤 문제로 이 기능을 튜닝하거나 변경할 수 있는 방법이 있으면 좋겠다라는 생각을 가졌을때 이 파라미터가 추가되는 경우가 있습니다. 혹은 신규 파라미터를 조절하면 현제 운영중인 MySQL에 좀더 성능이 좋게 나올 수 있는 파라미터가 추가 되었을 수도 있습니다.
- 변경 파라미터, 제거 파라미터
변경 제거 부분은 위와 마찬가지로 파라미터도 정말 중요한 부분입니다. 사용자들이 잘 사용하지 않는 파라미터는 제거될 수 있습니다. 만약 제거된 파라미터를 현제 사용하고 있다면 업그레이드 시 어떤 파라미터로 대체를 할지 보셔야 합니다. 보통은 기능이 개선된 파라미터로 나오는 경우도 있습니다. 변경 파라미터는 기능이 추가되거나 사용방법이 변경된 것이니 잘 보시고 그에 맞는 방법으로 변경해 주심면 됩니다. 이 부분은 위와 마찬가지로 최소 1년 전부터는 계속 공지를 하게 되니 꼭 메일링 리스트에 가입하여 MySQL에서 오는 뉴스를 확인해 보시는것을 추천드립니다.
■ 업그레이드 전략
+ 메이저 업그레이드
먼저 5.5 이하에서 버전을 업그레이드 하시는거라면 두번의 업그레이드를 진행하셔야 합니다. 5.5에서 5.7로 바로 업그레이드가 불가능하기 때문입니다. 5.5에서 5.6으로 한번 그리고 5.6에서 5.7로 또 한번 이루어져야 합니다. 아래에서 설명드리겠지만 업그레이드시마다 제공되는 업그레이드 프로그램으로 한번씩 업그레이드 후 다시 또 업그레이드 해야 합니다. 이렇게 하면 총 4번정도의 단계를 거쳐야 하는데 이게 여간 신경이 많이 쓰이는게 아닙니다. 차라리 모든 데이터를 내리고 엔진을 제거한 다음 재 설치 후 데이터를 올리는게 더 안정적이고 효과적일 수 있습니다.
하드웨어도 함께 고민해봐야 합니다. 메이저 버전이 고사양과 최신 OS를 요구할 수도 있기 때문입니다. 또한 특정기능은 사양이 높아야만 안정적으로 운영되는 기능이 있을 수 있습니다.
한가지 중점적으로 고민해봐야 하는게 전체 데이터를 내려 받은 후 하드웨어 포멧이나 신규 장비로 다시 데이터베이스를 설치하고 다시 올릴지 고민해봐야 합니다. 데이터베이스의 메이저 버전을 제공되는 프로그램으로 업그레이드 한다는 것은 엔진 바이너리 교체 및 데이터베이스 정보를 저장하고 있는 카탈로그 데이터베이스 업그레이드 입니다. 그런데 카탈로그 데이터베이스를 제공되는 프로그렘으로 업그레이드 하면 하위 호환성 유지 및 기존 기능을 유지시켜야 하기 때문에 문제가 좀 생길 수도 있습니다. 또한 하위 호환성때문에 신규 기능을 사용하지 못할 수도 있습니다. 그래서 메이저 버전을 업데이트 할 시 이 기회에 데이터 정합성도 맞추고 필요없는 테이블은 지우고 클러스터링 테이블은 재 업로드를 통해 다시 맞춰주는 작업등을 하게 됩니다. DBMS가 버전이 오래되 교체하시는 거라면 전체 데이터를 내려받고 다시 올리는 방법을 추천드립니다
그래서 고민에 고민을 통하여 메이저 버전을 업그레이드 해야 합니다.
+ 마이너 업그레이드
마이너 업그레이드시는 제공되는 업그레이드 프로그램으로 하는것이 일반적입니다. 기존엔진에 새로운 프로그램을 덮어 씌우거나 교체를 하고 시스템 데이터베이스를 업그레이드 함으로써 마이너 업데이트를 완료합니다. 물론 업데이트를 하기전에 엔진 백업과 데이터베이스 백업은 무조건 필수입니다. 업데이트 시 문제가 발생하거나 다른 영향이 생긴다면 바로 복원할 수 있도록 준비해야 합니다.
+ 공통사항
다른 한가지는 외부 솔루션 연계입니다. 외부 솔루션이 버전이 낮다면 메이저 업그레이드를 조심히 하셔야 합니다. 만약 최신 버전을 지원하지 않는 외부 솔루션이라면 접속 테스트부터 검증까지 많은 시간이 필요할 수도 있습니다. 그러므로 신중해야 합니다.
다운타임을 적게 가져가야 할 전략이 필요합니다. 복제 솔루션을 이용해 동일한 DB를 만든 후 특정시간에 컷오프를 해서 진행할건지, 특정 다운타임 시간을 가진 후 모든 데이터를 내려받은 후 다시 올릴것인지(이렇게 하면 성능이 많이 좋아집니다.)하는 등의 전략을 세워야 합니다.
■ 엔진 업그레이드 방법
+ Inplace방식, Logical 방식.
Inplace 모드는 기존에 설치되어 있는 데이터베이스 엔진에 덮어씌우는 방법을 말합니다. 내부적으로 엔진 바이너리를 이전 버전에서 새로운 버전으로 교체 후 제공되는 업그레이드 프로그램을 실행시켜 호환되지 않는 기능을 제거하고 버그를 제거하고 보안 문제등을 고칩니다. 그리고 엔진 카탈로그(시스템 데이터베이스)를 교체하고 업그레이드 합니다. 이렇게 하는 방법을 Inplace 방법이라고 합니다.
Logical 방벙은 기존 엔진에서 데이터를 모두 내리고 기존 엔진을 제거하거나 이름 변경후 신규로 엔진을 설치한 다음 새로 설치한 엔진에 모두 내린 데이터를 반대로 모두 올리는 방법입니다. 가장 깨끗하고 안전한 방법이지만 그만큼 시간이 오래 걸립니다.
+ 업그레이드전 공통 작업사항 - 백업
엔진에 대해 무언가 변형을 가하거나 수정을 하기전 무조건 데이터 백업은 필수입니다. 특히나 yum을 통해 엔진을 설치했다면 무조건 데이터 백업은 무조건 하셔야 합니다. 소스 컴파일을 통한 엔진 설치는 별도의 디렉토리가 따로 있기 때문에 쉽게 엔진또한 백업이 가능한데 yum은 os에 통합되어 설치되는 방법이라 별도로 백업을 할 방법이 없습니다. 그렇기에 무조건 데이터 백업은 필수입니다. 대신 간단히 명령어로 손쉽게 업그레이드 할 수 있다는 장점이 있습니다.
- 운영중이던 트랙잭션 커밋
퍼버풀이나 기타 버퍼에 남아있는 정보들을 모드 디스크에 쓰기 명령을 실행시킵니다.
Commit, flush logs, flush tables등의 명령을 실행합니다.
- fast shutdown 옵션 설정
환경 파라미터중에 innodb_fast_shutdown이라는 파라미터가 있습니다. 보통 MySQL 서버를 내릴때 메모리의 모든 내용을 바이너리 로그나 제너럴로그, 에러로그등등의 텍스트 로그를 모두 파일로 동기화 시키고 버퍼풀의 모든 내용을 디스크로 저장합니다.이 모든 일련의 과정들을 생략하게 하는게 바로 innodb_fast_shutdown 옵션값중 1이 가지는 의미입니다. 만약 이 옵션의 값이 1로 되어있다면 반드시 0으로 바꾼 후 MySQL 서버를 내려야 합니다. 모든정보가 디스크나 파일로 저장되지 않고 업그레이드시 문제가 발생할 소지가 높습니다. innodb_fast_shutdown은 다이나믹 방식을 지원합니다. 다음과 같은 방법으로 변경하고 업그레이드를 수행합니다. mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0
+ yum을 통한 방법
처음에 yum을 통해 설치를 했다면 yum 명령을 통해서 손쉽게 업그레이드 할 수 있습니다. yum을 통한 방식은 Inplace 방식입니다.
- 업그레이드
* 메이저 업그레이드
1. mysql engine을 중지합니다.
shell > /etc/init.d/mysqld stop 혹은 mysqladmin -uroot -p shutdown
2. yum repository를 원하는 메이저 버전으로 변경합니다.
shell > yum repository 변경
3. 엔진 업데이트를 수행합니다.
shell > yum update mysql-server
메이저 버전이 업데이트 되었습니다. 버전이 실제 업데이트 되었는지 확인합니다.
shell > mysql --version
mysql Ver 14.14 Distrib 5.7.XX, for Linux (x86_64) using EditLine wrapper
엔진을 실행합니다.
shell > /etc/init.d/mysqld start
맨아래 업그레이드 명령을 수행합니다.
* 마이너 업그레이드
마이너 업그레이드는 보통 해당 yum repository에 업데이트 관련 데이터베이스 프로그램을 올려놓습니다. 그러면 사용자는 yum명령을 실행해서 업데이트를 수행할 수 있습니다. 사용법은 다음과 같습니다.
1. mysql engine을 중지합니다.
shell > /etc/init.d/mysqld stop 혹은 mysqladmin -uroot -p shutdown
2. 엔진 업데이트를 수행합니다.
shell > yum update mysql-server
마이너 버전이 업데이트 되었습니다. 버전이 실제 업데이트 되었는지 확인합니다.
shell > mysql --version
mysql Ver 14.14 Distrib 5.6.XX, for Linux (x86_64) using EditLine wrapper
이렇게 하면 마이너 업데이트가 완료가 됩니다. 엔진을 실행시킵니다.
shell > /etc/init.d/mysqld start
맨아래 업그레이드 명령을 수행합니다.
+ Source Compile을 통한 업그레이드 방법
- 백업 수행.
소스컴파일 방법을 통한 재설치는 원복시 원래 위치에 그대로 풀기만 하면 되기 때문에 편하게 원복할 수 있습니다.
업그레이드 방법은 기존 엔진을 셧다운 시키고 통째로 압축합니다. 압축된 엔진 파일을 다른곳으로 옮기고 삭제하거나 이름을 바꾸어 둡니다.
먼저 미리 신규 MySQL 엔진에 대해 컴파일을 수행해 둡니다.
설치편을 참고하여 make test까지 수행합니다.(맨 아래 참고사항에 있습니다.)
그리고기존 MySQL 엔진을 백업합니다.
1. 백업 디렉토리를 만듭니다.
shell > mkdir /backup
2. 기존 MySQL을 중지시킵니다.
shell > /etc/init.d/mysqld stop 혹은 mysqladmin -uroot -p shutdown
3. 상위 디렉토리로 이동합니다.
shell > cd /usr/local
4. 기존 MySQL엔진 폴더를 통째로 압축합니다.
shell > tar -zcvf mysql.tar.gz mysql
혹시 data 디렉토리가 mysql폴더안에 들어있다면 이것으 제외하고 압축합니다.
순수 엔진만 백업하면 됩니다.
shell > tar -zcvf mysql.tar.gz --exclude=mysql/data mysql
압축 후 데이터 용량이 작다면 상위 폴더로 잠시 이동을 시켜둡니다.
shell > mv /usr/local/mysql/data /usr/local
5. 기존 엔진을 백업 디렉토리로 이동시킵니다.
shell > mv mysql.tar.gz /backup
맨아래 업그레이드 명령을 수행합니다.
그리고 기존 엔진을 삭제합니다.
shell > cd /usr/local/mysql
shell > rm -rf mysql
위에서 신규 엔진에 대해 컴파일하고 make test수행까지 마쳤으면 설치를 진행합니다.
shell > make install
datae 디렉토리를 원위치시킵니다.
shell > mv data /usr/local/mysql
신규 엔진을 수행합니다.
shell > /etc/init.d/myqld start
아래 업그레이드 명령을 수행합니다.
■ 업그레이드 명령
엔진 설치를마쳤다면 이젠 위에서 설명한대로 데이터베이스에 신규엔진의 기능과 각종 패치가 적용될 수 있도록 시스템 데이터베이스를 업그레이드 해주어야 합니다. 그래야 신규 데이터베이스를 사용할 수 있습니다.
mysql_upgrade는 다음의 것들을 수행합니다.
* MySQL 스키마의 시스템 테이블을 업그레이드 합니다. 또한 새로운 권한들과 기타 운영하는데 필요한 권한들을 자동으로 추가합니다.
* 퍼포먼스 스키마와 sys 스키마를 업그레이드 합니다.
* 사용자 스키마를 확인합니다.
* 비호환 기능, 테이블 체크, 문제 확인 그리고 깨진 테이블을 복구 합니다.
+ MySQL Upgrade 수행.
먼저 위에서 data 디렉토리를 옮겨 두었다면 mysql 디렉토리 안으로 옮깁니다.
shell > mv /usr/local/data /usr/local/mysql/data
MySQL 업그레이드는 다음과 같이 수행합니다.
shell > cd /usr/local/mysql
shell > bin/mysql_upgrade --defaults-file=/etc/my.cnf
mysqld_safe명령과 실행하는 방법은 비슷합니다. 이렇게 하면 위에 나열한 일들을 수행합니다.
+ 수행결과
shell > bin/mysql_upgrade --defaults-file=/etc/my.cnf
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
sys.sys_config OK
Upgrade process completed successfully.
Checking if update is needed.
이외에도 다른 몇가지 옵션들을 제공합니다.
그 내용들은 여기서 확인이 가능합니다.
https://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
■ 참고사항
https://myinfrabox.tistory.com/3
※도움이 되셨다면 광고클릭 한번 부탁드립니다.※
'Databases > MySQL' 카테고리의 다른 글
[MySQL][Admin] - 기본으로 제공되는 프로그램들 (0) | 2020.01.04 |
---|---|
[MySQL][Install] - 8.0+CentOS 7.x - Source (2) | 2019.12.31 |
[MySQL][Install] - 8.0+CentOS 7.x-RPM 설치 (0) | 2019.12.29 |
[MySQL][Install] - 5.7+CentOS 7-Source 설치 (0) | 2019.12.14 |
[MySQL][Install] - 5.7 + CentOS 7(CentOS6포함) RPM 설치방법 (0) | 2019.12.09 |