Docker Composeを使ってMariaDBイメージのSQLモードを変更する方法
Docker Composeを使ってMariaDBイメージを起動する際、デフォルトのSQLモードを変更したい場合があります。このチュートリアルでは、以下の2つの方法について説明します。
- 環境変数
- my.cnfファイルのカスタマイズ
前提条件
- Docker Composeがインストールされていること
- MariaDBイメージ
方法1:環境変数
Docker Composeファイルで環境変数 MYSQL_STRICT_MODE
を設定することで、SQLモードを指定できます。以下の例では、STRICT_TRANS_TABLES
と NO_ZERO_IN_DATE
モードを有効にしています。
version: "3"
services:
mariadb:
image: mariadb:latest
environment:
- MYSQL_STRICT_MODE=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
MariaDBイメージには、デフォルトで /etc/mysql/my.cnf
ファイルが用意されています。このファイルを編集することで、SQLモードを含む様々な設定を変更できます。
以下の例では、my.cnf
ファイルに sql_mode
オプションを追加し、STRICT_TRANS_TABLES
と NO_ZERO_IN_DATE
モードを有効にしています。
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
注意事項
- SQLモードを変更する前に、変更の影響を理解していることを確認してください。
- 互換性の問題が発生する可能性があるため、デフォルトのSQLモードを変更する場合は注意が必要です。
補足
- 上記の例では、MariaDB 10.5を使用しています。他のバージョンを使用している場合は、
my.cnf
ファイルの場所やオプションの構文が異なる場合があります。 - 詳細については、MariaDBドキュメントを参照してください。
改善点
- 日本語で分かりやすく解説するように努めました。
- 冗長な表現を削除し、簡潔な文章に修正しました。
- 誤字脱字を修正しました。
- 情報の正確性を向上させました。
version: "3"
services:
mariadb:
image: mariadb:latest
environment:
- MYSQL_STRICT_MODE=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
volumes:
- ./my.cnf:/etc/mysql/my.cnf
volumes:
my.cnf:
content: |
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
- 上記のコードは、
docker-compose.yml
ファイルの例です。 volumes
セクションを使用して、ホストマシン上のmy.cnf
ファイルをコンテナ内の/etc/mysql/my.cnf
ファイルにマウントしています。
実行方法
- 以下のコマンドを実行して、MariaDBコンテナを起動します。
docker-compose up -d
docker exec -it mariadb mysql -u root -p
- 以下のコマンドを実行して、SQLモードを確認します。
SHOW VARIABLES LIKE 'sql_mode';
出力例
+-------------------------+-----------------------+
| Variable_name | Value |
+-------------------------+-----------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE |
+-------------------------+-----------------------+
- 上記の例では、パスワードを空に設定しています。本番環境では、セキュリティのためにパスワードを設定する必要があります。
SQLモードを変更するその他の方法
mysqldコマンドを実行する際に、--sql-mode
オプションを使用してSQLモードを指定できます。
mysqld --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
mysqlコマンドを使用して、MariaDBシェルに接続した後、SET GLOBAL sql_mode
ステートメントを実行することで、SQLモードを変更できます。
mysql -u root -p
SET GLOBAL sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE;
MariaDB設定ファイル (/etc/mysql/my.cnf
) を編集することで、デフォルトのSQLモードを変更できます。
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
MariaDB GUIツール
MySQL WorkbenchなどのGUIツールを使用して、SQLモードを変更することもできます。
- 上記の方法のいずれを選択するかは、環境や目的に応じて異なります。
docker docker-compose mariadb