DockerDesktopのMariaDBを10.5から10.6にバージョンアップする

技術メモ

はじめに

自宅で動かしている個人的な Web アプリにて、Docker Desktop で MariaDB10.5 を使用している。ふと思い立ち、これを 10.6 へバージョンアップする事にしたのでその際の作業メモを残しておく。

実施にあたり、以下のサイトを参考にさせて頂いた。

現在の docker-compose.yml

version: '3'

services:
  maria-db:
    container_name: mariadb
    image: mariadb:10.5
    volumes:
      - ./db_data:/var/lib/mysql:rw
      # 設定ファイル 以下を参考
      # https://qiita.com/kazuyoshikakihara/items/f0c5158c700bb7a5df9f
      - ./mariadb_cnf:/etc/mysql/conf.d:ro
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ●●●●
      # タイムゾーン設定
      TZ: Asia/Tokyo

docker-compose.yml は上記の通りである。かなり簡素だ。ベースはどこかで拾ってきたものだろうと思う。

8行目で ./db_data:/var/lib/mysql:rw と定義しているように、移行が必要なデータは全て db_data 配下にある筈だ。そのため、特に難しい事を考えずとも実は image: mariadb:10.5 を 10.6 に変えるだけで動くのではないか?と思ったが、それでは即終わってしまうのでもう少し試してみる事にした。

今回は mariabackup[Google] を使ってみよう。

Docker Desktop からターミナルに入る

起動中の mariadb のコンテナをクリックする。メニューから Terminal を選択するとコンテナに入れる。

mariabackup の存在確認

# bash
root@df539f9c5b30:/# which mariabackup
/usr/bin/mariabackup

シェルを bash に切り替えて which mariabackup すると、お目当ての mariabackup が同梱されているのは確認できた。

mariabackup 実行前に

- ./backup:/backup:rw

mariabackup を実行する際に、バックアップしたファイルをどこかに引き上げる必要がある。

一時的に、docker-compose.yml の volumes: に対し上記の定義を追加した。

docker-compose.yml の変更反映

PS D:\dezikomoe_docker\mariadb> docker-compose up -d
[+] Running 1/1
 ✔ Container mariadb  Started

Windows の PowerShell から docker-compose up -d を実行し、docker-compose.yml の変更を Docker Desktop に反映させる。

backup の確認

root@53dfe8e8442e:/# ls -al / | grep backup
drwxrwxrwx   1 root root 4096 Dec  6 17:33 backup

期待した通り、docker-compose.yml にて定義を追加した /backup が見えているのが確認できた。

ここを mariabackup の出力先に指定する。

mariabackup 実行

root@53dfe8e8442e:/# mariabackup --backup -u root -p●●●● --target-dir /backup
Warning: World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored
Warning: World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored
Warning: World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored
[00] 2023-12-06 17:48:24 Connecting to server host: localhost, user: root, password: set, port: not set, socket: /run/mysqld/mysqld.sock
(略)
[00] 2023-12-06 17:48:27 Redo log (from LSN 571041845 to 571041857) was copied.
[00] 2023-12-06 17:48:27 completed OK!

mariabackup を実行する。出力先には –target-dir で先程用意した /backup を指定した。

無事にバックアップが成功した。データ量がそう多くないので早い。

データ一貫性の確認

root@53dfe8e8442e:/# mariabackup --prepare --target-dir /backup
mariabackup based on MariaDB server 10.5.21-MariaDB debian-linux-gnu (x86_64)
[00] 2023-12-06 17:52:47 cd to /backup/
[00] 2023-12-06 17:52:47 open files limit requested 0, set to 1048576
(略)
[00] 2023-12-06 17:52:48 Last binlog file , position 0
[00] 2023-12-06 17:52:48 completed OK!

バックアップしたファイルが壊れていては困るので、mariabackup –prepare でチェックしておく。

docker-compose.yml の更新とリストア

PS D:\dezikomoe_docker\mariadb> docker-compose up -d
[+] Running 9/9
 ✔ maria-db 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled    11.2s
   ✔ 30ecab32a3b6 Pull complete                            3.1s
   ✔ 1e2dae117ed4 Pull complete                            3.1s
   ✔ f547b9a3fcc9 Pull complete                            3.8s
   ✔ 02774723d90d Pull complete                            3.8s
   ✔ f5f6045f24b4 Pull complete                            3.9s
   ✔ e437bf63f06e Pull complete                            7.8s
   ✔ fca136326924 Pull complete                            7.8s
   ✔ 966e08a8cec8 Pull complete                            7.8s
[+] Running 2/2
 ✔ Network mariadb_default  Created                        0.8s
 ✔ Container mariadb        Started                        1.4s

docker-compose.yml をコピーして image: mariadb:10.6 に更新後、新たに docker-compose up する。backup フォルダの下には、mariabackup で出力したファイルをコピーする。

10.5 は Docker Desktop から削除するが、それ以外の構成は念のため触らないでおく。

バージョン確認

root@ec69379d4ca8:/# mariadb --version
mariadb  Ver 15.1 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

当たり前だが正常起動する。mariadb –version すると、バージョンが10.6.16 に上がっている事が確認できた。

接続確認

root@ec69379d4ca8:/# mariadb -u root -p●●●●
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.6.16-MariaDB-1:10.6.16+maria~ubu2004 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 Shell を用いての接続も問題無し。

リストア実施→失敗

root@ec69379d4ca8:/# mariadb-admin -u root shutdown -p
Enter password:

パスワード●●●●を入力して Enter を押すと……あれ?Docker Desktop の Terminal が応答しなくなってしまった。

落ちてる

2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] mariadbd (initiated by: root[root] @ localhost []): Normal shutdown
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: FTS optimize thread exiting.
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: Starting shutdown...
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: Buffer pool(s) dump completed at 231206 21:33:24
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] InnoDB: Shutdown completed; log sequence number 571044439; transaction id 1713064
2023-12-06 21:33:24 2023-12-06 21:33:24 0 [Note] mariadbd: Shutdown complete

Docker Desktop のログを見ると、確かに正常に終了されている。

落とせません

root@ec69379d4ca8:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql        1  0.0  0.5 1204696 92532 ?       Ssl  21:33   0:00 mariadbd
root        65  0.0  0.0   2612   532 pts/0    Ss   21:35   0:00 /bin/sh
root        71  0.0  0.0   5996  3816 pts/0    S    21:36   0:00 bash
root        85  0.0  0.0   7648  3288 pts/0    R+   21:45   0:00 ps aux

ps aux してみると mariadbd が PID=1 になっており、どうも落とせそうにない。

mariadbd のサービス停止後、/var/lib/mysql 配下を空にしてリストアする手順のようだが諦めた。

リストア実施

以下の手順を実施した。

  • Docker Desktop から mariadb のコンテナを停止する。
  • /var/lib/mysql にバインドされている Windows 側の ./db_data 配下のファイルを全削除する。
  • /backup にバインドされている Windows 側の ./backup 配下のファイルを、./db_data にコピーする。
  • mariadb のコンテナをリスタートする。

データ確認

HeidiSQL[窓の杜] で接続し確認すると、データが正しくリストアされている事が確認できた。ヤッタネ!

タイトルとURLをコピーしました