MySQLとMariaDB:インストールと最初のデータベース
VDSへのデータベースサーバーのインストール、安全な初期設定、データベースとユーザーの作成、接続確認、よくある初期エラーを説明します。
更新日 2026年8月23日
MySQLとその互換ブランチであるMariaDBは、ほとんどのPHPサイトが動作する基盤です。コマンドとクライアントは同じで、違いは細かなチューニングから始まります。
インストール
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
OracleのMySQLがどうしても必要な場合は、公式リポジトリからmysql-serverをインストールしてください。サービス名はmysqlになります。
基本的な穴はすぐに塞いでおきましょう。
mariadb-secure-installation
スクリプトはrootパスワードの設定、匿名ユーザーの削除、リモートからのrootログインの禁止、テストデータベースの削除を尋ねてきます。すべて「yes」と答えてください。
データベースとユーザー
アプリケーションをrootで実行しないでください。プロジェクトごとに専用のユーザーを作成します。
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
utf8mb4エンコーディングは必須です。MySQLの古いutf8は1文字あたり3バイトしか保存できず、絵文字や一部の文字で壊れてしまいます。
確認:
mariadb -u shop -p shop -e "SELECT 1;"
権限の詳細については、ユーザーと権限を参照してください。
初期設定
設定は/etc/mysql/mariadb.conf.d/50-server.cnfまたは/etc/my.cnf.d/にあります。すぐに修正すべき最低限の項目は次のとおりです。
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1はデータベースをローカルからのみアクセス可能にします。アプリケーションが同じマシン上にあるなら、この設定が正解です。外部からデータベースにアクセスする必要がある場合は、変更する前にリモートアクセスをお読みください。
バッファプールのサイズはティアごとに選択します。メモリチューニングを参照してください。
編集後はsystemctl restart mariadbを実行します。
よくあるエラー
| 症状 | 原因 | 対処 |
|---|---|---|
Access denied for user | パスワードが間違っている、またはユーザーエントリが別のホストに紐づいている | SELECT user, host FROM mysql.user;を確認する |
Can't connect through socket | サービスが起動していない | systemctl status mariadb、journalctl -u mariadbを確認する |
Too many connections | アプリケーションが接続を閉じていない | アプリケーション側でプールを設定し、その後max_connectionsを調整する |
| 文字化け | データベースと接続でエンコーディングが異なる | すべてをutf8mb4に統一する |
| 再起動後にデータベースが起動しない | サービスが自動起動に設定されていない | systemctl enable mariadbを実行する |
マシンの自動バックアップはありません。最初のテーブルが動作した直後にダンプを設定してください。データベースのバックアップを参照してください。NVMeディスクは高速ですが、1台しかありません。