시놀로지 MariaDB 패키지를 Docker 를 사용해서 MariaDB 최신버전으로 마이그레이션 하는 과정

Nov 7, 2024 | 0 comments

개요

시놀로지에서 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)]>

Learn more on this topic

Related Blog Posts

Join in the conversation

Leave a Comment

0 Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

무료 온라인 전광판

전광판

텍스트를 입력하고 텍스트 효과 및 배경효과 를 변경해서 전체화면으로 표시할 수 있는 전광판 용도로 사용하실 수 있습니다. 각종 스포츠 및 공연 관람시 응원 용도로 사용이 가능합니다.

Carousel

여러개의 슬라이드를 추가하여 프레젠테이션 및 이미지 슬라이드 용도로 사용하실 수 있습니다. 브라우저가 포함된 IT 기기로 큰 모니터에 연결하여 매장 내 공지사항 및 메뉴소개를 이미지로 표시할 수 있습니다.

Pin It on Pinterest

Shares
Share This

Share This

Share this post with your friends!

Shares