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
계정, 비밀번호 모두 그대로 복사되었으니 접속해보고 데이터가 있는지 확인해보면 완료
'공부 > 프로그래밍' 카테고리의 다른 글
[centos7] LVM(Logical Volumn Manager) 확장 (0) | 2018.12.26 |
---|---|
[centos7-docker] 용량이 가득 찼을 경우 처리, docker 경로 변경 (2) | 2018.12.25 |
[centos] 리눅스 파일시스템 HDD, SSD 확인 (0) | 2018.12.11 |
[SpringBoot] 간단 Slf4j 로그설정 (0) | 2018.12.09 |
[mysql] 동시성 문제 해결하기(FOR UPDATE) (1) | 2018.12.05 |
댓글