SSL証明書・Go言語開発・Linuxサーバー構築・セキュリティ
MySQL は世界で最も普及している RDB(リレーショナルデータベース)の一つです。
PHP との組み合わせ(LAMP 構成)での Web 開発や、各種 CMS(WordPress など)のバックエンドとして広く使われています。
この記事では Ubuntu 24.04 LTS へのインストールから初期セキュリティ設定、アプリケーションからの接続まで解説します。
Ubuntu 24.04 のリポジトリには MySQL 8.0 が含まれています。
sudo apt update sudo apt install -y mysql-server # バージョン確認 mysql --version # mysql Ver 8.0.x Distrib 8.0.x, for Linux (x86_64)
インストール後、MySQL サービスは自動的に起動します。
# サービス状態確認 sudo systemctl status mysql # OS 起動時に自動起動(通常はデフォルトで有効) sudo systemctl enable mysql
インストール直後は root のパスワードが未設定など、安全でない状態です。
mysql_secure_installation コマンドで初期設定を行います。
sudo mysql_secure_installation
対話形式で以下を設定します:
| 質問 | 推奨設定 |
|---|---|
| VALIDATE PASSWORD component を有効にするか | Yes(パスワード強度チェックを有効化) |
| パスワード強度レベル | 1(MEDIUM)以上を推奨 |
| root パスワードを変更するか | Yes(強いパスワードを設定) |
| 匿名ユーザーを削除するか | Yes |
| root のリモートログインを禁止するか | Yes |
| test データベースを削除するか | Yes |
| 権限テーブルをリロードするか | Yes |
Ubuntu 24.04 では、デフォルトで root は auth_socket 認証(OS ユーザーによる認証)を使います。
# sudo 経由でパスワードなしで接続できる sudo mysql # または root パスワードを使う場合 mysql -u root -p
root で MySQL に接続し、アプリケーション用のユーザーとデータベースを作成します。
sudo mysql
-- データベースを作成 CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- アプリ用ユーザーを作成(localhost からのみ接続可) CREATE USER 'appuser'@'localhost' IDENTIFIED BY '強いパスワードをここに'; -- ユーザーにデータベースへの権限を付与 GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; -- 権限を反映 FLUSH PRIVILEGES; -- 確認 SHOW DATABASES; SELECT user, host FROM mysql.user;
utf8mb4 は絵文字を含む完全な Unicode に対応しています。
MySQL の utf8(3バイト)ではなく utf8mb4(4バイト)を使うのが現在のベストプラクティスです。
# appuser でデータベース appdb に接続 mysql -u appuser -p appdb # パスワードを入力して接続できれば成功 # mysql>
-- テーブル作成
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- データ挿入
INSERT INTO users (name, email) VALUES ('山田太郎', 'yamada@example.com');
-- データ取得
SELECT * FROM users;
-- テーブル一覧
SHOW TABLES;
PHP から MySQL に接続する場合は PDO(PDO_MYSQL)を使います。
# PHP MySQL 拡張をインストール sudo apt install -y php-mysql # Apache を使っている場合は再起動 sudo systemctl restart apache2
<?php
// データベース接続設定
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=appdb;charset=utf8mb4';
$user = 'appuser';
$pass = 'パスワード';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
// プリペアドステートメントで SQL インジェクションを防ぐ
$stmt = $pdo->prepare('SELECT name, email FROM users WHERE id = :id');
$stmt->execute([':id' => 1]);
$row = $stmt->fetch();
if ($row) {
echo htmlspecialchars($row['name']) . ' / ' . htmlspecialchars($row['email']);
}
} catch (PDOException $e) {
// エラーメッセージを画面に出力しないこと(ログに記録する)
error_log($e->getMessage());
http_response_code(500);
exit('Internal Server Error');
}
パスワードは設定ファイルや環境変数で管理し、ソースコードに直接書かないようにしてください。
go get github.com/go-sql-driver/mysql
package main
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// DSN 形式: user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=true
dsn := os.Getenv("DATABASE_URL")
// 例: appuser:password@tcp(127.0.0.1:3306)/appdb?charset=utf8mb4&parseTime=true
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal("DB接続設定エラー:", err)
}
defer db.Close()
if err = db.Ping(); err != nil {
log.Fatal("DB接続失敗:", err)
}
var name string
err = db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name)
if err != nil {
log.Fatal("クエリ失敗:", err)
}
fmt.Println("名前:", name)
}
/etc/mysql/mysql.conf.d/mysqld.cnf |
メイン設定ファイル |
/var/lib/mysql/ |
データディレクトリ |
/var/log/mysql/error.log |
エラーログ |
# サービス操作 sudo systemctl start|stop|restart|status mysql # バックアップ(mysqldump) mysqldump -u appuser -p appdb > appdb_backup.sql # リストア mysql -u appuser -p appdb < appdb_backup.sql
PHP + Apache 設定(Ubuntu 24.04) — PHP インストール、Apache mod_php、PDO MySQL 接続
Apache インストール(Ubuntu 24.04) — apt によるインストール、SSL 有効化、バーチャルホスト設定
PostgreSQL インストール・初期設定(Ubuntu 24.04)
MySQL でデータを管理する Web アプリケーションには、通信経路の暗号化として SSL証明書(HTTPS)が不可欠です。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
2009年から16年以上、RapidSSL(ラピッドSSL) 4,356円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。
審査サポート・インストール代行あり。平日 9:00〜18:00 のメールサポート付きです。
SSL証明書の購入はこちら / 購入から発行までの流れ / インストール代行サービス