WordPressでリビジョン削除後にMySQLのテーブルを最適化する。

前回の記事「WordPressのリビジョンを削除する。」でMySQLのテーブルからリビジョンのレコードを削除しました。頻繁にMySQLでテーブルのデータを削除しているので、最適化を実施してみます。データベースではデータ登録の際、未使用領域から使用していくためデータサイズが大きくなっていきます。データを削除してもまとまった「空き」がなければ未使用領域が使用されます。最適化を行うことで空き領域をまとめ、そこにデータが書き込まれるようになるためディスク領域の有効活用ができるようになります。また、データの断片化が解消されるためパフォーマンスも良くなります。

[広告]


前回と同様、最適化を行ったMySQLのバージョンは、5.7.23 です。

■OPTIMIZE TABLE テーブル名

最適化を行うMySQLの命令文は「OPTIMIZE TABLE テーブル名」です。WordPressの記事が書かれているテーブルは「wp_posts」テーブルであるため、このテーブルを最適化してみることにします。

mysql> OPTIMIZE TABLE wp_posts;

以下が実行結果です。

問題なく最適化できると思っていたのですが、どうやらこの結果ではダメっぽい。そもそも、statusが「Operation failed」となっているし。「Invalid default value for 'post_date'」というのが原因らしいけれど、さっぱり見当がつきません。
※'post_date'というのは、wp_postsテーブルが持つカラムの一つだけれど、それ以上のことは不明。。

しばらくわからなかったけれども、ある時以下の情報を見つけました。

MySQL 5.6.6 以降でのデフォルトのSQL モードは NO_ENGINE_SUBSTITUTION で、MySQL 5.6.5 以前では、これは空白です (モードの設定なし)。

で、以下をやってみた。

mysql> SET sql_mode = '';

その後、再度、OPTIMIZE TABLE を実行。

「Invalid default value for 'post_date'」が消え、statusが「OK」になりました!
これでテーブルの最適化ができたようです。

安全な通信を考える(電子証明書/PKI)

「安全な通信を考える(ハッシュ関数/電子署名)」の続きです。電子署名を使えば送信者の検証ができますが、それには相手の「本物の公開鍵」が自分の手元にあることが前提でした。

相手の公開鍵が本物かどうか?

これを解決するには、信頼できる第三者に証明してもらうことになります。その仕組みを書いてみます。

■電子証明書

まず、信頼できる第三者とは「公的な機関や組織」です。認証局(CA)と呼ばれます。認証局になるためには高い信頼性を確保するための運用や管理方法など厳しい審査をクリアする必要があります(※どのような審査があるのかは僕もわかりません)。この認証局(CA)が「この公開鍵はあなたのものです」と証明してくれるのですから、みんなもそれを信頼してくれることになります。

前回の例で、BさんがAさんに公開鍵を渡す場合、まずBさんはCAに「公開鍵が自分のものである」と証明してもらう申請を行います。CAではBさんの申請の審査を行い、問題ないようであれば電子証明書の発行を行います(図1)。

図1

この電子証明書ですが、その中身が重要です。電子証明書には以下のものが含まれています。

・公開鍵の証明書
・申請した公開鍵
・CAの電子署名

この中の「公開鍵の証明書」には、発行した認証局の名称、電子証明書の有効期間、証明書のシリアル番号(識別番号)と言った情報が記載されています。電子証明書はフォーマットが決まっていて、そのフォーマットにあわせた情報が記載されます(「X.509」といったフォーマットがあります)。

Bさんは、この電子証明書をAさんに送ることにより「この公開鍵はCAが認めた私のものです」とAさんに納得してもらうことができます。

とはいえ、、、Aさんは「この電子証明書は本当にCAが認めたものなのか?」という検証を行う必要があります。この検証を行う方法ですが、電子証明書に含まれる「CAの電子署名」を検証することでCAが発行したものなのかどうかを確認することができます。それにはCAの公開鍵が必要です(図2)。
※電子署名の検証については前回の「安全な通信を考える(ハッシュ関数/電子署名)」を参照してください。

図2

CAの公開鍵ですが、実は、AさんはすでにCAの公開鍵を持っています。信頼できる第三者であることから、OSやWEBブラウザーにあらかじめインストールされているのです。

改めて、AさんとBさんの通信を考えます。Bさんには、「本文」と「Bさんの電子署名」と「電子証明書」をあわせて送ってもらいます(図3)。

図3

Bさん(送信者)が行う作業、および、Aさん(受信者)が行う作業をそれぞれ記載してみます。

【Bさんの作業】

  1. 送りたい情報(本文)を作成する。※この本文はダミーで漏洩してもよいもの。
  2. 本文をハッシュ関数でハッシュ値にする(ダイジェストの作成)。
  3. 作成したダイジェストを秘密鍵で暗号化する。※この暗号化されたダイジェストが電子署名と呼ばれるものです。
  4. 「本文」と「Bさんの電子署名」、それに「電子証明書」を添付してAさんに送信する。

【Aさんの作業】

  1. Bさんから送られた情報を受け取る。
  2. 電子証明書からCAの電子署名を取り出し、インストールされているCAの公開鍵で復号する。
  3. 電子証明書から公開鍵の証明書を取り出し、ハッシュ化する。
  4. 2と3のハッシュ値を比較し、一致すれば電子証明書に含まれる公開鍵はBさんのものであるということが言える。
  5. 次に、そのBさんの公開鍵で「Bさんの電子署名」を復号する。
  6. 「本文」をハッシュ化する。
  7. 5と6のハッシュ値を比較し、一致すれば送られてきた情報は本当のBさんからのものであり、送信者が間違いないと言える。
  8. 受領したBさんの公開鍵で、本当に送りたい情報を暗号化してAさんからBさんに送る。

これでやっと、本当に安全な通信ができるようになったと言えます。

■公開鍵基盤(PKI)

この一連の仕組みは公開鍵基盤(Public Key Infrastructure)と呼ばれるもので、いまのインターネットが当たり前になっている現状では必要不可欠なものとなっています。信頼できる第三者を立てることで成り立っており、そこが「基盤」と言われるところなのでしょう。

IPAが実施する情報処理安全確保支援士やネットワークスペシャリスト試験でもセキュリティ分野に関わる問題がよく出ていて、電子証明書の理解ができていないと問題が解けないので、このブログの記載が理解の手助けとなれば幸いです。