はじめに
自宅で動かしている個人的な 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[窓の杜] で接続し確認すると、データが正しくリストアされている事が確認できた。ヤッタネ!