서버 운영/APM 서버 구축

MariaDB & MySQL 백업과 복원 - Nextcloud 14

씨실과 날실 2019. 1. 15. 21:15

[관련 게시물]

백업 관련 게시물 모음

백업 개념

2020/08/26 - [리눅스/공통] - 다양한 백업 전략에 대한 간단한 설명

Tar 백업

2019/09/20 - [리눅스/공통] - Tar를 이용한 백업과 복원 - 일반 데이터 백업

2020/08/13 - [리눅스/공통] - Tar를 이용한 리눅스 시스템 전체 백업과 복원

2020/08/28 - [리눅스/공통] - GNU Tar를 이용한 증분 백업과 복원의 개념 이해

2020/08/30 - [리눅스/공통] - GNU Tar를 이용한 차등 백업과 복원(증분 백업의 응용)

Clonezilla 백업

2020/09/03 - [리눅스/공통] - Clonezilla Live를 이용한 디스크/파티션 백업

2020/09/05 - [리눅스/공통] - Clonezilla Live를 이용한 디스크/파티션 복원

애플리케이션 백업

2019/01/15 - [서버 운영/APM 서버 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

2019/03/09 - [서버 운영/워드프레스(Wordpress)] - 워드프레스(Wordpress) 백업

윈도 백업

2019/08/30 - [윈도 10] - 컴퓨터 주요 자료 백업 후 공장 초기화와 필수 응용 프로그램 설치 그리고 백업자료 복구 과정

Nextcloud 14

Nextcloud 14 설치

2018/11/28 - [IT/가상머신, 서버, CMS 구축] - Nextcloud 14 설치

Nextcloud 14 DB 백업

2019/01/15 - [IT/가상머신, 서버, CMS 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

Nextcloud 14 마이너 업그레이드

2019/01/14 - [IT/가상머신, 서버, CMS 구축] - Nextcloud 14 마이너 업그레이드


Nextcloud 15

Nextcloud 15 설치

2019/02/05 - [IT/가상머신, 서버, CMS 구축] - Nextcloud 15 설치

Nextcloud 14 DB 백업

2019/01/15 - [IT/가상머신, 서버, CMS 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

Nextcloud 14 → 15 메이저 업그레이드

2019/02/04 - [IT/가상머신, 서버, CMS 구축] - Nextcloud 14에서 15로 메이저 업그레이드

Nextcloud 14, 15 공식 문서

[Nextcloud14]

Nextcloud14 유지보수 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/index.html

Nextcloud 14 백업 공식 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/backup.html

Nextcloud 14 복원 공식 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/restore.html

Nextcloud 14 업그레이드 방법 공식 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/upgrade.html

Nextcloud 14 업그레이드 유지보수 모드 사용 공식 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/upgrade.html#maintenance-mode

Nextcloud 14 업데이터를 이용한 업그레이드 공식 문서

https://docs.nextcloud.com/server/14/admin_manual/maintenance/update.html

[Nextcloud 15]

Nextcloud15 유지보수 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/index.html

Nextcloud 15 백업 공식 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/backup.html

Nextcloud 14 복원 공식 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/restore.html

Nextcloud 15 업그레이드 방법 공식 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/upgrade.html

Nextcloud 15 업그레이드 유지보수 모드 사용 공식 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/upgrade.html#maintenance-mode

Nextcloud 15 업데이터를 이용한 업그레이드 공식 문서

https://docs.nextcloud.com/server/15/admin_manual/maintenance/update.html


[작업환경]

가상머신 : VirtualBox 6.0

OS : Ubuntu 18.04.1

Apache2 : Apache/2.4.29 (Ubuntu)

PHP7 : PHP 7.2.10-0ubuntu0.18.04.1

MariaDB : mysql  Ver 15.1 Distrib 10.3.12-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

phpMyAdmin : phpMyAdmin 4.6.6deb5

Nextcloud 14의 DB 백업과 복원 과정을 통해 MySQL과 MariaDB의 백업과 복원 과정을을 알아보고자 합니다.

백업과 복원 과정은 phpmyadmin을 통한 방법과 터미널 명령어 입력을 통한 벙법 이 두 가지를 알아보고자 합니다. 자신에게 편한 방법을 택하시면 됩니다.

Nextcloud 유지보수 모드 활성화

유지보수 모드(Maintenance mode)는 로그인 한 사용자의 세션을 잠그고 새로운 로그인을 방지하여 데이터의 불일치를 방지하는 상태입니다. 즉, 제3자의 Data와 DB 작업을 막고자 활성화하는 선행 모드입니다. 만약 Nextcloud를 서비스 중인데 이 작업 없이 백업 혹은 복원 작업을 하면 외부의 작업과 충돌을 일으킬 수 있습니다.

터미널을 실행하여 다음 명령을 실행합니다.

study@study-VirtualBox:~$ cd /var/www/html/nextcloud
study@study-VirtualBox:/var/www/html/nextcloud$ sudo -u www-data php occ maintenance:mode --on
[sudo] study의 암호: 
Maintenance mode enabled
study@study-VirtualBox:/var/www/html/nextcloud$  
이제 Nextcloud에 접속해봅시다.

위와 같은 화면이 나타납니다.

이 Nextcloud 인스턴스는 현재 점검 모드입니다. 시간이 걸릴 수도 있습니다.

Nextcloud 인스턴스를 다시 사용할 수 있으면 자동으로 새로 고칩니다.

이 메시지가 계속 표시되거나, 예상하지 못하였을 때 표시된다면 시스템 관리자에게 연락하십시오.

기다려 주셔서 감사합니다.

위 문구가 보이면 유지보수 모드가 제대로 활성화 되고 있는 것입니다.

이제 DB를 백업하고 복원하는 과정을 알아보지요.

phpmyadmin을 이용한 DB 백업과 복원

일단 phpmyadmin이 설치되어 있다는 가정 하에 진행하도록 하겠습니다. 만약 설치가 안되어 있다면 아래 링크를 참고하여 설치하시기 바랍니다.

2018/11/23 - [IT/가상머신, 서버, CMS 구축] - phpmyadmin 설치

DB 백업

phpmyadmin에 접속하면 위와 같은 화면이 나타납니다. 사용자명과 암호를 입력하고 실행버튼을 눌러줍니다. 그러면 아래와 같은 화면을 볼 수 있습니다.

이 화면에서 왼쪽의 nextcloud 데이터베이스 링크를 클릭합니다. 그럼 아래와 같은 화면을 볼 수 있게 됩니다.

이 화면에서 상단의 내보내기 버튼을 누릅니다.

내보내기 버튼을 누르면 위와 같은 오류 화면이 나옵니다. 이것은 프로그램 자체 버그입니다. 큰 문제는 없으므로 그냥 모두 무시 버튼을 눌러줍니다.

이 상태 그대로 실행 버튼을 눌러줍니다.

sql 파일 다운로드 창이 뜹니다. 파일로 저장에 체크하고 확인 버튼을 눌러줍니다.

내폴더 - 다운로드에 저장됩니다.

내보내기 - 퀵 대신 내보내기 - 커스텀 방식도 있습니다.

전제 화면은 아래와 같습니다.





DB 삭제

phpmyadmin 메인 화면에서 상단 데이터베이스 메뉴를 누릅니다.

nextcloud DB가 보입니다. 해당 항목을 체크하고 선택한 것을 삭제 링크를 눌러줍니다.

위와 같은 화면이 나옵니다. 확인 버튼을 눌러줍니다. 그러면 해당 데이터베이스가 삭제된 것을 확인할 수 있습니다.

DB 생성

위 그림처럼 새 데이터베이스 이름과 데이터 정렬방식을 정해주고 실행 버튼을 눌러줍니다.

DB 가져오기 = DB 복원

여기서 가져오기 버튼을 눌러줍니다.

내보내기와 마찬가지로 오류가 납니다. 역시 프로그램의 버그입니다. 큰 문제는 아니므로 모두 무시 버튼을 눌러 넘어갑니다.

위 그림처럼 찾아보기 버튼을 눌러 다운받은 sql파일을 선택합니다. 그리고 나머지 설정들은 그대로 두고 페이지 아래의 실행 버튼을 눌러줍니다.

가져오기가 성공하면 위와 같은 화면이 나옵니다.

DB 백업에서 복원까지의 기본 과정은 끝마쳤습니다. 이 과정은 다른 CMS에도 공통적으로 적용됩니다.

Data 백업과 복원은 따로 해주어야 합니다. 방법은 관련 게시물 링크를 참고하시기 바랍니다.

이상의 작업을 끝마친 후, Nextcloud 유지보수 모드 해제를 해주어야 합니다.

Nextcloud 유지보수 모드 해제

study@study-VirtualBox:~$ cd /var/www/html/nextcloud
study@study-VirtualBox:/var/www/html/nextcloud$ sudo -u www-data php occ maintenance:mode --off
[sudo] study의 암호: 
Maintenance mode disabled
study@study-VirtualBox:/var/www/html/nextcloud

터미널에 위 명령들을 실행해줍니다. 그리고 나서 Nextcloud에 접속, 로그인 해보십시오. 잘 된다면 무사히 복원된 것입니다.


터미널을 통한 DB 백업과 복원

DB 백업 작업 시작 전 Nextcloud의 유지보수 모드 활성화와 DB 복원 작업 후 Nextcloud의 유지보수 모드 해제는 앞의 글을 참고하시기 바랍니다.

DB 확인

study@study-VirtualBox:~$ mysql -u root -p

위 명령을 실행해줍니다. 그리고 MariaDB 접속 암호를 입력해줍니다. 그러면 아래와 같은 내용이 출력됩니다.

study@study-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.3.12-MariaDB-1:10.3.12+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
MariaDB의 프롬프트 상태에서 다음의 명령을 실행해줍니다.

MariaDB [(none)]> show databases;
그럼 다음과 같은 화면이 나옵니다.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| nextcloud          |
| performance_schema |
| phpmyadmin         |
+--------------------+
6 rows in set (0.052 sec)

MariaDB [(none)]> 

nextcloud 데이터베이스가 존재하는 것을 볼 수 있습니다. 확인했으니 아래 명령을 실행하여 MariaDB 콘솔화면에서 빠져 나갑시다.

MariaDB [(none)]> \q 
그러면 아래와 같이 빠져 나오게 됩니다.

MariaDB [(none)]> \q
Bye
study@study-VirtualBox:~$ 

DB 백업

일단 백업 파일을 다운받을 디렉토리로 이동합시다.

study@study-VirtualBox:~$ cd ./다운로드

이동한 상태에서 nextcloud DB를 백업해봅시다.

백업 명령의 기본 구문은 다음과 같습니다.

mysqldump --single-transaction -h [server] -u [username] -p [db_name] > [filename]_`date +"%Y%m%d"`.bak 
이것을 바탕으로 실제로 백업 명령을 실행해봅시다.

study@study-VirtualBox:~/다운로드$ mysqldump --single-transaction -h localhost -u root -p nextcloud > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak 

위 명령을 실행해줍니다. 그러면 MariaDB 접속 암호를 물으니 암호를 입력해줍니다.

그러면 백업 파일이 생성됩니다. 제대로 생성되었는지 ls 명령어를 실행하여 확인해봅시다.

study@study-VirtualBox:~/다운로드$ ls
LocalSettings.php        nextcloud-14.0.3.tar.bz2       nextcloud.sql
mediawiki-1.31.1.tar.gz  nextcloud-sqlbkp_20190115.bak
study@study-VirtualBox:~/다운로드$ 

nextcloud-sqlbkp_20190115.bak 파일이 보입니다. 잘 생성이 되었네요.

아까 DB 백업 명령 구문에서 `date +"%Y%m%d"` 구문이 DB 백업 파일 이름에 백업 날짜를 자동으로 붙여주는 구문입니다.

DB 삭제

이제 백업 파일이 생긴 것도 확인했으니 기존 DB를 삭제합시다.

DB 삭제 기본 명령 구문은 다음과 같습니다.

mysql -h [server] -u [username] -p -e "DROP DATABASE [db_name]" 

위 구문을 바탕으로 실제로 DB 삭제 명령을 실행해봅시다.

study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p -e "DROP DATABASE nextcloud" 
삭제가 제대로 되었는지 확인해봅시다.

새 터미널을 열어 확인해봅시다. 제대로 이루어졌다면 아래와 같이 나올 겁니다.

study@study-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 20
Server version: 10.3.12-MariaDB-1:10.3.12+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| performance_schema |
| phpmyadmin         |
+--------------------+
5 rows in set (0.000 sec)

MariaDB [(none)]> \q
Bye
study@study-VirtualBox:~$ 
nextcloud DB가 지워진 것을 확인할 수 있습니다. 이 터미널은 그대로 놔두고 아까 작업하던 터미널로 돌아옵니다.

DB 생성

이제 새 DB를 생성해줍니다.

DB 생성 기본 구문은 다음과 같습니다.

mysql -h [server] -u [username] -p -e "CREATE DATABASE [db_name]" 


mysql -h [server] -u [username] -p -e "CREATE DATABASE [db_name] CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci" 

첫 번째 구문이 가장 기본적인 구문입니다.

두 번째 구문은 캐릭터셋(= 언어셋 = 문자셋  = 문자집합)을 별도로 지정하는 것입니다. 근래 두 번째 구문처럼 utf8mb4 캐릭터셋을 사용하는 경우가 늘고 있습니다. utf8mb4는 이모지(Emoji) 문자열 등 4bytes의 문자열을 지원합니다. 두 번째 구문을 사용할 것을 추천합니다.

study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
Enter password: 
study@study-VirtualBox:~/다운로드$ 
이제 다시 새로 열었던 터미널로 돌아와 DB가 제대로 생성되었는지 확인해봅시다.

단, 아까와는 달리 캐릭터셋까지 확인해봅시다.

MariaDB [(none)]> SELECT SCHEMA_NAME 'database', DEFAULT_CHARACTER_SET_NAME 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+--------------------+---------+--------------------+
| database           | charset | collation          |
+--------------------+---------+--------------------+
| information_schema | utf8    | utf8_general_ci    |
| performance_schema | utf8    | utf8_general_ci    |
| nextcloud          | utf8mb4 | utf8mb4_general_ci |
| phpmyadmin         | utf8mb4 | utf8mb4_general_ci |
| mysql              | utf8mb4 | utf8mb4_general_ci |
| my_wiki            | utf8    | utf8_general_ci    |
+--------------------+---------+--------------------+
6 rows in set (0.000 sec)

MariaDB [(none)]> \q
Bye
study@study-VirtualBox:~$  
원하는 방식으로 DB가 생성된 것을 확인할 수 있습니다.

DB 복원

이제 백업했던 파일로 복원해봅시다. 처음 열었던 터미널로 돌아와 다음의 명령을 실행해줍니다.

study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p nextcloud < nextcloud-sqlbkp_20190115.bak 

DB 복원은 완료되었습니다.


Data 복원까지 끝마친 후 Nextcloud의 유지보수 모드를 해제해주시면 됩니다.

그 다음 Nextcloud에 접속해 로그인하여 복원이 잘 되었는지 확인해보시기 바랍니다.

Nextcloud의 유지보수 모드 부분을 뺀 나머지 부분은 다른 CMS에도 적용이 됩니다.

아래는 터미널에서 이루어지는 전체 과정을 그대로 옮긴 내용입니다. 참고하시기 바랍니다.

터미널 1

study@study-VirtualBox:~$ cd /var/www/html/nextcloud
study@study-VirtualBox:/var/www/html/nextcloud$ sudo -u www-data php occ maintenance:mode --on
[sudo] study의 암호: 
Maintenance mode enabled
study@study-VirtualBox:/var/www/html/nextcloud$ cd ~
study@study-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.3.12-MariaDB-1:10.3.12+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| nextcloud          |
| performance_schema |
| phpmyadmin         |
+--------------------+
6 rows in set (0.050 sec)

MariaDB [(none)]> \q
Bye
study@study-VirtualBox:~$ cd ./다운로드
study@study-VirtualBox:~/다운로드$ mysqldump --single-transaction -h localhost -u root -p nextcloud > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
Enter password: 
study@study-VirtualBox:~/다운로드$ ls
LocalSettings.php        nextcloud-14.0.3.tar.bz2       nextcloud.sql
mediawiki-1.31.1.tar.gz  nextcloud-sqlbkp_20190115.bak
study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p -e "DROP DATABASE nextcloud"
Enter password: 
study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
Enter password: 
study@study-VirtualBox:~/다운로드$ mysql -h localhost -u root -p nextcloud < nextcloud-sqlbkp_20190115.bak
Enter password: 
study@study-VirtualBox:~/다운로드$ cd /var/www/html/nextcloud
study@study-VirtualBox:/var/www/html/nextcloud$ sudo -u www-data php occ maintenance:mode --off
[sudo] study의 암호: 
Maintenance mode disabled
study@study-VirtualBox:/var/www/html/nextcloud$ cd ~
study@study-VirtualBox:~$ 

터미널 2

study@study-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 106
Server version: 10.3.12-MariaDB-1:10.3.12+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| performance_schema |
| phpmyadmin         |
+--------------------+
5 rows in set (0.000 sec)

MariaDB [(none)]> SELECT SCHEMA_NAME 'database', DEFAULT_CHARACTER_SET_NAME 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+--------------------+---------+--------------------+
| database           | charset | collation          |
+--------------------+---------+--------------------+
| information_schema | utf8    | utf8_general_ci    |
| performance_schema | utf8    | utf8_general_ci    |
| nextcloud          | utf8mb4 | utf8mb4_general_ci |
| phpmyadmin         | utf8mb4 | utf8mb4_general_ci |
| mysql              | utf8mb4 | utf8mb4_general_ci |
| my_wiki            | utf8    | utf8_general_ci    |
+--------------------+---------+--------------------+
6 rows in set (0.000 sec)

MariaDB [(none)]> \q
Bye
study@study-VirtualBox:~$