この半年間、MySQL 8 は私が本番環境で開発・保守している多くのウェブアプリケーションの基盤となってきました。小規模なシステムから大規模ユーザーを抱えるプロジェクトまで、MySQL は常にリレーショナルデータの保存と管理において最高の選択肢です。堅牢で信頼性が高いだけでなく、新しい機能が継続的に追加され、パフォーマンスを大幅に向上させています。
もしあなたが開発者、DevOpsエンジニア、またはシステム管理者で、Ubuntu上にデータベースサーバーをセットアップする必要があるなら、MySQL 8のインストールと設定方法を習得することは不可欠な基礎スキルです。この記事を読めば、あなたのプロジェクトにMySQL 8を安全かつ効果的にデプロイする自信がつくことでしょう。
核心概念: MySQLとRDBMSとは何か?
実践に入る前に、MySQLとは何か、そしてどのように機能するのかを理解しましょう。基本的に、MySQLはオープンソースのリレーショナルデータベース管理システム(RDBMS)であり、SQL(Structured Query Language)を使用してデータを管理します。
RDBMSの核心は、データをキー(keys)を介して関連付けられたテーブル(tables)として整理することです。たとえば、ユーザー情報を含むusersテーブルと、記事を保存するpostsテーブルがあるとします。postsテーブル内の列は、usersテーブル内のユーザーIDにリンクされます。このモデルは、データの一貫性を保ち、管理を容易にします。
MySQLはクライアント-サーバーモデルで動作します。これは、データベースを管理するためにサーバープログラムがシステム上で動作することを意味します。アプリケーションプログラム(クライアント)は、このサーバーに接続し、SQLコマンドを送信して結果を受け取ります。Ubuntuは、その安定性と大規模なサポートコミュニティにより、MySQLサーバーを実行するための理想的なプラットフォームです。
実践: UbuntuへのMySQL 8のインストールと設定
ここが最も重要なセクションです。ここでは、Ubuntuシステム上でMySQL 8を稼働させるための手順をステップバイステップで説明します。Ubuntu Server 20.04 LTSまたは22.04 LTSを使用していることを前提としていますが、これらの手順は最近のUbuntuバージョンでも同様に適用可能です。
ステップ1: システムの更新
常にシステムの更新から始めましょう。これは、任意のサービスをデプロイする際に重要なステップであり、最新のソフトウェアパッケージと重要なセキュリティパッチを確実に適用します。
sudo apt update
sudo apt upgrade -y
ステップ2: MySQLサーバーのインストール
システムが更新されたら、MySQLサーバーパッケージのインストールを進めることができます。Ubuntuは通常、公式リポジリにMySQL 8を提供しています。
sudo apt install mysql-server -y
インストール中に、MySQLのrootユーザーのパスワード設定を求められる場合があります。強力なパスワードを選択し、慎重に記憶しておいてください。もし尋ねられなかった場合は、後のセキュリティ設定ステップで設定します。
ステップ3: mysql_secure_installationによる初期セキュリティ設定
このステップは、MySQLサーバーを不正アクセスから保護するために非常に重要です。mysql_secure_installationツールは、セキュリティを強化するための一連の質問を通じてガイドします。
sudo mysql_secure_installation
ツールは以下のことを尋ねてきます:
-
VALIDATE PASSWORD COMPONENT? (パスワード強度検証コンポーネント)。私は通常、パスワードが十分に強力であることを保証するために
Yを選択します。- パスワードの強度レベル(Low, Medium, Strong)を選択できます。
MediumまたはStrongを推奨します。
- パスワードの強度レベル(Low, Medium, Strong)を選択できます。
-
Change the password for root? (
rootユーザーのパスワードを変更しますか?)。もし前のインストールステップでパスワードを設定済みであれば、Nを選択してください。まだ設定していない場合は、Yを選択し、強力なパスワードを設定します。 -
Remove anonymous users? (匿名ユーザーを削除しますか?)。常に
Yを選択してください。匿名ユーザーはパスワードなしでデータベースにアクセスできるため、これは非常に危険です。 -
Disallow root login remotely? (
rootユーザーの遠隔ログインを許可しませんか?)。私は常にYを選択します。rootユーザーをlocalhostからのアクセスのみに制限することで、外部からのrootアカウントへのブルートフォース攻撃を防ぐことができます。 -
Remove test database and access to it? (
testデータベースとそのアクセス権を削除しますか?)。Yを選択してください。testデータベースは本番環境では不要であり、悪用される可能性があります。 -
Reload privilege tables now? (今すぐ権限テーブルを再ロードしますか?)。セキュリティ変更をすぐに有効にするために、常に
Yを選択してください。
ステップ4: MySQLサーバーのステータス確認
インストールとセキュリティ設定の後、MySQLサーバーが安定して稼働していることを確認しましょう。以下のコマンドでステータスを確認できます:
systemctl status mysql
active (running)と表示されていれば問題ありません。もし実行されていない場合は、以下のコマンドで再起動できます:
sudo systemctl start mysql
そして、システム起動時に自動的に起動するように有効にします:
sudo systemctl enable mysqlステップ5: MySQLにログインし、バージョンを確認する
これで、
rootユーザーでMySQLクライアントにログインして確認できます。sudo mysql -u root -p設定した
rootパスワードを入力します。ログインに成功すると、mysql>プロンプトが表示されます。バージョンを確認するには、以下のコマンドを実行します:SELECT VERSION();出力にはMySQLのバージョンが表示されます。例:
8.0.36。ステップ6: アプリケーション用の新しいユーザーとデータベースの作成
本番環境では、アプリケーションから
rootアカウントを使用して接続することはありません。これは多くのリスクを伴います。代わりに、必要な権限を持つ個別のデータベースとユーザーを作成すべきです。これがより安全な方法です。-- 新しいデータベースを作成する CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 新しいユーザーを作成し、localhostからのアクセスのみを許可する CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'MatKhauCucManhCucManh!'; -- myapp_dbデータベース上の新しいユーザーに権限を付与する GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost'; -- 権限の変更を適用する FLUSH PRIVILEGES;注:
MatKhauCucManhCucManh!を強力な独自のパスワードに置き換えてください。アプリケーションが他のサーバー(localhost以外)から接続する必要がある場合は、'localhost'をIPアドレスまたは'%'(どこからでも許可しますが、セキュリティには特に注意が必要です)に置き換えてください。ステップ7: リモートアクセス設定(オプション)
デフォルトでは、MySQLサーバーは
localhostからの接続のみを受け入れます。他のサーバーからのアプリケーションが接続する必要がある場合は、この設定を変更する必要があります。まず、MySQL設定ファイルを編集します:
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アドレスからの接続を許可する # あるいは特定のIPアドレスからのみ許可する、例: bind-address = 192.168.1.100ファイルを保存して閉じ(Ctrl+X, Y, Enter)、その後MySQLを再起動します:
sudo systemctl restart mysql最後に、Ubuntuのファイアウォール (UFW) でMySQLポート(デフォルトは3306)を開放する必要があります。
sudo ufw allow 3306/tcp sudo ufw status
ufwが有効になっており、3306/tcpポートが許可されていることを確認してください。重要警告: リモートアクセスポートを開放すると、セキュリティリスクが増大します。強力なパスワードを設定し、信頼できるIPアドレスにのみ権限を付与するように常に確認してください。
ステップ8: 実践経験に基づく基本的な設定の最適化
MySQL 8のデフォルト設定は、多くのケースで十分に機能します。しかし、システムに高い負荷がかかり始めると、最適化は避けられません。最初のプロジェクトで
usersテーブルが1000万行に達したとき、クエリがひどく遅くなり始めたのを覚えています。これはユーザーエクスペリエンスに直接影響しました。その時、デフォルトのMySQL設定では大規模な負荷に対応できず、インデックスの最適化とシステムパラメータの調整が極めて重要であると認識しました。最も重要なパラメータの1つは
innodb_buffer_pool_sizeです。これは、InnoDB(MySQL 8のデフォルトストレージエンジン)が頻繁にアクセスされるデータとインデックスをキャッシュするために使用するメモリ領域です。innodb_buffer_pool_sizeに十分なRAMを割り当てることで、読み取りパフォーマンスを大幅に向上させることができます。MySQLのみを実行するサーバーの場合、私は通常、総RAM容量の約70〜80%を設定します(例: 4GB RAMのサーバーでは、innodb_buffer_pool_sizeを3GBに設定できます)。編集するには、
mysqld.cnfファイルを開きます:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]セクションの下に以下の行を追加または編集します:[mysqld] # ... その他の設定 ... innodb_buffer_pool_size = 2G # 例として2GBを設定。実際のサーバーRAMに合わせて調整してくださいその後、変更を適用するためにMySQLを再起動します:
sudo systemctl restart mysqlMySQL 8では
query_cacheが廃止されました。代わりに、アプリケーション層でのキャッシングメカニズムを検討したり、ProxySQLのようなツールを使用して接続とクエリキャッシュを最適化したりすることができます。スロークエリログを監視することも、パフォーマンスを最適化する必要があるSQL文を見つける強力なツールです。まとめ
上記の詳細な手順により、Ubuntu上にMySQL 8サーバーのインストールと設定が成功しました。初期セキュリティ設定から、ユーザーとデータベースの作成、基本的な最適化調整まで、アプリケーションをデプロイするための強固な基盤を築きました。
覚えておいてください、インストールは始まりにすぎません。MySQLの保守、パフォーマンス監視、そして継続的な最適化は、特にシステムが成長するにつれて継続的なプロセスです。常にセキュリティを優先し、MySQL 8が提供する他の強力な機能について深く学ぶことをためらわないでください。MySQLを使用したプロジェクトでの成功を願っています!
