🚀
【データベーススペシャリスト試験対策】MySQL+PHPMyAdmin環境をMacbookで手軽に構築する手順
MySQL+PHPMyAdmin環境をMacbookでで手軽に構築する手順
データベーススペシャリスト試験対策に
MacBook(Apple Silicon)でMySQLとphpMyAdminのコンテナ環境を構築するためのコードを準備してみました。
Docker Composeを使った構成で、ARM64アーキテクチャに対応しています。
PHPMyAdminとmysqlを脳死で使えるようになるので個人的には便利かも?
石田 先生の
データベーススペシャリスト 完全攻略の教科書+過去問題
のUdemy講座のsampleデータのインポートにも対応できそうな雰囲気です(一応、動作確認済)


詳しくはRepositoryのREADMEに記載済ですが以下の手順で環境をセットアップできます:
クイックスタート手順:
- ディレクトリ作成:
mkdir mysql-phpmyadmin
cd mysql-phpmyadmin
mkdir mysql_config
-
ファイル配置:
-
docker-compose.yml(1つ目のコード) -
mysql_config/my.cnf(2つ目のコード)
-
-
環境起動:
docker-compose up -d
-
アクセス:
- phpMyAdmin: http://localhost:8080
- 認証: root / rootpassword
特徴:
- Apple Silicon対応: ARM64アーキテクチャ指定済み
- 学習用最適化: データベーススペシャリスト試験に適したサンプルSQL付き
- 永続化対応: データはボリュームに保存され、コンテナ再起動後も保持
- 設定カスタマイズ: MySQL設定ファイルで詳細調整可能
提供したサンプルSQLには、試験でよく出題される結合、集約関数、サブクエリ、ウィンドウ関数の練習問題も含まれています。
何かご質問があれば、お気軽にお聞かせください!
前提条件
- Docker Desktop for Mac がインストール済み
- Apple Silicon MacBook対応
ディレクトリ構成
mysql-phpmyadmin/
├── docker-compose.yml
├── mysql_config/
│ └── my.cnf
└── README.md
セットアップ手順
1. ディレクトリとファイルの作成
mkdir mysql-phpmyadmin
cd mysql-phpmyadmin
# mysql_configディレクトリを作成
mkdir mysql_config
# docker-compose.ymlとmy.cnfファイルを作成
# (上記のコードをそれぞれのファイルにコピー)
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
platform: linux/arm64/v8 # M2 Pro対応
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql_config:/etc/mysql/conf.d
networks:
- db_network
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
platform: linux/arm64/v8 # M2 Pro対応
container_name: phpmyadmin
restart: always
environment:
PMA_HOST: mysql
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: rootpassword
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "8080:80"
depends_on:
- mysql
networks:
- db_network
volumes:
mysql_data:
driver: local
networks:
db_network:
driver: bridge
my.cnf
[mysqld]
# 基本設定
default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 接続設定
bind-address = 0.0.0.0
port = 3306
max_connections = 100
# パフォーマンス設定
innodb_buffer_pool_size = 128M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 1
# ログ設定
general_log = 1
general_log_file = /var/lib/mysql/general.log
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2
# セキュリティ設定
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
2. コンテナの起動
# バックグラウンドで起動
docker-compose up -d
# ログを確認
docker-compose logs -f
3. 接続確認
phpMyAdmin(ブラウザ):
- URL: http://localhost:8080
- ユーザー名: root
- パスワード: rootpassword
MySQL(コマンドライン):
# コンテナ内のMySQLに接続
docker exec -it mysql_db mysql -u root -p
# または外部から接続
mysql -h 127.0.0.1 -P 3306 -u root -p
IPAデータベーススペシャリスト試験用サンプルSQL
データベース作成
-- 試験用データベース作成
CREATE DATABASE IF NOT EXISTS db_specialist_practice
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_specialist_practice;
-- 部門テーブル
CREATE TABLE departments (
dept_id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL,
location VARCHAR(50)
);
-- 従業員テーブル
CREATE TABLE employees (
emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(50) NOT NULL,
dept_id INT,
salary DECIMAL(10,2),
hire_date DATE,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
-- プロジェクトテーブル
CREATE TABLE projects (
project_id INT PRIMARY KEY AUTO_INCREMENT,
project_name VARCHAR(100) NOT NULL,
start_date DATE,
end_date DATE,
budget DECIMAL(12,2)
);
-- プロジェクト参加テーブル
CREATE TABLE project_assignments (
assignment_id INT PRIMARY KEY AUTO_INCREMENT,
emp_id INT,
project_id INT,
role VARCHAR(50),
assigned_date DATE,
FOREIGN KEY (emp_id) REFERENCES employees(emp_id),
FOREIGN KEY (project_id) REFERENCES projects(project_id)
);
サンプルデータ投入
-- 部門データ
INSERT INTO departments (dept_name, location) VALUES
('開発部', '東京'),
('営業部', '大阪'),
('人事部', '東京'),
('経理部', '名古屋');
-- 従業員データ
INSERT INTO employees (emp_name, dept_id, salary, hire_date) VALUES
('田中太郎', 1, 500000, '2020-04-01'),
('佐藤花子', 1, 450000, '2021-06-15'),
('鈴木一郎', 2, 400000, '2019-03-10'),
('高橋美咲', 3, 380000, '2022-01-20'),
('山田次郎', 1, 520000, '2018-09-05');
-- プロジェクトデータ
INSERT INTO projects (project_name, start_date, end_date, budget) VALUES
('新システム開発', '2024-01-01', '2024-12-31', 10000000),
('顧客管理システム', '2024-03-01', '2024-09-30', 5000000),
('社内ポータル', '2024-06-01', '2024-11-30', 3000000);
-- プロジェクト参加データ
INSERT INTO project_assignments (emp_id, project_id, role, assigned_date) VALUES
(1, 1, 'プロジェクトマネージャー', '2024-01-01'),
(2, 1, '開発者', '2024-01-15'),
(5, 1, 'アーキテクト', '2024-01-01'),
(1, 2, '開発者', '2024-03-01'),
(2, 3, 'プロジェクトマネージャー', '2024-06-01');
練習用SQL例
-- 集約関数の練習
SELECT dept_name, COUNT(*) as emp_count, AVG(salary) as avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY dept_name
HAVING COUNT(*) >= 2;
-- サブクエリの練習
SELECT emp_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- 結合の練習
SELECT e.emp_name, d.dept_name, p.project_name, pa.role
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
JOIN project_assignments pa ON e.emp_id = pa.emp_id
JOIN projects p ON pa.project_id = p.project_id;
-- ウィンドウ関数の練習
SELECT emp_name, salary,
RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) as salary_rank
FROM employees;
管理コマンド
コンテナの管理
# コンテナの停止
docker-compose stop
# コンテナの再起動
docker-compose restart
# コンテナの完全削除(データも削除)
docker-compose down -v
# ログの確認
docker-compose logs mysql
docker-compose logs phpmyadmin
バックアップとリストア
# データベースのバックアップ
docker exec mysql_db mysqldump -u root -prootpassword --all-databases > backup.sql
# データベースのリストア
docker exec -i mysql_db mysql -u root -prootpassword < backup.sql
設定情報
-
MySQL接続情報:
- ホスト: localhost (または 127.0.0.1)
- ポート: 3306
- ユーザー名: root
- パスワード: rootpassword
-
phpMyAdmin:
- URL: http://localhost:8080
- 同上の認証情報でログイン
-
テスト用データベース:
- データベース名: testdb
- ユーザー名: testuser
- パスワード: testpass
Discussion