AlmaLinuxにMySQLをインストールする方法|初心者向け完全ガイド

Linux

AlmaLinuxにMySQLをインストールする方法をわかりやすく解説します。

初心者の方でも安心して進められるよう、各ステップを詳しく説明していきます。

スポンサーリンク

AlmaLinuxとMySQLについて

AlmaLinuxとは?

AlmaLinuxは、Red Hat Enterprise Linux(RHEL)と完全互換性を持つ、無料のLinuxディストリビューションです。

AlmaLinuxの特徴

  • Red Hat Enterprise Linuxと100%互換
  • 企業向けの安定性と信頼性
  • 長期サポート(10年間)
  • CentOSの後継として注目
  • 無料で商用利用可能

対応バージョン

  • AlmaLinux 8(2029年までサポート)
  • AlmaLinux 9(2032年までサポート)

なぜMySQLを選ぶのか?

MySQLのメリット

  • 世界で最も使われているオープンソースデータベース
  • 高速で安定した動作
  • 豊富な機能と拡張性
  • 多くのプログラミング言語に対応
  • 無料で使用可能

使用場面の例

  • ウェブアプリケーションのデータ保存
  • 企業の業務システム
  • eコマースサイトの商品管理
  • ブログやCMSのデータベース

事前準備と確認事項

システム要件の確認

必要な環境

  • AlmaLinux 8 または 9 が動作しているサーバー
  • 最低2GBのメモリ(推奨4GB以上)
  • 最低10GBの空きディスク容量
  • インターネット接続

権限の確認

  • rootユーザーまたはsudo権限を持つユーザー
  • システムパッケージのインストール権限

システム情報の確認

現在のシステム情報を確認

# OSバージョンの確認
cat /etc/almalinux-release

# システム情報の詳細確認
hostnamectl

# 利用可能メモリの確認
free -h

# ディスク容量の確認
df -h

実行結果の例

$ cat /etc/almalinux-release
AlmaLinux release 9.3 (Shamrock Pampas Cat)

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       500Mi       2.8Gi        16Mi       500Mi       3.1Gi

ファイアウォールの確認

現在のファイアウォール状態を確認

# ファイアウォールの状態確認
sudo firewall-cmd --state

# 開いているポートの確認
sudo firewall-cmd --list-all

システムの更新

パッケージリストの更新

まず最初に、システムを最新の状態に更新します。

# パッケージリストの更新
sudo dnf update

# 更新内容の確認
sudo dnf check-update

更新の重要性

  • セキュリティパッチの適用
  • 最新の機能とバグ修正
  • 依存関係の問題を回避
  • システムの安定性向上

実行中の表示例

$ sudo dnf update
AlmaLinux 9 - BaseOS                     1.2 MB/s | 2.0 MB     00:01
AlmaLinux 9 - AppStream                  4.5 MB/s | 7.1 MB     00:01
AlmaLinux 9 - Extras                     12 kB/s |  17 kB     00:01
Dependencies resolved.
...
Complete!

システム再起動の判断

再起動が必要かどうかの確認

# カーネル更新の確認
sudo dnf history | head -n 10

# 再起動が必要な場合の確認
sudo needs-restarting -r

再起動の実行

# システムの再起動
sudo reboot

# 再起動後の確認
uptime

MySQLのインストール方法

方法1:標準リポジトリからのインストール

最も簡単で推奨される方法

# MySQL クライアントとサーバーのインストール
sudo dnf install mysql mysql-server

インストールされるパッケージ

  • mysql:MySQLクライアント
  • mysql-server:MySQLサーバー
  • 関連する依存パッケージ

インストール過程の例

$ sudo dnf install mysql mysql-server
...
Installing:
 mysql-server    x86_64    8.0.36-1.el9    appstream    16 M
 mysql           x86_64    8.0.36-1.el9    appstream     3.0 M
Installing dependencies:
 mysql-common    x86_64    8.0.36-1.el9    appstream    134 k
 mysql-errmsg    x86_64    8.0.36-1.el9    appstream    511 k
...
Total download size: 20 M
Installed size: 91 M
Is this ok [y/N]: y

方法2:特定バージョンの指定インストール

利用可能なMySQLモジュールの確認

# 利用可能なMySQLモジュールを表示
sudo dnf module list mysql

# 特定バージョンの有効化
sudo dnf module enable mysql:8.0

# MySQLサーバーのインストール
sudo dnf install mysql-server

モジュール一覧の表示例

$ sudo dnf module list mysql
AlmaLinux 9 - AppStream
Name    Stream    Profiles                Summary
mysql   8.0 [d]   client, server [d]      MySQL Module

方法3:Oracle公式リポジトリからのインストール

最新版のMySQLが必要な場合

# Oracle公式のMySQLリポジトリを追加
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

# リポジトリの確認
sudo dnf repolist | grep mysql

# MySQLサーバーのインストール
sudo dnf install mysql-community-server

Oracle公式リポジトリのメリット

  • 最新バージョンの提供
  • より頻繁なアップデート
  • 公式サポートの充実

MySQLサービスの設定と起動

サービスの起動設定

MySQLサービスの有効化と起動

# サービスの有効化(OS起動時の自動起動)
sudo systemctl enable mysqld

# サービスの起動
sudo systemctl start mysqld

# 上記2つを同時に実行
sudo systemctl enable --now mysqld

サービス状態の確認

# MySQLサービスの状態確認
sudo systemctl status mysqld

# より詳細な情報
sudo systemctl show mysqld

正常起動時の表示例

$ sudo systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
   Active: active (running) since Mon 2024-01-15 10:00:00 JST; 5min ago
   Process: 1234 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
   Process: 1235 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
   Main PID: 1250 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─1250 /usr/libexec/mysqld --basedir=/usr

プロセスとポートの確認

MySQLプロセスの確認

# MySQLプロセスの確認
ps aux | grep mysqld

# リスニングポートの確認
sudo ss -tlnp | grep 3306

# ネットワーク接続の確認
sudo netstat -tlnp | grep mysql

実行結果の例

$ sudo ss -tlnp | grep 3306
LISTEN 0      151          0.0.0.0:3306      0.0.0.0:*    users:(("mysqld",pid=1250,fd=25))

セキュリティ初期設定

mysql_secure_installationの実行

MySQLのセキュリティを強化するため、初期設定スクリプトを実行します。

sudo mysql_secure_installation

設定項目の詳細解説

1. VALIDATE PASSWORD プラグインの設定

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

推奨回答:y(はい)

  • パスワード強度をチェックする機能
  • セキュリティ向上のため有効化を推奨

2. パスワード強度レベルの選択

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

推奨選択:1(MEDIUM)

  • 一般的な用途では十分なセキュリティレベル
  • 強力すぎずに実用的

3. rootパスワードの設定

Please set the password for root here.

New password: 
Re-enter new password: 

Estimated strength of the password: 80 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No): y

パスワードの要件(MEDIUMレベル)

  • 8文字以上
  • 大文字と小文字を含む
  • 数字を含む
  • 特殊文字を含む

4. 匿名ユーザーの削除

Remove anonymous users? (Press y|Y for Yes, any other key for No): y
Success.

推奨回答:y(削除する)

  • セキュリティリスクを排除
  • 不正アクセスを防止

5. リモートrootログインの禁止

Disallow root login remotely? (Press y|Y for Yes, any other key for No): y
Success.

推奨回答:y(禁止する)

  • ローカルからのみroot接続を許可
  • セキュリティ向上

6. testデータベースの削除

Remove test database and access to it? (Press y|Y for Yes, any other key for No): y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.

推奨回答:y(削除する)

  • 不要なテストデータベースを削除
  • セキュリティリスクの排除

7. 権限テーブルの再読み込み

Reload privilege tables now? (Press y|Y for Yes, any other key for No): y
Success.

All done!

推奨回答:y(再読み込みする)

  • 設定変更を即座に反映
  • 必須の手順

インストール確認とテスト

バージョンとサービス状態の確認

MySQLのバージョン確認

# MySQLクライアントのバージョン確認
mysql --version

# MySQLサーバーのバージョン確認
mysqladmin --version

# MySQLサーバーの状態確認
mysqladmin -u root -p status

実行結果の例

$ mysql --version
mysql  Ver 8.0.36 for Linux on x86_64 (Source distribution)

$ mysqladmin -u root -p status
Enter password: 
Uptime: 3600  Threads: 2  Questions: 8  Slow queries: 0  Opens: 119  Flush tables: 3  Open tables: 38  Queries per second avg: 0.002

データベースへの接続テスト

MySQLサーバーへの接続

# rootユーザーでログイン
mysql -u root -p

# ログイン後の基本確認
SHOW DATABASES;
SELECT VERSION();
SELECT CURRENT_USER();

ログイン成功時の表示

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.36 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

ファイアウォールの設定

MySQLポートの開放

外部からの接続を許可する場合

# MySQLポート(3306)の開放
sudo firewall-cmd --permanent --add-service=mysql

# または、ポート番号で直接指定
sudo firewall-cmd --permanent --add-port=3306/tcp

# 設定の再読み込み
sudo firewall-cmd --reload

# 設定の確認
sudo firewall-cmd --list-all

特定のIPアドレスからのみ接続を許可

# 特定のIPアドレスからのみ接続許可
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'

# 設定の再読み込み
sudo firewall-cmd --reload

SELinuxの設定

SELinuxが有効な場合の設定

# SELinuxの状態確認
sestatus

# MySQLのSELinuxポリシー確認
sudo getsebool -a | grep mysql

# 必要に応じてポリシーの変更
sudo setsebool -P mysql_connect_any 1

データベースとユーザーの作成

新規データベースの作成

基本的なデータベース作成

-- MySQLにrootでログイン後、以下を実行

-- 新しいデータベースの作成
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- データベース一覧の確認
SHOW DATABASES;

-- データベースの詳細確認
SHOW CREATE DATABASE myapp_db;

新規ユーザーの作成と権限設定

セキュリティを考慮したユーザー作成

-- 新しいユーザーの作成(ローカル接続のみ)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password_123!';

-- 特定データベースへの権限付与
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';

-- 読み取り専用ユーザーの作成
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'readonly_pass_456!';
GRANT SELECT ON myapp_db.* TO 'readonly_user'@'localhost';

-- 権限の反映
FLUSH PRIVILEGES;

-- ユーザー一覧の確認
SELECT User, Host FROM mysql.user;

-- 権限の確認
SHOW GRANTS FOR 'myapp_user'@'localhost';

リモート接続用ユーザーの作成

外部からの接続が必要な場合

-- リモート接続可能なユーザーの作成
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'very_strong_password_789!';

-- 特定のIPアドレスからのみ接続可能なユーザー
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'app_password_abc!';

-- 権限の付与
GRANT ALL PRIVILEGES ON myapp_db.* TO 'remote_user'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'app_user'@'192.168.1.100';

-- 権限の反映
FLUSH PRIVILEGES;

MySQLの設定ファイル

設定ファイルの場所と編集

主要な設定ファイル

# メイン設定ファイル
/etc/my.cnf

# 追加設定ディレクトリ
/etc/my.cnf.d/

# 設定ファイルの編集
sudo nano /etc/my.cnf.d/mysql-server.cnf

基本的な設定例

[mysqld]
# 基本設定
bind-address = 0.0.0.0
port = 3306

# 文字コード設定
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# ログ設定
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# パフォーマンス設定
max_connections = 100
innodb_buffer_pool_size = 1G
query_cache_size = 64M

[mysql]
default-character-set = utf8mb4

設定反映のための再起動

# 設定ファイル変更後の再起動
sudo systemctl restart mysqld

# 設定の確認
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';"

ログの確認とトラブルシューティング

ログファイルの確認

MySQLのログファイル

# エラーログの確認
sudo tail -f /var/log/mysql/error.log

# スロークエリログの確認
sudo tail -f /var/log/mysql/slow.log

# 一般ログの有効化と確認
mysql -u root -p -e "SET GLOBAL general_log = 'ON';"
sudo tail -f /var/log/mysql/general.log

よくある問題と対処法

問題1:MySQLサービスが起動しない

# 詳細なエラー情報を確認
sudo journalctl -u mysqld.service -f

# エラーログを確認
sudo tail -n 50 /var/log/mysql/error.log

# 設定ファイルの構文チェック
sudo mysqld --help --verbose

問題2:接続が拒否される

# ポートの確認
sudo ss -tlnp | grep 3306

# ファイアウォールの確認
sudo firewall-cmd --list-all

# MySQLユーザーの確認
mysql -u root -p -e "SELECT User, Host FROM mysql.user;"

問題3:パスワードを忘れた場合

# MySQLを安全モードで起動
sudo systemctl stop mysqld
sudo mysqld_safe --skip-grant-tables &

# パスワードなしでログイン
mysql -u root

# パスワードの変更
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
EXIT;

# 通常モードで再起動
sudo systemctl restart mysqld

バックアップとメンテナンス

データベースのバックアップ

mysqldumpを使用したバックアップ

# 単一データベースのバックアップ
mysqldump -u root -p myapp_db > myapp_db_backup.sql

# 全データベースのバックアップ
mysqldump -u root -p --all-databases > all_databases_backup.sql

# 圧縮してバックアップ
mysqldump -u root -p myapp_db | gzip > myapp_db_backup.sql.gz

# 自動バックアップスクリプトの例
cat > /usr/local/bin/mysql_backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mysql"
mkdir -p $BACKUP_DIR

mysqldump -u root -p'your_password' --all-databases > $BACKUP_DIR/backup_$DATE.sql
gzip $BACKUP_DIR/backup_$DATE.sql

# 7日以上古いバックアップを削除
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete
EOF

chmod +x /usr/local/bin/mysql_backup.sh

復元方法

バックアップからの復元

# データベースの復元
mysql -u root -p myapp_db < myapp_db_backup.sql

# 圧縮ファイルからの復元
gunzip < myapp_db_backup.sql.gz | mysql -u root -p myapp_db

# 全データベースの復元
mysql -u root -p < all_databases_backup.sql

パフォーマンス最適化

基本的なチューニング

メモリ設定の最適化

# システムメモリの確認
free -h

# MySQLのメモリ使用量確認
mysql -u root -p -e "SHOW VARIABLES LIKE '%buffer%';"

設定ファイルでの最適化

[mysqld]
# システムメモリの70-80%を設定
innodb_buffer_pool_size = 3G

# 接続数の調整
max_connections = 200

# クエリキャッシュ
query_cache_type = 1
query_cache_size = 128M

# ログファイルサイズ
innodb_log_file_size = 512M

# 一時テーブル
tmp_table_size = 256M
max_heap_table_size = 256M

モニタリングとメンテナンス

パフォーマンス監視

-- 実行中のプロセス確認
SHOW PROCESSLIST;

-- ステータス変数の確認
SHOW STATUS LIKE 'Threads_%';
SHOW STATUS LIKE 'Questions';
SHOW STATUS LIKE 'Uptime';

-- パフォーマンススキーマの活用
SELECT * FROM performance_schema.events_statements_summary_by_digest 
ORDER BY sum_timer_wait DESC LIMIT 10;

定期メンテナンス

# テーブルの最適化
mysql -u root -p -e "OPTIMIZE TABLE myapp_db.table_name;"

# データベースの修復
mysql -u root -p -e "REPAIR TABLE myapp_db.table_name;"

# インデックスの再構築
mysql -u root -p -e "ALTER TABLE myapp_db.table_name ENGINE=InnoDB;"

まとめ

AlmaLinuxでのMySQLインストールは、以下の手順で安全かつ確実に行えます。

手順コマンド例重要度注意点
システム更新sudo dnf update★★★セキュリティ向上のため必須
MySQLインストールsudo dnf install mysql mysql-server★★★標準リポジトリ推奨
サービス起動sudo systemctl enable --now mysqld★★★自動起動設定も同時実行
セキュリティ設定sudo mysql_secure_installation★★★全ての項目でyを選択推奨
ファイアウォール設定sudo firewall-cmd --add-service=mysql★★☆外部接続時のみ必要
ユーザー作成CREATE USER ... GRANT ...★★☆最小権限の原則に従う

成功のポイント

  1. 段階的な進行:各ステップを確実に完了してから次へ
  2. セキュリティ重視:初期設定でセキュリティを強化
  3. ログの確認:問題発生時は必ずログを確認
  4. バックアップ計画:運用開始前にバックアップ体制を構築
  5. 定期メンテナンス:パフォーマンス維持のため定期的な保守

コメント

タイトルとURLをコピーしました