勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Podmanで導入したデータベース(MariaDB)用コンテナのチューニングに関する設定方法

先日Podmanでデータベース(MariaDB)用コンテナを導入したが、当該コンテナにはメモリを256MBしか割り当てていないため、デフォルト設定のままだと少しのアクセスでもコンテナが落ちそうで怖い。そのため設定ファイルでその辺りの調整を行っておきたいところ。以下に対応方法をメモ。

 

環境について

VPS

今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。

  • 接続ポート -> 22
  • ユーザ名 -> root
  • パスワード or 秘密鍵 -> インスタンス作成時に選択したもの

ホスト(VPS)側 AlmaLinux

詳細なバージョンは以下の通り。

# AlmaLinuxのバージョン確認
cat /etc/redhat-release

# 実行結果
AlmaLinux release 8.10 (Cerulean Leopard)

 

事前準備

カスタム用設定ファイルの作成(custom-mariadb.cnf)

以下カスタム用設定ファイルをDockerfileと同じディレクトリにアップロードしておく。

尚、設定内容は適宜変更すること。

[mysqld]
# InnoDBのデータやインデックスのバッファ用メモリのサイズ
innodb_buffer_pool_size = 32M

# InnoDBのトランザクションのためのバッファのサイズ
innodb_log_buffer_size = 2M

# 同時接続数
max_connections = 20

# すべての接続で同時に開けるテーブル合計数
table_open_cache = 100

# スレッドキャッシュ保持最大数
thread_cache_size = 4

# フルスキャン用のバッファ
read_buffer_size = 256K

# ソート後にレコードを読むときに使用されるバッファ
read_rnd_buffer_size = 256K

# ソート時に使用されるバッファ
sort_buffer_size = 512K

# インデックス未使用でのJOIN時に使用するバッファ
join_buffer_size = 512K

# 文字コード設定
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

 

対応方法

対応方法の違い

ホスト側の設定ファイルをマウントする方法とコンテナ側に設定ファイルをコピーする方法があり、以下違いがある。

  • ホスト側の設定ファイルをマウントする方法 -> コンテナ作成時にホスト側の設定ファイルをマウントするように設定する。設定ファイルを変更後、コンテナを再起動すれば変更内容が反映される(コンテナ再生成は不要)。
  • コンテナ側に設定ファイルをコピーする方法 -> Dockerfileに「ビルド時に設定ファイルをコンテナ側にコピー(配置)する」といった内容を追記し、それをビルド→コンテナを作成する形。コンテナ作成時、コンテナ側に設定ファイルをコピー(設置)するため、設定内容を変更するにはコンテナ再生成の必要がある。

尚、当面はホスト側の設定ファイルをマウントする方法を使用しそうなので、本記事でもこの方法のみメモする。

ホスト側の設定ファイルをマウントする方法

コンテナ作成時のボリューム設定にて以下も追加で設定する。

  • ホストパス -> /Dockerfileの設置ディレクトリ/custom-mariadb.cnf
  • コンテナパス -> /etc/mysql/conf.d/custom-mariadb.cnf
  • モード -> 書き込み可能のチェックを外す

その他は過去記事の通りコンテナを作成し、ネットワーク設定も過去記事を参考に行う。

また、Cockpitでのコンテナ作成ではなく、サーバにSSH接続しCLIで作成する場合は以下コマンドになる。

podman run -d \
  --name mariadb-plus-1.0 \
  --network web-db-net \
  --memory=256m \
  -e MARIADB_ROOT_PASSWORD=test_root_pass \
  -e MARIADB_DATABASE=test_database \
  -e MARIADB_USER=test_user \
  -e MARIADB_PASSWORD=test_user_pass \
  -v /var/lib/mariadb_data:/var/lib/mysql:Z \
  -v /Dockerfileの設置ディレクトリ/custom-mariadb.cnf:/etc/mysql/conf.d/custom-mariadb.cnf:ro,Z \
  docker.io/library/mariadb:11.4

後からcustom-mariadb.cnfを変更したい場合

ホスト側のcustom-mariadb.cnfを編集後、Cockpit上からコンテナを再起動するか、SSH接続後以下コマンドで再起動すれば変更内容が反映される。

podman restart mariadb-plus-1.0

補足

コンテナ再作成時にパスワード等を変更しても反映されない場合

一度データベース用コンテナを作成し、データの永続用ディレクトリ(今回の場合「/var/lib/mariadb_data」)にデータが残っている場合、そちらが参照されるためコンテナ再作成時の環境変数は反映されない。そのため以下のどちらかの方法を取る。

データベースにアクセスして各種変更

以下の通りデータベースにアクセスして各種パスワードを変更する。

podman exec -it mariadb-plus-1.0 mariadb -u root -p
永続用ディレクトリを退避させる

以下の通り永続用ディレクトリ名を変更し、新しく作り直した上でコンテナ再生成時に「/var/lib/mariadb_data」をマウントする。

# 永続用ディレクトリ名の変更
mv /var/lib/mariadb_data /var/lib/mariadb_data_backup_yyyymmdd

# 再度永続用ディレクトリの作成
mkdir -p /var/lib/mariadb_data

設定した値が正常に反映されているか確認する方法

innodb_buffer_pool_sizeが正常に反映されているか確認する場合は以下コマンドを実行する。「-p」の後はスペースを空けずにパスワードを入力すること。

# innodb_buffer_pool_sizeの値を確認
podman exec -it 【コンテナ名】 mariadb -u root -p【root用パスワード】 -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

# 以下が出力されればOK
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| innodb_buffer_pool_size | 33554432 |
+-------------------------+----------+

変更前のデフォルト設定は以下だったので正常に反映されていた。

+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+

 - MySQL データベース サーバー

  関連記事

Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法
Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法

Podmanでデータベース用コンテナを作成し、Webサーバ用コンテナからPHPで ...

CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法
CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法

Cockpitにはcockpit-podmanというPodman(Dockerの ...

Podmanで導入したapache-phpに各種PHPモジュールを追加する方法
Podmanで導入したapache-phpに各種PHPモジュールを追加する方法

先日Podmanでapache-php8.4を導入したが、phpinfoで確認す ...

Podmanで導入したApacheのチューニング(mpm_prefork)に関する設定方法
Podmanで導入したApacheのチューニング(mpm_prefork)に関する設定方法

Podmanで導入したApacheのチューニング(mpm_prefork)を行い ...

Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法
Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法

先日PodmanでWebサーバ用コンテナを作成したが、ブラウザからアクセスする際 ...