【初心者向け】LinuxでMySQLをインストールする方法|主要ディストリ別手順まとめ

Linux

「LinuxでMySQLを使いたいけど、どうやって入れるの?」「UbuntuとCentOSで手順が違うって本当?」「エラーが出て困っている…」

LinuxでのMySQLインストールは、ディストリビューション(Linux の種類)によって手順が異なります。

でも、基本的な流れを理解すれば、どの環境でも安心してインストールできます。

この記事では、主要なLinuxディストリビューションでMySQLをインストールする方法を、初心者にもわかりやすく、ステップバイステップで解説します。

スポンサーリンク

インストール前の準備

対象読者と前提条件

この記事が対象とする方

  • Linux初心者だが、基本的なターミナル操作ができる
  • MySQL の基本的な知識がある
  • ウェブアプリケーション開発でデータベースが必要
  • 学習目的でMySQLを使いたい

必要な前提条件

  • Linuxマシンへのアクセス権限(root権限またはsudo権限)
  • インターネット接続環境
  • 基本的なコマンドライン操作の理解

システム情報の確認

インストールを始める前に、使用しているLinuxディストリビューションを確認しましょう。

ディストリビューションの確認方法

# 方法1:OSリリース情報の確認
cat /etc/os-release

# 方法2:ディストリビューション情報の確認
lsb_release -a

# 方法3:カーネル情報の確認
uname -a

実行例と結果

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian

システムの更新

安全で確実なインストールのために、システムを最新の状態に更新します。

Ubuntu/Debian系の場合

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

# インストール済みパッケージの更新
sudo apt upgrade -y

# システムの再起動(必要に応じて)
sudo reboot

CentOS/RHEL/AlmaLinux/Rocky Linux系の場合

# パッケージの更新
sudo dnf update -y
# または古いバージョンでは
sudo yum update -y

# システムの再起動(必要に応じて)
sudo reboot

必要なポートの確認

MySQLはデフォルトで3306番ポートを使用します。

ポートの使用状況確認

# 3306番ポートの使用状況をチェック
sudo netstat -tlnp | grep 3306

# 何も表示されなければポートは空いています

Ubuntu/Debian系でのMySQLインストール

パッケージマネージャーを使用したインストール

基本的なインストール手順

# 1. パッケージリストの更新
sudo apt update

# 2. MySQLサーバーのインストール
sudo apt install mysql-server -y

# 3. インストール状況の確認
dpkg -l | grep mysql-server

インストール結果の確認

$ dpkg -l | grep mysql-server
ii  mysql-server-8.0      8.0.35-0ubuntu0.22.04.1    amd64    MySQL database server binaries and system database setup
ii  mysql-server-core-8.0 8.0.35-0ubuntu0.22.04.1    amd64    MySQL database server binaries

MySQLサービスの起動と設定

サービスの起動・有効化

# 1. MySQLサービスの開始
sudo systemctl start mysql

# 2. システム起動時の自動起動を有効化
sudo systemctl enable mysql

# 3. サービス状態の確認
sudo systemctl status mysql

サービス状態の確認結果例

$ sudo systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-01-20 10:30:15 JST; 2min ago
   Main PID: 12345 (mysqld)
     Status: "Server is operational"

初期セキュリティ設定

mysql_secure_installation の実行

sudo mysql_secure_installation

設定項目の詳細説明

このコマンドを実行すると、以下の設定を順番に行えます:

  1. VALIDATE PASSWORD COMPONENT の設定
    Would you like to setup VALIDATE PASSWORD component? (Press y|Y for Yes, any other key for No): y
    • y を選択すると、強力なパスワード要件が設定されます
    • 初心者は y を選択することをおすすめします
  2. パスワード強度レベルの選択
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
    • LOW (0): 8文字以上
    • MEDIUM (1): 8文字以上 + 数字、大小文字、特殊文字
    • STRONG (2): MEDIUMの条件 + 辞書ファイルチェック
  3. rootパスワードの設定
    Please set the password for root here. New password: [強力なパスワードを入力] Re-enter new password: [同じパスワードを再入力]
  4. 匿名ユーザーの削除
    Remove anonymous users? (Press y|Y for Yes, any other key for No): y
    • セキュリティのため y を選択します
  5. rootのリモートログイン禁止
    Disallow root login remotely? (Press y|Y for Yes, any other key for No): y
    • セキュリティのため y を選択します
  6. testデータベースの削除
    Remove test database and access to it? (Press y|Y for Yes, any other key for No): y
    • y を選択して不要なデータベースを削除します
  7. 権限テーブルの再読み込み
    Reload privilege tables now? (Press y|Y for Yes, any other key for No): y
    • 必ず y を選択します

CentOS/RHEL/AlmaLinux/Rocky Linux系でのインストール

標準リポジトリからのインストール

基本的なインストール手順

# 1. 利用可能なMySQLパッケージの確認
sudo dnf search mysql-server

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

# 3. インストール状況の確認
rpm -qa | grep mysql-server

公式リポジトリからのインストール(推奨)

公式MySQLリポジトリの追加

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

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

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

GPGキーのインポート(必要な場合)

# MySQLの公式GPGキーをインポート
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

サービスの起動と設定

MySQLサービスの管理

# 1. MySQLサービスの開始
sudo systemctl start mysqld

# 2. システム起動時の自動起動を有効化
sudo systemctl enable mysqld

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

初期パスワードの確認と変更

CentOS系では、初期インストール時に一時的なrootパスワードが自動生成されます。

一時パスワードの確認

# ログファイルから初期パスワードを確認
sudo grep 'temporary password' /var/log/mysqld.log

実行結果例

2025-01-20T10:30:15.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: aB3#fG8$mK2!

rootパスワードの変更

# MySQLに接続(一時パスワードを使用)
mysql -u root -p

# パスワード変更(MySQL内で実行)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'あなたの強力な新パスワード';
exit;

セキュリティ設定の実行

# 初期セキュリティ設定の実行
sudo mysql_secure_installation

インストール後の確認と基本設定

インストール成功の確認

MySQLバージョンの確認

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

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

実行結果例

$ mysql --version
mysql  Ver 8.0.35 for Linux on x86_64 (MySQL Community Server - GPL)

MySQL への接続テスト

基本的な接続

# rootユーザーでMySQLに接続
mysql -u root -p

# 接続できた場合の表示例
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.35 MySQL Community Server - GPL

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

mysql>

基本的なSQL操作テスト

-- データベース一覧の表示
SHOW DATABASES;

-- 現在の日時を表示
SELECT NOW();

-- 現在のユーザーを表示
SELECT USER();

-- MySQL設定の確認
SHOW VARIABLES LIKE 'version%';

-- 接続終了
exit;

文字セットの設定(日本語対応)

設定ファイルの編集

# MySQLの設定ファイルを編集
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# または
sudo nano /etc/my.cnf

追加する設定内容

[mysqld]
# 文字セット設定
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[mysql]
# クライアント側の文字セット
default-character-set=utf8mb4

[client]
# クライアント接続時の文字セット
default-character-set=utf8mb4

設定変更後の再起動

# MySQLサービスの再起動
sudo systemctl restart mysql  # Ubuntu系
sudo systemctl restart mysqld # CentOS系

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

ファイアウォール設定

Ubuntu/Debian系(ufw)

ファイアウォールの設定

# UFWの状態確認
sudo ufw status

# MySQL用ポート(3306)の開放
sudo ufw allow 3306

# 特定のIPアドレスからのみ接続を許可(より安全)
sudo ufw allow from 192.168.1.100 to any port 3306

# 設定の確認
sudo ufw status numbered

CentOS/RHEL系(firewalld)

ファイアウォールの設定

# firewalldの状態確認
sudo systemctl status firewalld

# MySQL用ポート(3306)の開放
sudo firewall-cmd --permanent --add-port=3306/tcp

# MySQL用サービスの開放(推奨)
sudo firewall-cmd --permanent --add-service=mysql

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

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

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

開発用データベースの作成

MySQLに接続してデータベース作成

-- MySQLに接続
mysql -u root -p

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

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

-- 作成したデータベースの使用
USE myapp_development;

-- テーブル作成例
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- テーブル構造の確認
DESCRIBE users;

アプリケーション用ユーザーの作成

専用ユーザーの作成(セキュリティベストプラクティス)

-- 新しいユーザーの作成
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '強力なパスワード';

-- データベースへの権限付与
GRANT ALL PRIVILEGES ON myapp_development.* TO 'appuser'@'localhost';

-- 権限の適用
FLUSH PRIVILEGES;

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

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

作成したユーザーでの接続テスト

# 新しいユーザーで接続
mysql -u appuser -p myapp_development

# 接続確認
SELECT DATABASE(), USER();

よくあるトラブルと解決方法

インストール関連のトラブル

パッケージが見つからない場合

# 問題: E: Unable to locate package mysql-server
# 解決方法:
sudo apt update
sudo apt search mysql-server

# 利用可能なパッケージの確認
apt list --upgradable | grep mysql

依存関係の問題

# 問題: 依存関係の競合
# 解決方法:
sudo apt --fix-broken install
sudo apt autoremove
sudo apt autoclean

サービス起動関連のトラブル

MySQLサービスが起動しない場合

# サービス状態の詳細確認
sudo systemctl status mysql -l

# ログファイルの確認
sudo journalctl -u mysql -f

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

ポート競合の問題

# 3306番ポートの使用状況確認
sudo netstat -tlnp | grep 3306
sudo lsof -i :3306

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

接続関連のトラブル

パスワード認証エラー

# 問題: Access denied for user 'root'@'localhost'
# 解決方法:

# 1. MySQLをセーフモードで起動
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &

# 2. パスワードなしで接続
mysql -u root

# 3. パスワードをリセット
USE mysql;
UPDATE user SET authentication_string=PASSWORD('新しいパスワード') WHERE User='root';
FLUSH PRIVILEGES;
exit;

# 4. 通常モードで再起動
sudo systemctl restart mysql

ソケットファイルの問題

# 問題: Can't connect to local MySQL server through socket
# 解決方法:

# ソケットファイルの場所確認
sudo find / -name "mysql.sock" 2>/dev/null

# 設定ファイルでソケットパスを確認
grep socket /etc/mysql/mysql.conf.d/mysqld.cnf

パフォーマンス関連のトラブル

メモリ不足の警告

# 問題: MySQL使用メモリの警告
# 解決方法: 設定ファイルの調整

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# 以下の設定を追加/調整
[mysqld]
innodb_buffer_pool_size = 512M # 利用可能メモリの70-80% 
max_connections = 100 # 同時接続数の制限 
query_cache_size = 64M # クエリキャッシュサイズ

セキュリティ強化設定

ネットワークセキュリティ

ローカル接続のみに制限

# 設定ファイルの編集
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# bind-address の設定
[mysqld]
bind-address = 127.0.0.1 # ローカルホストのみ 
# bind-address = 0.0.0.0 
# すべてのIPから接続可能(注意)

SSL/TLS暗号化の有効化

-- SSL設定の確認
SHOW VARIABLES LIKE 'have_ssl';

-- SSL証明書の状態確認
SHOW STATUS LIKE 'Ssl_cipher';

ログ設定の強化

一般ログとスロークエリログの有効化

# 設定ファイルに追加
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]

# 一般ログ 
general_log = 1 
general_log_file = /var/log/mysql/general.log 

# スロークエリログ 
slow_query_log = 1 
slow_query_log_file = /var/log/mysql/slow.log 
long_query_time = 2 

# バイナリログ 
log-bin = /var/log/mysql/mysql-bin.log expire_logs_days = 7

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

基本的なバックアップ設定

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

# 単一データベースのバックアップ
mysqldump -u root -p myapp_development > myapp_backup_$(date +%Y%m%d).sql

# 全データベースのバックアップ
mysqldump -u root -p --all-databases > all_databases_backup_$(date +%Y%m%d).sql

# 構造のみのバックアップ
mysqldump -u root -p --no-data myapp_development > myapp_structure.sql

自動バックアップスクリプトの作成

# バックアップスクリプトの作成
sudo nano /usr/local/bin/mysql_backup.sh

#!/bin/bash
# MySQL自動バックアップスクリプト

BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"  # より安全な方法:.my.cnfファイルの使用

# バックアップディレクトリの作成
mkdir -p $BACKUP_DIR

# データベースのバックアップ
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases > $BACKUP_DIR/all_db_$DATE.sql

# 古いバックアップの削除(7日以上古いもの)
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

echo "Backup completed: $BACKUP_DIR/all_db_$DATE.sql"

実行権限の付与とcron設定

# スクリプトに実行権限を付与
sudo chmod +x /usr/local/bin/mysql_backup.sh

# crontabの編集(毎日午前2時に実行)
sudo crontab -e

# 以下の行を追加
0 2 * * * /usr/local/bin/mysql_backup.sh

まとめ

LinuxでのMySQLインストールは、ディストリビューションごとに手順が異なりますが、基本的な流れは共通しています。

ディストリビューション別対応

  • Ubuntu/Debian系:apt install mysql-server
  • CentOS/RHEL系:dnf install mysql-server または公式リポジトリ使用
  • 共通操作:systemctlでのサービス管理

セキュリティ設定の重要性

  • mysql_secure_installationによる初期設定
  • 強力なパスワードの設定
  • 不要なユーザーとデータベースの削除
  • ファイアウォール設定による接続制限

運用面での配慮

  • 文字セット設定による日本語対応
  • 専用ユーザーの作成
  • 定期的なバックアップ設定
  • ログ監視とメンテナンス

トラブル対応

  • よくある問題の事前把握
  • ログファイルの確認方法
  • サービス管理のコマンド
  • パスワードリセット手順

コメント

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