こんにちは。よっしーです(^^)
今日は、slimの開発環境にMariaDBを導入する方法についてご紹介します。
前提
この記事は下記の記事をベースにしています。
背景
slimのローカル開発環境にDockerを利用して、MariaDBを導入しましたので、その手順をご紹介します。
修正内容
下記のファイルを修正、作成します。下記の各セクションにファイルの内容が記載しています。
modified: Makefile
modified: app/compose.yml
new file: app/.env
new file: app/mariadb/Dockerfile
new file: app/mariadb/initdb.d/v0.0.1_create_db_sample.sql
new file: app/mariadb/initdb.d/v0.0.2_create_user.sql
Makefile
41行目に追記します。
+# MariaDBにログイン
+.PHONY: loginMariadb
+loginMariadb:
+ cd $(WOKR_DIR) \
+ && docker compose exec mariadb bash
app/compose.yml
38行目に追記します。
+ mariadb:
+ build: ./mariadb
+ container_name: mariadb
+ restart: unless-stopped
+ volumes:
+ - "./mariadb/initdb.d:/docker-entrypoint-initdb.d"
+ environment:
+ - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
+ ports:
+ - 3306:3306
+ networks:
+ - net
app/.env
下記の内容で新規作成します。
MARIADB_ROOT_PASSWORD=P@ssw0rd
app/mariadb/Dockerfile
下記の内容で新規作成します。
FROM mariadb:11.0.2
app/mariadb/initdb.d/v0.0.1_create_db_sample.sql
下記の内容で新規作成します。
CREATE DATABASE IF NOT EXISTS sample;
app/mariadb/initdb.d/v0.0.2_create_user.sql
下記の内容で新規作成します。
CREATE USER 'app_user'@'%' identified by 'P@ssw0rd';
GRANT ALL ON sample.* TO 'app_user'@'%' ;
動作確認
下記のコマンドを実行します。
make up
下記のコマンドを実行します。
make loginMariadb
下記のコマンドを実行します。
mariadb -uapp_user -p -Dsample
パスワードを入力して、下記の出力になれば成功です。
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.0.2-MariaDB-1:11.0.2+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [sample]>
解説
MariaDBについて
MariaDBは、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。MySQLの派生版であり、MySQLの開発者であったMichael Widenius氏によって作成されました。MariaDBは、高いパフォーマンス、拡張性、信頼性を提供することを目指しています。
以下に、MariaDBの特徴と利点をいくつか挙げます:
- オープンソース: MariaDBはオープンソースソフトウェアであり、誰でも自由に使用、変更、配布することができます。また、多くの開発者やコミュニティが積極的に開発に参加しており、セキュリティの強化や新機能の追加が継続的に行われています。
- 高いパフォーマンス: MariaDBは、高速なデータ処理を実現するための最適化が施されています。インデックスやキャッシュの最適化、マルチスレッド処理などの機能により、大量のデータに対して高速なクエリの実行が可能です。
- 拡張性と互換性: MariaDBはMySQLと高い互換性を持っており、既存のMySQLのデータベースやアプリケーションを比較的容易に移行することができます。また、分散データベースやクラスタリングの機能も提供しており、大規模なデータ処理や高可用性の要件にも対応しています。
- セキュリティ: MariaDBはセキュリティを重視しており、データベースの保護に関する様々な機能を提供しています。SSL/TLSによる暗号化通信のサポートや、アクセス制御、ユーザー認証、データベース監査などの機能により、データの機密性と完全性を確保することができます。
- 活発なコミュニティ: MariaDBは、大きな開発者コミュニティとサポートコミュニティが存在しています。コミュニティによって、バグの修正や新機能の開発、ドキュメントの提供などが行われています。問題が発生した場合、公式フォーラムやメーリングリストなどでサポートを受けることができます。
MariaDBは、ウェブアプリケーションやビジネスアプリケーションなど、さまざまな用途で広く使用されています。多くのLinuxディストリビューションやクラウドプロバイダーでもMariaDBがデフォルトのリレーショナルデータベースとして採用されていることもあります。
もちろん、データベースの選択には状況や要件に応じて考慮すべき要素がありますので、具体的な使用ケースに合わせて検討することが重要です。
app/compose.yml
このコードは、Dockerコンテナ内でMariaDBをビルドして実行するための設定を示しています。
mariadb
は、このコンテナの名前です。build: ./mariadb
は、Dockerfileを使用してMariaDBのイメージをビルドするためのディレクトリを指定しています。このディレクトリには、MariaDBの設定や初期データなどが含まれています。container_name: mariadb
は、コンテナの名前を指定しています。restart: unless-stopped
は、コンテナが停止した場合に自動的に再起動するように設定しています。volumes
セクションでは、ホストマシンのディレクトリ./mariadb/initdb.d
をコンテナ内の/docker-entrypoint-initdb.d
ディレクトリにマウントしています。これにより、初期データベーススキーマやテーブルの作成スクリプトをコンテナ起動時に自動的に実行することができます。environment
セクションでは、MARIADB_ROOT_PASSWORD
環境変数を定義しています。これは、MariaDBのルートユーザーのパスワードを設定するために使用されます。ports
セクションでは、ホストマシンのポート3306とコンテナのポート3306をマッピングしています。これにより、ホストマシンからMariaDBにアクセスすることができます。networks
セクションでは、コンテナが所属するDockerネットワークを指定しています。ここでは、net
という名前のネットワークにコンテナを接続しています。
この設定を使用すると、docker-compose
などのツールを使用してMariaDBのコンテナを簡単に作成、起動、管理することができます。
app/mariadb/initdb.d/v0.0.2_create_user.sql
このコードは、MariaDBデータベース内に新しいユーザーを作成し、そのユーザーに特定のデータベースとそのデータベース内のすべての権限を付与するSQLコマンドです。
CREATE USER 'app_user'@'%' identified by 'P@ssw0rd';
CREATE USER
は、新しいユーザーを作成するためのコマンドです。'app_user'
は、作成するユーザーの名前です。ここでは”app_user”という名前を使用しています。@'%'
は、どのホストからの接続も許可することを意味します。%
はワイルドカードであり、任意のホストを表します。つまり、どのホストからの接続も許可します。identified by 'P@ssw0rd'
は、ユーザーのパスワードを設定するためのオプションです。ここでは、”P@ssw0rd”というパスワードを使用しています。
GRANT ALL ON sample.* TO 'app_user'@'%';
GRANT
は、ユーザーに権限を付与するためのコマンドです。ALL
は、すべての権限を付与することを意味します。sample.*
は、特定のデータベースとそのすべてのテーブルに対する権限を指定しています。ここでは、”sample”というデータベースのすべてのテーブルに対する権限を付与します。TO 'app_user'@'%'
は、どのユーザーに対して権限を付与するかを指定しています。ここでは、先ほど作成した”app_user”ユーザーに対して権限を付与し、どのホストからの接続も許可します。
このコードの実行により、”app_user”という名前のユーザーが作成され、”P@ssw0rd”というパスワードが設定されます。また、”sample”データベース内のすべてのテーブルに対するすべての権限が”app_user”ユーザーに付与されます。これにより、”app_user”ユーザーは”sample”データベース内のテーブルを作成、読み取り、更新、削除などの操作を実行することができます。
おわりに
今日は、slimの開発環境にMariaDBを導入する方法についてご紹介しました。
本記事でご紹介したソースは、下記のリポジトリにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント