Kubernetes や Docker で MariaDB / MySQL をコンテナ化する場合、/var/lib/mysql をどのように永続化するかが重要になります。コンテナ自体は起動できても、データディレクトリを外部ボリュームにした瞬間に初期化で止まることがあります。
この記事の位置づけ
この記事は、Kubernetes 上で MariaDB のデータ領域を永続化するための記事です。コンテナを再作成しても /var/lib/mysql を失わないように、Pod とストレージの責務を分けて考えます。
次に読む記事
書籍
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
問題になったこと
MariaDB コンテナを自作していた時、単体では正常に起動するのに、/var/lib/mysql を外部ボリュームへ出すと初期データの書き込みが途中で止まり、Pod が起動しなくなりました。
原因はパーミッション
原因は複雑な Kubernetes 固有の問題ではなく、ボリューム上の所有者と権限でした。データベースコンテナは、起動時に /var/lib/mysql へ初期データを書き込みます。この時、コンテナ内の実行ユーザーがボリュームへ書けないと初期化に失敗します。
確認すること
- コンテナ内で MariaDB / MySQL がどの UID / GID で動くのか確認する。
- PersistentVolume / hostPath / NFS など、実際の保存先の所有者と権限を確認する。
- 初回起動時に作成されるファイルが途中で止まっていないか確認する。
- root で書けるかではなく、DB プロセスの実行ユーザーで書けるかを見る。
確認コマンド
kubectl describe pod <mariadb-pod>
kubectl logs <mariadb-pod>
kubectl exec -it <mariadb-pod> -- id
kubectl exec -it <mariadb-pod> -- ls -ld /var/lib/mysqlまとめ
Kubernetes の永続化トラブルは、StorageClass や PV / PVC の問題に見えて、実際には単純なパーミッションであることがあります。特に MariaDB / MySQL の /var/lib/mysql は初期化時に書き込みが発生するため、ボリュームの所有者、権限、実行ユーザーを最初に確認するのが近道です。



