이 세상에 하나는 남기고 가자

세상에 필요한 소스코드 한줄 남기고 가자

MariaDB 10.0에서 10.1로 업그레이드(yum)

아사마루

MariaDB 최신 버전 설치(yum) - CentOS 7 이라는 글에서 MariaDB를 설치하는 방법에 대해 소개 했었다. 그 글에서는 처음부터 10.1을 설치하기를 권장했었는데 회사에서 사용하는 서버 중에 10.0을 사용하는 서버가 있어 이번에 업그레이드했던 내용을 간단히 남긴다.

본론에 들어가기에 앞서 10.1에서의 변경 사항이 궁금하다면 What is MariaDB 10.1?를 참고하자.


MariaDB의 메뉴얼에 보면 Upgrading from MariaDB 10.0 to 10.1에서 업그레이드 과정 및 변경 사항을 자세히 설명하고 있다.

  1. MariaDB 10.0 종료
  2. 데이터 백업
  3. MariaDB 10.0 제거
  4. MariaDB 10.1 설치
  5. mysql_upgrade를 실행
    • Ubuntu 및 Debian 패키지는 설치시 자동으로 실행(Red Hat, CentOS 및 Fedora 패키지는 자동 실행 안함)
    • mysql_upgrade는 두 가지 작업을 수행한다.
    • 몇몇 새로운 필드로 mysql 데이터베이스의 권한 테이블을 업그레이드
    • 모든 테이블을 매우 빠르게 검사하여 MariaDB 10.1과 호환되는 것으로 표시
    • 대부분의 경우이 이 작업은 빠르게 종료된다(물론 테이블 수에 따라 다름)
  6. 기능을 사용하려면 my.cnf에 새 옵션을 추가
    • my.cnf를 변경하면 mysqld를 재시작

아래는 yum으로 설치된 상황에서의 처리 예시다.

MariaDB 레포지토리 설정 파일을 연다.

$ vi /etc/yum.repos.d/MariaDB.repo

아마도 아래와 비슷한 내용이 나올 것이다.

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

여기서 10.0 부분을 10.1로 수정하고 저장한다. Downloads Setting up MariaDB Repositories에 가면 더 정확한 레포지토리 주소를 얻을 수 있다. 하지만 이번 경우는 10.1로 고치는 것만으로도 충분하다.

MariaDB를 종료한다.

$ service mysql stop

데이터를 백업한다. 이 과정은 만일의 사태에 대한 대비를 위한 것이다. 실제로는 업그레이드 후 데이터를 새로 넣어야 하는 과정은 없다. 업그레이드 과정에서 데이터가 손실되는 경우에 복구를 위해 예방 차원이다.

# 이 부분은 예시일 뿐이니 자신의 상황에 맞게 백업해야 한다.
$ mysqldump -uroot dbname --default-character-set=utf8 --routines > dbname.sql

이제는 MariaDB를 제거한다. 이 과정에서 의존성이 있는 패키지들이 함께 제거될 수 있다(나의 경우 crontab과 postfix가 함께 제거되었다). 따라서 삭제된 패키지를 기록해 두었다가 업그레이드 후 다시 설치해 줘야 한다. 그리고 /etc/my.cnf 파일과 기타 설정 파일(/etc/my.cnf.d/)도 백업해 두길 권장한다. 기본적으로 yum remove 과정에서 /etc/my.cnf.rpmsave 파일로 자동 백업 되긴한데 혹시나 모르니. 그리도 my.cnf의 경로는 상황에 따라 차이가 있을 수 있다.

$ rpm -qa | grep -i '^MariaDB'
# rpm 명령으로 확인된 MariaDB 관련 패키지를 아래와 같이 나열하여 제거한다.
$ yum remove MariaDB-server MariaDB-client MariaDB-compat MariaDB-common

MariaDB를 다시 설치한다.

$ yum install MariaDB-server MariaDB-client

설정 파일들(/etc/my.cnf, /etc/my.cnf.d/)을 복구한다. 이 과정에서 그냥 파일을 덮어쓰지 말고 기존 설정과 재설치 후 생성된 cnf 파일들을 비교해 보길 권장한다. 새로운 속성이 추가된 것들이 있을 수 있으니 변경점을 확인하기 위해서다(비교해서 추가하지 않아도 기본값으로 모두 동작 할테니 크게 문제 되진 않는다).

$ mv /etc/my.cnf.rpmsave /etc/my.cnf
# 추가적으로 /etc/my.cnf.d/ 를 백업했던 파일들도 복구한다.

MariaDB를 다시 실행해서 정상적으로 데몬이 뜨는지 확인한다.

service mysql start

DB를 업그레이드 한다. 이 과정에서 주의할 것이 있다. MariaDB Documentation » Storage Engines » Archive에 안내되어 있는데 ARCHIVE Storage Engine은 10.0까지만 기본 설치된다. 따라서 10.1에서는 추가 설정이 필요하다. 따라서 관련 처리를 해주거나 mysql_upgrade 전에 미리 Engine을 변경해야 한다.

mysql_upgrade -u root -p

여기까지 문제없이 진행되었다면 업그레이드 과정은 끝났다.


후기

사실 크게 복잡할 것 없는 과정인데 나의 실수로 인해 엄청난 삽질을 했다. 레포지토리 주소를 수정하는 과정에서 그냥 버전만 변경했어야 하는데 조금 더 정확히 하겠다는 생각으로 사이트에 안내된 레포지토리를 복사해서 붙여넣어 사용했다. 여기서 실수해서 centos 7 레포지토리 주소를 넣어버린 것이다. 해당 서버는 centos 6인데... 패키지는 지웠는데 다시 설치하려니 gcc++, gcc의 버전이 맞지 않다고 계속 설치 거부. 그래서 gcc++과 gcc 버전을 직접 재설치 하려는데 여러가지 문제에 부딪혔다. 특히 gcc의 경우는 무작정 버전업을 했다가는 골치 아픈 문제들을 만나게 된다. 워낙에 연결된 곳이 많다보니... 이 과정에서 참고한 사이트들은 아래와 같다.

참고삼아 위 사이트들을 소개했지만 centos 6에서 gcc를 버전업하는 것은 권장하지 않는다. 이번 작업은 어쨌든 사소한 실수 하나로 간단한 작업이 엄청난 재앙을 일으킨 작업이었다.

Comment