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 | +-------------------------+-----------+
関連記事
-
-
CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法
Cockpitにはcockpit-podmanというPodman(Dockerの ...
-
-
PodmanにComposerを導入し、パッケージをインストールする方法
先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...
-
-
Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法
Podmanでデータベース用コンテナを作成し、Webサーバ用コンテナからPHPで ...
-
-
Podmanで導入したPHPの設定ファイル(php.ini)変更と高速化に関する設定方法
Podmanで導入したPHPの設定ファイル(php.ini)の内容を変更したい。 ...
-
-
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...