【サーバー管理入門 第8回】データは資産。MariaDBの構築と「文字化け」させないプロの設定
こんにちは!「リナックス先生」です。
前回は、高速Webサーバー「Nginx」を構築し、自作のHTMLページを世界に公開するところまで進みました。
しかし、今のWebサイトは「動き」がありません。ただ文字を表示するだけの「静的」なページです。
先生、最近はどんなサイトでも「会員登録」とか「ログイン」がありますよね。
ああいうユーザーIDとかパスワードって、どこに保存されているんですか?
テキストファイルに書いているわけじゃないですよね?
鋭いわね。大量のデータを効率よく保存し、瞬時に検索して取り出すための専用システム、それが「データベース(DB)」よ。
今回は、Linuxにおけるデータベースの標準「MariaDB」を構築するわ。
ここでの設定ミスは「データ消失」や「情報漏洩」に直結するから、心してかかりなさい!
第8回となる今回は、バックエンドシステムの要、データベースサーバー(MariaDB)の導入です。
インストール自体は簡単ですが、プロはデフォルト設定のまま使いません。「文字化け」を防ぐための設定や、不正アクセスを防ぐセキュリティ設定など、現場で必須のノウハウを詰め込みました。
本講座のカリキュラム
- サーバー管理入門:RHEL系OSの選定理由とローカル仮想環境の構築
- 初期設定とセキュリティの要:SSH鍵認証、禁止設定、ユーザー管理の鉄則
- パッケージ管理の裏側:dnf/rpmの仕組みとリポジトリの依存関係解決
- ネットワーク設定の極意:nmcli、IPアドレス設計、DNSリゾルバの設定
- ストレージ管理とファイルシステム:LVMの概念、ディスク拡張、fstabの罠
- プロセスとサービス管理:systemd (systemctl) の仕組みとUnit定義ファイルの作成
- Webサーバー構築(Nginx):ハイパフォーマンスWebサーバーの導入と設定最適化
- 【今回】データベース構築(MariaDB):インストール、初期セキュリティ、バックアップの基礎
- ログ管理とトラブルシュート:rsyslog、journalctl、ログローテートの設計
- 自動化の第一歩:Cronによる定期実行と管理用シェルスクリプトの作成
- バックアップと障害復旧:tar/rsyncによるデータ保全とリカバリ手順
- 監視と運用設計:サーバーのリソース監視、死活監視、そしてプロの運用論
1. MySQLとMariaDBの関係
「データベースといえばMySQLじゃないの?」と思った方もいるでしょう。
実は、RHEL 9 / AlmaLinux 9 では、MySQLではなく「MariaDB」が標準のリポジトリで提供されています。
なぜMariaDBなのか?
- 出自: MySQLがOracle社に買収された際、MySQLの生みの親が「オープンソースの精神を守る」ためにフォーク(派生)させて作ったのがMariaDBです。
- 互換性: MySQLと高い互換性を持ち、コマンドも
mysqlのまま使えます。WordPressなどの主要CMSも公式に対応しています。 - 性能: 一部の処理においては本家MySQLよりも高速に動作するように改良されています。
本講座では、OS標準で最も安定して動作する MariaDB 10.5(AlmaLinux 9のデフォルト)を採用します。
2. インストールと文字コード設定 (utf8mb4)
プロの現場では、インストール直後に必ずやるべき設定があります。
それが「文字コードの指定」です。
Step 1: インストール
[root@server01 ~]# dnf install mariadb-server -y
Step 2: 設定ファイルの編集 (my.cnf)
デフォルトの文字コードは latin1 や utf8 (3バイト) になっていることがあります。
しかし、昨今のWebサイトでは絵文字(🍣など)を使うのが当たり前です。
絵文字を扱うには4バイトの utf8mb4 が必須です。これを設定し忘れると、後からデータベースを作り直す羽目になります。
/etc/my.cnf.d/mariadb-server.cnf を作成・編集します。
[root@server01 ~]# vi /etc/my.cnf.d/char-set.cnf
※ ファイル名はわかりやすければ何でも構いません。
記述内容:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci [client] default-character-set = utf8mb4
Step 3: 起動と自動起動
[root@server01 ~]# systemctl enable --now mariadb [root@server01 ~]# systemctl status mariadb
Active: active (running) になっていればOKです。
3. 初期セキュリティ設定 (mysql_secure_installation)
インストール直後のMariaDBは、パスワードなしでログインできたり、テスト用データベースが残っていたりと、セキュリティ的に「全裸」の状態です。
これを解消するための対話式スクリプトが用意されています。
[root@server01 ~]# mysql_secure_installation
いくつかの質問が表示されます。以下のように答えてください。
| 質問内容(要約) | 回答 | 解説 |
|---|---|---|
| Enter current password for root | Enterキー | 初期状態はパスワードが無いので、何も打たずにEnter。 |
| Switch to unix_socket authentication? | n | 認証方式の変更。今回は「No」でOK。 |
| Change the root password? | Y | ここで強力なDB用rootパスワードを設定します。 |
| Remove anonymous users? | Y | 「名無しの権兵衛」ユーザーを削除します。必須。 |
| Disallow root login remotely? | Y | 外部からrootでログインできないようにします。必須。 |
| Remove test database? | Y | 誰でも触れる「test」DBを削除します。 |
| Reload privilege tables now? | Y | 設定を即時反映させます。 |
これで最低限のセキュリティが確保されました。
4. 実践:データベースとユーザーの作成
ここからはSQLコマンドを使って、実際にデータを保存する箱を作っていきます。
まずはMariaDBのコンソールにログインしましょう。
[root@server01 ~]# mysql -u root -p Enter password: (先ほど設定したパスワード)
プロンプトが MariaDB [(none)]> に変わればログイン成功です。
Webアプリ用のDBとユーザーを作る
普段のWebアプリ(WordPressなど)から接続する際に、なんでもできる root ユーザーを使うのは危険すぎます。
「そのデータベースしか触れない専用ユーザー」を作るのが鉄則です。
例として、Webサイト用のデータベース webapp_db と、それを管理するユーザー webuser を作成します。
-- 1. データベースの作成 MariaDB [(none)]> CREATE DATABASE webapp_db CHARACTER SET utf8mb4; -- 2. ユーザーの作成(パスワードは 'password123' とする) MariaDB [(none)]> CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'password123'; -- 3. 権限の付与(webapp_db に対してのみ全権限を与える) MariaDB [(none)]> GRANT ALL PRIVILEGES ON webapp_db.* TO 'webuser'@'localhost'; -- 4. 設定の反映 MariaDB [(none)]> FLUSH PRIVILEGES; -- 5. ログアウト MariaDB [(none)]> exit
接続テスト
作成したユーザーでログインできるか試してみましょう。
[root@server01 ~]# mysql -u webuser -p Enter password: password123 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | webapp_db | +--------------------+
mysql (システム管理用DB) などが見えず、自分用の webapp_db だけが見えていれば権限設定は完璧です。
5. 転ばぬ先の杖:バックアップ (mysqldump)
データベースはファイルのコピーだけでは綺麗にバックアップできません(書き込み中にコピーすると壊れるため)。mysqldump というコマンドを使って、データベースの中身をテキスト形式(SQL文)として書き出します。
バックアップの実行
# webapp_db の中身を backup.sql に書き出す [root@server01 ~]# mysqldump -u root -p webapp_db > /root/backup.sql
リストア(復元)の実行
データを間違って消してしまった場合、書き出したSQLを流し込めば元通りになります。
# backup.sql の内容を webapp_db に流し込む [root@server01 ~]# mysql -u root -p webapp_db < /root/backup.sql
💡 プロの運用テクニック
毎回手動でコマンドを打つのは大変です。
このコマンドをシェルスクリプトに書いて、Cron(自動実行機能)に登録し、「毎晩3時に自動バックアップ」されるように仕込むのがインフラエンジニアの仕事です。
これについては、第10回の「自動化」で詳しく解説します。
6. トラブルシューティング:起動しない時は?
systemctl start mariadb でエラーが出る場合、原因の9割はログに書かれています。
[root@server01 ~]# less /var/log/mariadb/mariadb.log
よくある原因:
- 設定ファイルのミス:
my.cnfのスペルミス(utf8mb4 を utf-8mb4 と書いているなど)。 - 権限の問題: データディレクトリ
/var/lib/mysqlの所有者がmysqlユーザー以外になっている。 - ディスク容量不足: LVMの回で学びましたが、ディスクが一杯だとDBは起動しません。
次回予告:ログ管理の極意
今回は、MariaDBの構築と、データを守るための初期設定について学びました。
これで「Webサーバー」と「データベースサーバー」が揃い、本格的なWebアプリケーションを動かす基盤が整いました。
しかし、サーバーは生き物です。いつどこでエラーを吐いているかわかりません。
次回は、サーバーの健康状態を知るための聴診器、「ログ管理(rsyslog / journalctl)」について解説します。
「ログが多すぎてディスクがパンクした!」という事故を防ぐ「ログローテート」の設定も必見です。お楽しみに!
データベースを操作できるようになると、WordPressのようなCMSも自分でセットアップできるようになるわ。
でも、DBサーバーは負荷が高いから、マシンスペックには注意が必要よ。
本格的にWebサービスを公開したり、大量のデータを扱うデータベースを運用するなら、信頼性の高いVPS(仮想専用サーバー)が必須です。
私も愛用している、SSD搭載でディスクアクセスが高速な推奨VPSを以下にまとめておきました。
DBサーバーとしてのパフォーマンスも抜群です。
▼スクリプトの実験場に最適!推奨VPS



コメント