본문 바로가기
공부/프로그래밍

[Centos7-Mariadb] 데이터베이스 통째로 옮기기

by demonic_ 2018. 12. 20.
반응형

MYSQL 이나 Mariadb를 백업할 때에는 xtraBackup 등의 좋은 툴도 있지만 물리적 경로의 파일을 통째로 복사해서 옮기는 방법도 있다. 옮기려고 하는 DBMS에 생성한 계정이 있거나 하면 호환이 안된다. DBMS 관련 사용자 설정을 대부분 가져가는 것이기 때문에 이것에 주의해야 하는데, 만약 이전대상 dbms에 school 이라는 계정이 있고 옮길 대상에 school 이라는 계정이 있다고 해서 school 관련 스키마만 복사할경우 해당 데이터에 접근 권한이 없다고 하면서 select 가 되지 않는다.


그래서 계정을 포함한 DBMS 를 통째로 옮길때는 이 방법도 유효할듯 하나, 추천하는 방법은 아니다. 그래도 우선 했으니 정리해둔다.


편의를 위해 이전대상 DBMS는 A 라고, 이전할 DBMS는 B 라고 지정한다


 



1. 버전확인


대체로 서버에 접속하면 다음과 같이 버전이 뜬다.


Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 291

Server version: 10.3.11-MariaDB MariaDB Server


버전을 확인해야 하는 이유는 서로 다른버전일 때 물리적 장소를 복사하고 나서 서비스를 시작할 때 다음과 같은 에러를 발생시킨다.

여기서는 이전 mariadb 버전이 10.3.x 인데 반해 새로 설치한 곳은 10.1.x 였다. 그래서 다음의 문제가 발생했다.


systemctl start mariadb


Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.


journalctl -xe


12월 20 11:31:45 localhost mysqld[32182]: [Note] /usr/sbin/mysqld (mysqld

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Using mutexes to

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: The InnoDB memor

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Mutexes and rw_l

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: GCC builtin __at

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Compressed table

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Using Linux nati

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Using SSE crc32 

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Initializing buf

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Completed initia

12월 20 11:31:45 localhost mysqld[32182]: [Note] InnoDB: Highest supporte

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: No valid checkpoint found.

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: A downgrade from MariaDB 10.2.2 or later is not supported.

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: If this error appears when you are creating an InnoDB datab

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: the problem may be that during an earlier attempt you manag

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: to create the InnoDB data files, but log file creation fail

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: If that is the case, please refer to

12월 20 11:31:45 localhost mysqld[32182]: InnoDB: http://dev.mysql.com/doc/refman/5.6/en/error-creating-innod

12월 20 11:31:45 localhost mysqld[32182]: [ERROR] Plugin 'InnoDB' init fu

12월 20 11:31:45 localhost mysqld[32182]: [ERROR] Plugin 'InnoDB' registr

12월 20 11:31:45 localhost mysqld[32182]: [Note] Plugin 'FEEDBACK' is dis

12월 20 11:31:45 localhost mysqld[32182]: [ERROR] Unknown/unsupported sto

12월 20 11:31:45 localhost mysqld[32182]: [ERROR] Aborting

12월 20 11:31:45 localhost systemd[1]: mariadb.service: main process exited, code=exited, status=1/FAILURE

12월 20 11:31:45 localhost systemd[1]: Failed to start MariaDB 10.1.37 database server.


만약 버전이 상위버전이라면 repository를 입력해 새로 설치하면 된다.


변경하는 방법은 다음과 같다.


이전버전의 MariaDB를 지운다yum remove MariaDB-server MariaDB-Client


yum remove MariaDB-server MariaDB-Client


레파지토리를 수정/등록한다


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


# 기존것을 삭제하고 아래 내용 추가.

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.3/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1



새로 설치한다


yum install MariaDB-server MariaDB-client


====================================================================================================================

 Package                      Arch                 Version                              Repository             Size

====================================================================================================================

Installing:

 MariaDB-server               x86_64               10.3.11-1.el7.centos                 mariadb               123 M

Updating:

 MariaDB-client               x86_64               10.3.11-1.el7.centos                 mariadb                53 M


Transaction Summary

====================================================================================================================

Install  1 Package

Upgrade  1 Package



- 만약 버전을 다운그레이드 해야 한다면?


예를들어 10.3.x 버전에서 10.1.x 로 설치해야 한다면 다음을 참조한다.(관계없다면 넘어간다)

버전을 다운그래이드 하여 설치하고 싶다고 해서 /etc/yum.repos.d/MariaDB.repo 파일만 수정한다고 즉각 반영되진 않는다.

그래도 우선 수정은 해두자


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


[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.1/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1


yum repository 에서 사용하는 headers, packages, metadata 를 삭제한다


yum clean headers

yum clean packages

yum clean metadata



이후 다시 install 하면 다운된 버전을 확인할 수 있다.


yum install MariaDB-server


====================================================================================================================

 Package                      Arch                 Version                              Repository             Size

====================================================================================================================

Installing:

 MariaDB-server               x86_64               10.1.37-1.el7.centos                 mariadb               104 M

Installing for dependencies:

 MariaDB-client               x86_64               10.1.37-1.el7.centos                 mariadb                40 M

 MariaDB-common               x86_64               10.1.37-1.el7.centos                 mariadb               123 k


Transaction Summary

====================================================================================================================




2. 서버에 mariadb 설치


레파지토리를 등록한다


cat <<EOF > /etc/yum.repos.d/MariaDB.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.3/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

EOF


설치


yum install -y MariaDB-server MariaDB-client




3. A 서버에서(이전 서버)에서 폴더째 복사


복사방법은 여러가지가 있겠지만 내 경우 편의상 scp 를 이용했다.

다만 scp를 이용하기 위해서는 ssh를 등록해주어야 하기 때문에 ftp로 전송하든, 외장하드로 전송하든 어떤방식으로든 이동만 시키면 된다.


mariadb 는 특별한 설정을 하지 않는 한에는 /var/lib/mysql 아래 위치한다.

그래서 복사한 파일을 여기다 덮어씌워도 되고, 아니면 이참에 datadir 을 변경하는것도 괜찮다.

다만 /home 아래 두어서는 안된다. 여기에 둘경우 별도의 권한을 필요로 한다(단순 777이라든가 selinux 권한 외에 추가 권한 필요). 인터넷에 방법이 적혀있긴 했지만 내경우 먹히지 않아 다른 경로에 두었다.


# 만약 위치를 변경할 거라면 해당 경로에 다음 권한을 주도록 한다.

chmod 777 -R [변경 경로]




4. 복사한 파일에 권한을 준다

권한, 소유자를 모두 변경해야 한다. 기존에 있던 파일의 소유자를 확인해보면 대부분 mysql:mysql 로 되어있다. 이것 외에도 selinux 설정도 해주어야 한다.


chcon -Rt mysqld_db_t [경로]

chcon -Ru system_u [경로]

chown -R mysql:mysql [경로]






5. my.cnf 파일 점검


만약 폴더경로를 기본값인 /var/lib/mysql 에 두지 않았다면 /etc/my.cnf 에 다음의 내용을 추가해야 한다.


vi /etc/my.cnf


[mysqld]

datadir=[변경 경로]

...



6. 실행하기.


systemctl start mariadb


systemctl status mariadb


 mariadb.service - MariaDB 10.3.11 database server

   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)

  Drop-In: /etc/systemd/system/mariadb.service.d

           └─migrated-from-my.cnf-settings.conf

   Active: active (running) since 목 2018-12-20 11:39:55 KST; 3s ago

     Docs: man:mysqld(8)

           https://mariadb.com/kb/en/library/systemd/

  Process: 1117 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)

  Process: 1009 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)

  Process: 1006 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)

 Main PID: 1080 (mysqld)

   Status: "Taking your SQL requests now..."

    Tasks: 30

   Memory: 255.2M

   CGroup: /system.slice/mariadb.service

           └─1080 /usr/sbin/mysqld



계정, 비밀번호 모두 그대로 복사되었으니 접속해보고 데이터가 있는지 확인해보면 완료



반응형

댓글