개요
시놀로지에서 MariaDB 를 시놀로지 패키지로 설치해서 사용중입니다.
현 시점(2024년 11월) 기준으로 최신 버전의 패키지를 설치해도 MariaDB 의 버전은 10.3.32 입니다.
운영중인 워드프레스 블로그가 패키지로 설치된 MariaDB 를 사용하고 있습니다.
워드프레스 Site Headth 에 따르면 데이터베이스 버전을 업그레이드할 것을 추천하고 있습니다.
블로그 뿐만 아니라 다른 서비스도 MariaDB 를 사용 중이라 이번 기회에 패키지 업데이트에 의존하지 않고
Docker 컨테이너에 올려서 직접 관리하고자 기존의 데이터베이스를 이관하기로 결정하였습니다.
참조
데이터베이스 백업
터미널 접속 후 mariabackup 경로로 이동
root 계정으로 백업을 진행합니다.
공식 문서에서는 별도 사용자를 추가해서 권한 설정 등등 번거로운 과정에 대해 설명하는데
모든 데이터베이스를 마이그레이션 할 예정이고 번거로운걸 싫어해서 그냥 root 계정으로 진행합니다.
sudo -I
cd /volume1/@appstore/MariaDB10/usr/local/mariadb10/bin
모든 데이터베이스 백업
mariabackup 명령어로 /tmp/202411061800 폴더에 모든 데이터베이스의 백업을 생성합니다.
mariabackup --backup \
--target-dir=/tmp/202411061800 \
--user=root --password='{{비밀번호}}'
MariaDB 버전 확인
MariaDB 에 접속해서 버전을 확인해 봅니다.
root@KKOMZI_HPN54L:/volume1/@appstore/MariaDB10/usr/local/mariadb10/bin# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.3.32-MariaDB Source 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)]> select version();
+-----------------+
| version() |
+-----------------+
| 10.3.32-MariaDB |
+-----------------+
1 row in set (0.000 sec)
MariaDB [(none)]>
Docker Image 버전 확인
Docker Hub 에서 해당 버전을 확인합니다.
https://hub.docker.com/_/mariadb/tags?name=10.3.32
Docker 컨테이너에 10.3.32 버전의 MariaDB 구성
Docker 컨테이너 폴더 생성
일반 계정으로 전환해서 MariaDB 폴더 구조를 생성합니다.
MariaDB [(none)]> exit
Bye
root@KKOMZI_HPN54L:~# exit
logout
kkomzi@KKOMZI_HPN54L:~$ cd /volume1/docker/
kkomzi@KKOMZI_HPN54L:/volume1/docker$ mkdir mariadb2024
kkomzi@KKOMZI_HPN54L:/volume1/docker$ cd mariadb2024/
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ mkdir conf
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ mkdir data
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$
docker-compose.yaml 작성
다음과 같이 작성해서 컨테이너 폴더에 저장합니다.
version: '3.1'
services:
mariadb2024:
image: mariadb:10.3.32
container_name: mariadb2024
restart: always
ports:
- 3306:3306
volumes:
- type: bind
source: /volume1/docker/mariadb2024/conf
target: /etc/mysql/conf.d
- type: bind
source: /volume1/docker/mariadb2024/data
target: /var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: {{비밀번호}}
MARIADB_USER: kkomzi
MARIADB_PASSWORD: {{비밀번호}}
MARIADB_DATABASE: kkomzi
MARIADB_AUTO_UPGRADE: 0
컨테이너 실행
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ docker-compose up -d
Creating network "mariadb2024_default" with the default driver
Creating mariadb2024 ... done
MariaDB 접속 테스트
컨테이너에 접속해서 데이터베이스 목록을 조회해 봅니다.
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ docker exec -it mariadb2024 /bin/bash
root@6b6b6a3fbd67:/# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.32-MariaDB-1:10.3.32+maria~focal 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 |
| kkomzi |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.049 sec)
MariaDB [(none)]>
MariaDB 컨테이너에 기존 데이터베이스 복원
백업 폴더를 컨테이너 폴더에 복사
root 계정으로 전환해서 백업 폴더를 컨테이너 폴더에 복사 후 원래 계정으로 전환합니다.
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ sudo -i
root@KKOMZI_HPN54L:~# docker cp /tmp/202411061800/ mariadb2024:/tmp/
root@KKOMZI_HPN54L:~# exit
logout
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$
백업 데이터 검증
mariabackup 명령어에 –prepare 옵션을 할당해서 데이터를 미리 확인합니다.
데이터에 이상이 없는 경우 completed OK! 메세지를 확인할 수 있습니다.
참조 : Full Backup and Restore with Mariabackup – MariaDB Knowledge Base
docker exec -it mariadb2024 mariabackup --prepare --target-dir=/tmp/202411061800
컨테이너 데이터 폴더 비우기
백업을 실행하기 전에 컨테이너의 데이터 폴더는 비워둬야 합니다.
컨테이너에 접속해서 데이터 폴더 내에 있는 모든 파일과 폴더를 삭제합니다.
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ docker exec -it mariadb2024 /bin/bash
root@6b6b6a3fbd67:/# cd /var/lib/mysql
root@6b6b6a3fbd67:/var/lib/mysql# ls -al
total 122928
drwxr-xr-x 1 mysql users 268 Nov 6 14:42 .
drwxr-xr-x 1 root root 52 Feb 2 2022 ..
-rwxr-xr-x 1 mysql mysql 16384 Nov 6 14:42 aria_log.00000001
-rwxr-xr-x 1 mysql mysql 52 Nov 6 14:42 aria_log_control
-rwxr-xr-x 1 mysql mysql 976 Nov 6 14:42 ib_buffer_pool
-rwxr-xr-x 1 mysql mysql 50331648 Nov 6 14:42 ib_logfile0
-rwxr-xr-x 1 mysql mysql 50331648 Nov 6 14:32 ib_logfile1
-rwxr-xr-x 1 mysql mysql 12582912 Nov 6 14:42 ibdata1
-rwxr-xr-x 1 mysql mysql 12582912 Nov 6 14:42 ibtmp1
drwxr-xr-x 1 mysql mysql 12 Nov 6 14:32 kkomzi
-rwxr-xr-x 1 mysql mysql 0 Nov 6 14:32 multi-master.info
drwxr-xr-x 1 mysql mysql 2708 Nov 6 14:32 mysql
drwxr-xr-x 1 mysql mysql 12 Nov 6 14:32 performance_schema
-rwxr-xr-x 1 mysql mysql 24576 Nov 6 14:42 tc.log
root@6b6b6a3fbd67:/var/lib/mysql# rm -r *
root@6b6b6a3fbd67:/var/lib/mysql# ls -al
total 0
drwxr-xr-x 1 mysql users 0 Nov 6 15:03 .
drwxr-xr-x 1 root root 52 Feb 2 2022 ..
root@6b6b6a3fbd67:/var/lib/mysql# exit
exit
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$
복원 실행
mariabackup 명령어에 –copy-back 옵션을 할당해서 데이터를 복원 확인합니다.
오류 없이 복원에 성공한 경우 completed OK! 메세지를 확인할 수 있습니다.
docker exec -i mariadb2024 mariabackup --copy-back --target-dir=/tmp/202411061800 --datadir=/var/lib/mysql --user=root --password={{비밀번호}}
데이터 폴더 소유자 변경
다음 명령어로 컨테이너에 접속합니다.
docker exec -it mariadb2024 /bin/bash
다음 명령어로 데이터 폴더의 소유자를 변경합니다.
root@6b6b6a3fbd67:/tmp# cd /var/lib/mysql
root@6b6b6a3fbd67:/var/lib/mysql# chown -R mysql:mysql .
컨테이너 재시작
다음 명령어로 컨테이너를 재시작 합니다.
docker restart mariadb2024
복원된 데이터베이스 확인
다음 명령어로 컨테이너에 접속한 다음 모든 데이터베이스가 제대로 복원되었는지 확인해 봅니다.
(데이터베이스 확인 로그는 생략하였습니다.)
docker exec -it mariadb2024 /bin/bash
백업 폴더 삭제
백업에 사용된 폴더는 불필요 하므로 삭제합니다.
root@6b6b6a3fbd67:/# cd /tmp
root@6b6b6a3fbd67:/tmp# rm -r 202411061800
MariaDB 컨테이너를 최신 버전으로 업그레이드
docker-compose.yaml 파일 수정
다음과 같이 이미지 태그를 latest 로 수정합니다.
version: '3.1'
services:
mariadb2024:
image: mariadb:latest
container_name: mariadb2024
restart: always
ports:
- 3306:3306
volumes:
- type: bind
source: /volume1/docker/mariadb2024/conf
target: /etc/mysql/conf.d
- type: bind
source: /volume1/docker/mariadb2024/data
target: /var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: {{비밀번호}}
MARIADB_USER: kkomzi
MARIADB_PASSWORD: {{비밀번호}}
MARIADB_DATABASE: kkomzi
MARIADB_AUTO_UPGRADE: 0
컨테이너 업그레이드
다음과 같이 docker-compose 명령어로 컨테이너를 업그레이드 합니다.
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ docker-compose up -d
Recreating mariadb2024 ... done
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$
업그레이드 된 MariaDB 버전 확인
컨테이너에 접속해서 업그레이드 된 버전 정보를 확인합니다.
(mysql 커맨드가 특정 버전부터 지원하지 않나 봅니다.)
kkomzi@KKOMZI_HPN54L:/volume1/docker/mariadb2024$ docker exec -it mariadb2024 /bin/bash
root@035144e52fdc:/# mysql -u root -p
bash: mysql: command not found
root@035144e52fdc:/# mysql -u root -p
bash: mysql: command not found
root@035144e52fdc:/# mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 11.5.2-MariaDB-ubu2404 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)]> select version();
+------------------------+
| version() |
+------------------------+
| 11.5.2-MariaDB-ubu2404 |
+------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]>
0 Comments