【サーバー管理入門 第8回】データは資産。MariaDBの構築と「文字化け」させないプロの設定

Linux

【サーバー管理入門 第8回】データは資産。MariaDBの構築と「文字化け」させないプロの設定

こんにちは!「リナックス先生」です。
前回は、高速Webサーバー「Nginx」を構築し、自作のHTMLページを世界に公開するところまで進みました。
しかし、今のWebサイトは「動き」がありません。ただ文字を表示するだけの「静的」なページです。

コウ君

先生、最近はどんなサイトでも「会員登録」とか「ログイン」がありますよね。
ああいうユーザーIDとかパスワードって、どこに保存されているんですか?
テキストファイルに書いているわけじゃないですよね?

リナックス先生

鋭いわね。大量のデータを効率よく保存し、瞬時に検索して取り出すための専用システム、それが「データベース(DB)」よ。
今回は、Linuxにおけるデータベースの標準「MariaDB」を構築するわ。
ここでの設定ミスは「データ消失」や「情報漏洩」に直結するから、心してかかりなさい!

第8回となる今回は、バックエンドシステムの要、データベースサーバー(MariaDB)の導入です。
インストール自体は簡単ですが、プロはデフォルト設定のまま使いません。「文字化け」を防ぐための設定や、不正アクセスを防ぐセキュリティ設定など、現場で必須のノウハウを詰め込みました。

本講座のカリキュラム

  1. サーバー管理入門:RHEL系OSの選定理由とローカル仮想環境の構築
  2. 初期設定とセキュリティの要:SSH鍵認証、禁止設定、ユーザー管理の鉄則
  3. パッケージ管理の裏側:dnf/rpmの仕組みとリポジトリの依存関係解決
  4. ネットワーク設定の極意:nmcli、IPアドレス設計、DNSリゾルバの設定
  5. ストレージ管理とファイルシステム:LVMの概念、ディスク拡張、fstabの罠
  6. プロセスとサービス管理:systemd (systemctl) の仕組みとUnit定義ファイルの作成
  7. Webサーバー構築(Nginx):ハイパフォーマンスWebサーバーの導入と設定最適化
  8. 【今回】データベース構築(MariaDB):インストール、初期セキュリティ、バックアップの基礎
  9. ログ管理とトラブルシュート:rsyslog、journalctl、ログローテートの設計
  10. 自動化の第一歩:Cronによる定期実行と管理用シェルスクリプトの作成
  11. バックアップと障害復旧:tar/rsyncによるデータ保全とリカバリ手順
  12. 監視と運用設計:サーバーのリソース監視、死活監視、そしてプロの運用論

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)

デフォルトの文字コードは latin1utf8 (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

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント