3.5. MariaDB


3.5.1. 概要

OpenShift Online には、MariaDB の実行用のコンテナーイメージがあります。このイメージでは、設定ファイルで指定されるユーザー名、パスワード、データベース名の設定に基づいてデータベースサービスが提供されます。

3.5.2. バージョン

現時点で、OpenShift Online は MariaDB のバージョン 10.0 および 10.1 を提供しています。

3.5.3. イメージ

RHEL 7 イメージは、Red Hat レジストリーから入手できます。

$ docker pull registry.access.redhat.com/rhscl/mariadb-100-rhel7
$ docker pull registry.access.redhat.com/rhscl/mariadb-101-rhel7

mariadb イメージストリームを使用して、MariaDB 10.1 イメージを使用できます。

3.5.4. 設定および用途

3.5.4.1. データベースの初期化

共有ボリュームを初めて使用する場合には、データベース、データベースの管理ユーザー、MariaDB root ユーザー (MYSQL_ROOT_PASSWORD 環境変数を指定した場合) が作成されます。その後、MariaDB デーモンが起動します。別のコンテナーにボリュームを再アタッチする場合には、データベース、データベースユーザー、管理者ユーザーは作成されず、MariaDB デーモンが開始されます。

以下のコマンドは、新しいデータベースの Pod を作成し、さらにコンテナー内で MariaDB を実行します。

$ oc new-app \
    -e MYSQL_USER=<username> \
    -e MYSQL_PASSWORD=<password> \
    -e MYSQL_DATABASE=<database_name> \
    mariadb:10.1

3.5.4.2. コンテナーでの MariaDB コマンドの実行

OpenShift Online は Software Collections (SCL) を使用して、MariaDB をインストールし、起動します。(デバッグ用に) 実行中のコンテナー内で MariaDB コマンドを実行する場合には bash を使用して呼び出す必要があります。

これを実行するには、まず、実行中の MariaDB Pod の名前を特定します。たとえば、現在のプロジェクトで Pod の一覧を表示できます。

$ oc get pods

次に、Pod に対してリモートシェルセッションを開始します。

$ oc rsh <pod>

コンテナーに入ると、必要な SCL が自動的に有効になります。

Bash シェルから mysql コマンドを実行し、MariaDB の対話セッションを開始して通常の MariaDB 操作が実行できるようになりました。たとえば、データベースユーザーとして認証するには、以下を実行します。

bash-4.2$ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOSTNAME $MYSQL_DATABASE
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.37 MySQL Community Server (GPL)
...
mysql>

完了したら、quit または exit を入力して MySQL セッションを終了します。

3.5.4.3. 環境変数

MariaDB ユーザー名、パスワード、データベース名は、以下の環境変数で設定する必要があります。

表3.7 MariaDB 環境変数
変数名説明

MYSQL_USER

作成する MySQL アカウントのユーザー名

MYSQL_PASSWORD

ユーザーアカウントのパスワード

MYSQL_DATABASE

データベース名

MYSQL_ROOT_PASSWORD

root ユーザーのパスワード (オプション)

警告

ユーザー名、パスワード、データベース名を指定する必要があります。この 3 つすべてを指定しない場合には、Pod は起動に失敗し、OpenShift Online は Pod の再起動を継続的に試行します。

MariaDB 設定は、以下の環境変数で設定できます。

表3.8 MariaDB の他の設定
変数名説明デフォルト

MYSQL_LOWER_CASE_TABLE_NAMES

テーブル名の保存および比較方法を設定します。

0

MYSQL_MAX_CONNECTIONS

クライアントが同時に接続可能な最大数

151

MYSQL_MAX_ALLOWED_PACKET

生成された文字列/中間文字列または 1 つのパケットの最大サイズ

200M

MYSQL_FT_MIN_WORD_LEN

FULLTEXT インデックスに含める文字の最小長

4

MYSQL_FT_MAX_WORD_LEN

FULLTEXT インデックスに含める文字の最大長

20

MYSQL_AIO

ネイティブの AIO が壊れている場合に innodb_use_native_aio の設定値を制御します。

1

MYSQL_TABLE_OPEN_CACHE

全スレッド用に開くテーブル数

400

MYSQL_KEY_BUFFER_SIZE

インデックスブロックに使用するバッファーサイズ

32M (または利用可能なメモリーの 10%)

MYSQL_SORT_BUFFER_SIZE

分類に使用するバッファーサイズ

256K

MYSQL_READ_BUFFER_SIZE

シーケンススキャンに使用するバッファーサイズ

8M (または利用可能メモリーの 5%)

MYSQL_INNODB_BUFFER_POOL_SIZE

InnoDB がテーブルやインデックスデータをキャッシュするバッファープールのサイズ

32M (または利用可能なメモリーの 50%)

MYSQL_INNODB_LOG_FILE_SIZE

ロググループにある各ログファイルのサイズ

8M (または利用可能メモリーの 15%)

MYSQL_INNODB_LOG_BUFFER_SIZE

InnoDB がディスクのログファイルへの書き込みに使用するバッファーサイズ

8M (または利用可能メモリーの 15%)

MYSQL_DEFAULTS_FILE

別の設定ファイルを参照します。

/etc/my.cnf

MYSQL_BINLOG_FORMAT

binlog 形式で設定します。 サポートされる値は、row および statement です。

statement

3.5.4.4. ボリュームのマウントポイント

MariaDB イメージは、マウントしたボリュームで実行して、データベース用に永続ストレージを有効化できます。

  • /var/lib/mysql/data: MySQL のデータディレクトリーは、MariaDB がデータベースファイルを保存する場所にあります。

3.5.4.5. パスワードの変更

パスワードはイメージ設定の一部であるため、データベースユーザー (MYSQL_USER) と admin ユーザーのパスワードを変更するための唯一のサポートされる方法とし、環境変数 MYSQL_PASSWORDMYSQL_ROOT_PASSWORD をそれぞれ変更することができます。

現在のパスワードは、Pod またはデプロイメント設定を Web コンソールで表示するか、CLI で環境変数を表示して、確認できます。

$ oc set env pod <pod_name> --list

SQL ステートメントや、前述した環境変数以外の方法でデータベースのパスワードを変更すると、変数に保存されている値と、実際のパスワードが一致しなくなる可能性があります。データベースコンテナーが起動するたびに、パスワードは環境変数に保存されている値にリセットされます。

これらのパスワードを変更するには、oc set env コマンドを使用して、関連するデプロイメント設定の任意の環境変数 1 つまたは両方を更新します。たとえば、テンプレートからアプリケーションを作成する場合など、複数のデプロイメント設定がこれらの環境変数を使用する場合には、デプロイメント設定ごとに変数を更新し、パスワードがどこでも同期されるようにします。これは、すべて同じコマンドで実行できます。

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  MYSQL_PASSWORD=<new_password> \
  MYSQL_ROOT_PASSWORD=<new_root_password>
重要

アプリケーションによっては、アプリケーションの他の場所にあるパスワードの他の環境変数を更新して一致させる必要があるものもあります。たとえば、フロントエンド Pod のより一般的な DATABASE_USER 変数などは、データベースユーザーのパスワードと一致する必要がある場合があります。必要とされる環境変数すべてにおいて、パスワードがアプリケーションごとに一致しているようにしてください。 一致しない場合には、トリガーされた時点で、Pod の再デプロイメントが失敗する場合があります。

設定変更トリガーが設定されている場合には、環境変数を更新すると、データベースサーバーの再デプロイメントがトリガーされます。設定されていない場合には、新しいデプロイメントを手動で起動して、パスワードの変更を適用する必要があります。

新規パスワードが有効になっていることを確認するには、まず、実行中の MariaDB Pod へのリモートシェルセッションを開始します。

$ oc rsh <pod>

Bash シェルから、データベースユーザーの新規パスワードを確認します。

bash-4.2$ mysql -u $MYSQL_USER -p<new_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

パスワードが正しく変更された場合には、以下のような表が表示されるはずです。

+------------+---------------------+
| database() | user()              |
+------------+---------------------+
| sampledb   | user0PG@172.17.42.1 |
+------------+---------------------+

root ユーザーの新規パスワードを確認するには、以下を実行します。

bash-4.2$ mysql -u root -p<new_root_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

パスワードが正しく変更された場合には、以下のような表が表示されるはずです。

+------------+------------------+
| database() | user()           |
+------------+------------------+
| sampledb   | root@172.17.42.1 |
+------------+------------------+

3.5.5. テンプレートからのデータベースサービスの作成

OpenShift Online には テンプレートが含まれており、新規データベースサービスの作成を簡素化します。テンプレートには、必須の環境変数をすべて定義するパラメーターフィールドがあり (ユーザー、パスワード、データベース名など)、自動生成されたパスワード値など、事前定義済みのデフォルト値が設定されます。また、テンプレートは デプロイメント設定 および サービス の両方を定義します。

MariaDB テンプレートは、クラスターの初期設定時にクラスター管理者により、デフォルトの openshift プロジェクトに登録しておく必要があります。

以下のテンプレートを使用できます。

  • mariadb-persistent は、データベースのデータ用に永続ボリュームストアを使用するので、データは Pod が再起動されても残ります。

この説明に従い、テンプレートをインスタンス化できます。

サービスをインスタンス化したら、データベースにアクセスする予定のある別のコンポーネントのデプロイメント設定に、ユーザー名、パスワード、データベース名の環境変数をコピーできます。このコンポーネントは、定義したサービスを使用してこのデータベースにアクセスできます。

3.5.6. トラブルシューティング

以下のセクションでは、発生する可能性のある問題と、考えられる解決策を説明します。

3.5.6.1. Linux ネイティブの AIO の障害

現象

MySQL コンテナーが起動に失敗し、以下のようなログを出力します。

151113  5:06:56 InnoDB: Using Linux native AIO
151113  5:06:56  InnoDB: Warning: io_setup() failed with EAGAIN. Will make 5 attempts before giving up.
InnoDB: Warning: io_setup() attempt 1 failed.
InnoDB: Warning: io_setup() attempt 2 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 3 failed.
InnoDB: Warning: io_setup() attempt 4 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 5 failed.
151113  5:06:59  InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts.
InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
151113  5:06:59 InnoDB: Fatal error: cannot initialize AIO sub-system
151113  5:06:59 [ERROR] Plugin 'InnoDB' init function returned error.
151113  5:06:59 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151113  5:06:59 [ERROR] Unknown/unsupported storage engine: InnoDB
151113  5:06:59 [ERROR] Aborting

説明

MariaDB のストレージエンジンは、リソース制限が原因で、カーネルの AIO (非同期 I/O) 機能を使用できませんでした。

解決策

環境変数 MYSQL_AIO の値を 0 に設定して、AIO の使用を完全に停止します。今後のデプロイメントでは、この設定により MySQL の設定変数 innodb_use_native_aio の値が 0 に指定されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.