MySQLは、Oracleが開発してサポートするオープンソースのSQLリレーショナルデータベース管理システムです。
データベースとは、データを簡単に使用したり取得したりできるよう、データをまとめて構造化したものです。WordPressサイトにおける「データ」とは、投稿の内容、アカウントに登録しているユーザー情報、自動読み込みデータ、重要な設定などを意味します。
MySQLは、人気データベースの1つで、WordPressサイトで特に広く使用されています(関連して、WordPressの「MySQL Server Has Gone Away」エラーを解決する方法、MySQL 1064エラーの解決方法はこちら)
今回は、MySQLについてわかりやすく解説していきます。
MySQLとは
MySQLは、1995年にリリースされました。リリース後、所有者や管理者が何度か変わった後、2010年にオラクルによって買収されました。現在もオラクルによって管理されていますが、MySQLは以前としてオープンソースソフトウェアであり、誰でも自由に使用・変更することができます。
共同設立者の娘の名前「My」と、リレーショナルデータベースのデータにアクセスして管理できるStructured Query Language(日本語では「構造化照会言語」とも)の略称である「SQL」を組み合わせて、MySQLという名前が生まれました。
MySQLの仕組みを理解するには、まず以下2つについて知ることが重要です。
リレーショナルデータベース
データベースへのデータの保存方法にはいくつか種類があり、MySQLの場合は、「リレーショナルデータベース」に当たります。
リレーショナルデータベースを使用すると、すべてのデータを1つの大きなストレージにまとめるのではなく、データを複数の「テーブル」と呼ばれる個別のストレージに分割します。
たとえば、次の2種類の情報を保存したいとします。
- 顧客─名前、住所、メールアドレスなど
- 注文─購入商品、価格、注文者など
この2種類のデータを1つのファイルにまとめてしまうと、以下のような問題が生じます。
- 異なるデータ:注文に対して収集する必要があるデータは、顧客のデータとは異なる
- データの重複:各顧客および各注文の両方に顧客の名前があり、重複が生じるため処理が複雑になる
- 乱雑なデータ:注文データと顧客のデータの関連付けが難しくなる
リレーショナルデータベースでは、この問題を回避するために顧客用と注文用のテーブルをそれぞれ生成します。
リレーショナル(関連付けられている)であるため、「山田太郎さんの注文をすべて表示する」といった複雑な検索も可能です。
「キー」を使用すると、2つのテーブルのデータを連携して、異なるテーブルのデータを操作したり結合したりすることができます。キーは、数値のIDなど、完全に独自のものを使用します。
WordPressサイトのデータベースを見たことがある方は、WordPressがリレーショナルモデルを使用しており、すべてのデータが個別のテーブルに分割されているのはご存知のはず。
WordPressのテーブル数はデフォルトで12ですが、WordPressプラグインも独自のテーブルを生成します。以下のスクリーンショットでは、WordPressサイトのデータベースに44のテーブルがあります。
WordPressの投稿はwp_postsテーブル、ユーザー情報はwp_usersテーブルに保存されます。この2つのテーブルはキーで接続され、各投稿と作成したユーザーが関連付けられます。データベース上では、以下のように表示されます。
各投稿には一意の識別番号であるpost_authorが割り当てられており、これがキーになります。
特定の識別番号に該当するユーザーアカウントを確認するには、wp_usersテーブルのIDを確認します。
キー(ID番号)は、すべての情報を関連付ける役割を担います。これにより、データを別々のテーブルに保存することができます。
クライアントサーバーモデル
MySQLはリレーショナルデータベースであるだけでなく、「クライアントサーバーモデル」を採用しています。
「サーバー」はデータが実際に存在される場所。サーバー上のデータにアクセスするには、リクエストが必要になります。ここ出番になるのが「クラウアント」です。
クライアントは、SQL(前述のプログラミング言語)を使用して、データベースサーバーにデータの要求を行います。
たとえば、誰かがサイトの投稿にアクセスすると、WordPressサイトが複数のSQLリクエストをデータベースサーバーに送信し、投稿をブラウザに配信するために必要になるすべてのデータを取得します。具体的には以下のようなことを行います。
- wp_postsテーブルをクエリして、投稿のコンテンツを取得
- wp_usersテーブルをクエリして、投稿者の情報を取得(キーを使用)
WordPressサイトによって送信されるデータベースへの要求を正確に確認するには、無料のQuery Monitorプラグインがお勧めです。WordPressサイト(クライアント)とデータベースサーバー間のやり取りを把握することができます。
有料ソリューションには、New Relicがあります。Kinstaのエンジニアが頻繁に使用しているツールで、サイトパフォーマンスの問題の原因となっている遅いMySQLクエリを特定し、トラブルシューティングを行うことができます。
WordPressサイトがデータベースサーバーにアクセスできないと、「データベース接続の確立エラー」が発生します。
KinstaはMariaDBを採用しています
Kinstaでは、データベースシステムにMariaDBを使用しています。上でご紹介したMySQLの特徴は、MariaDBにもすべて当てはまります。
MariaDBはMySQLのフォークで、MariaDBの主要開発者はMySQLの創設メンバーでもあります。MariaDBは、オープンソースのMySQLコードをベースに構築されています。
名前こそ異なりますが、MariaDBはMySQLと密接に関連しており、「ドロップイン」と呼ばれる置換機能が組み込まれています(MySQLからMariaDBにシームレスに切り替えられる)。
MySQLとの相互運用性だけでなく、MariaDBはパフォーマンスにも優れています。「WordPressサイトの最高のパフォーマンスを実現するアーキテクチャの提供」を目指すKinstaは、この点からMariaDBを採用しています。
まとめ
MySQLは、オープンソースのリレーショナルデータベース管理システムです。WordPressサイトの場合は、投稿、ユーザー情報、プラグイン情報などが保存されます。
データがが別々の「テーブル」に保存され、「キー」で関連付けられるのが、リレーショナル(関係付け)データベースの特徴です。
WordPressサイトでデータベース内の情報が必要になると、SQLを使用してMySQLデータベースサーバーにリクエストを送信します(クライアントサーバーモデル)。
Kinstaでは、MySQLではなくMariaDBを使用しています。MariaDBはMySQLの共同創設者によって開発されたMySQLのフォークであり、今回ご紹介したMySQLの特徴はすべてMariaDBにも共通します。加えて、MariaDBには、ドロップイン置換による相互運用性と優れたパフォーマンスという利点があります。
Kinstaのお客様は、データベースへの直接アクセス、およびphpMyAdminなどのデータベース管理ツールをご利用いただけます。