Findy Engineer Lab

エンジニアのちょい先を考えるメディア

日本を代表するMySQLエキスパート・yoku0825さんが語る『MySQL運用・管理[実践]入門』の世界



MySQLサーバーの運用・管理に役立つ視点を、実践経験豊富なエンジニアが解説する『MySQL運用・管理[実践]入門〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ』が2024年5月22日に発売されました。著者は、yoku0825さん、北川健太郎さん、tom__boさん、坂井恵さんと、MySQLの運用においてベテランと言える経歴の持ち主が揃い踏み。発売から1か月が経過したばかりですが、早くも多くの反響を呼んでいます。


初学者に優しくありつつ、上級者も唸らせるようなディープな内容も盛り込む、というバランスのとれた内容。書籍の制作工程やデータベースを学ぶ意義について、著者の一人であるyokuさんにお伺いしました。

4人の専門性を活かし、さまざまなレベルの読者が楽しめる本に

ーー本書のターゲットとなる読者像はどのような方々でしょうか。

本書は、主にインフラエンジニアやデータベース管理者(DBA)といったMySQLを運用・管理する立場の方々に向けて書かれています。Webアプリケーションの開発でMySQLを使っている開発者の方々も対象ではありますが、どちらかというとインフラ寄りの内容になっています。

本書は、これらの読者が日々の業務で直面する課題を解決するための助けになることを目指しています。当初は、DBAの立場から実践的で濃い内容の本を書くことを目標としていましたが、初学者にも配慮した内容へと方向性を見直しました。その結果、初学者から上級者まで幅広い読者に向けて、役立つ情報を提供しています。

ーー 本書のコンセプトを教えてください。

本書のコンセプトは「読者の成長に寄り添える本」です。何度読み返しても、新しい発見がある。そんな1冊を目指しました。

例えば、初学者の方が本書を手に取ったとき、最初はわからないことだらけかもしれません。しかし、実際の開発で問題に直面したときに本書を読み返すと、最初に読んだときよりも内容が理解できるようになっているはずです。さらに学びを深めるたびに新しい発見ができるような本を目指しました。

ーー制作にあたって、苦労した点や工夫した点はありますか。

実務的な深い知識、特に内部構造などにフォーカスして書いていったため、裏付けを取るのに他の本よりも苦労しましたね。

工夫した点は、執筆者それぞれの得意分野を活かしたことです。北川さんはレプリケーションとバックアップについて、私は内部構造やクエリの実行計画など、一歩踏み込んだ知識を盛り込むことを重視しました。坂井さんと編集者の方には、全体のバランスをとりながら本を整えていただきました。

各執筆者の専門性を活かしつつ、全体としての一貫性を保つのは難しい部分もありましたが、坂井さんと編集者の方のサポートもあり、うまく調整することができたと思います。

実践で使える運用ノウハウからソースコードレベルのコアな情報まで

ーー本書の内容で、特にこだわったポイントを教えてください。

第6章「バックアップとリストア」では、「MyDumper」と「XtraBackup」について詳しく説明しています。これらのツールを実際に使えるように、そのまま実行できるオプション付きで説明を載せているところは、かなりこだわったポイントです。

また、第5章「レプリケーション」では、仕組みの説明だけでなく、構築のための細かいコマンドなども載せています。特に「5-5 レプリケーションとマイグレーション」は、私たちが自社のプライベートクラウドでマイグレーションを行うときに実際に使っていた手順を、汎用化できる範囲で公表したものです

ーーなるほど、実際の運用で使われている手順が載っているんですね。

はい。公式なドキュメントではありませんが、実践で使えるノウハウを盛り込んでいます。これらのノウハウは、読者の方々にも役立てていただけるのではないかと思います。

一方、個人的には、第2章に出てくる「Security_Context」を挙げたいです。MySQLではログインした状態で、他のセッションからDROP USERしても、すでにつながっている接続は切れないんですね。この動作を真面目に説明したのは、本書が初めてだと思います。

「Security_Context」という単語は、MySQLのドキュメントにも出てこなくて、ソースコードにしか出てこないんです。「Security_Context」の概念を知っていると、MySQLがログイン中の接続を切らない理由が一発でわかります。このように、ソースコードレベルの深い理解につながる説明を入れたところが、私のお気に入りのポイントです。

ーー 他の入門書では触れられていないような、深い技術的知見も満載ですね。たとえば、コラム3の"caching_sha2_passwordが「初回のみセキュアな経路を必要とする」理由"など。一般的なMySQLの教則本にあるコラムの内容とは異なりますね(笑)。

はい。そうですね(笑)。

僕の十八番のパターンなんですが、平易な説明をしているかと思えば、いきなりMySQLの内部構造の核心に迫る。そんな感じで、誰にでもわかるような一般的な話題と、ソースコードを読んだ人にしかわからないようなコアな話題を自在に行き来するんです。本書でも、ぜひジェットコースターのような急降下を楽しんでいただければと思います(笑)。

本書を片手に、MySQLの「沼」の深いところに潜ってほしい

ーーyokuさんが考えるMySQLの特性を、他のデータベースとの違いという観点で教えてください。

MySQLと他のデータベースの大きな違いの一つは、クエリのバリエーションが少ないことです。最近、OracleやPostgreSQLは大規模なデータセットに対して、ウィンドウ関数やグループ化、集計のための機能に力を入れています。一方、MySQLはそれらの機能を後から取り入れたような形になっています。

また、MySQLはリアルタイム処理に適しています。XやFacebookといった企業がMySQLを使っているのがその例です。比較的小さな結果セットを数十ミリ秒という単位でたくさん表示するのがMySQLの得意とするところです。

本書の冒頭に「MySQLの性格を知り、MySQLが嫌がることをしないこと」という記述がありますが、MySQLの特性を理解し、無理に集計をさせるよりは、MySQLの得意分野である小さな結果セットを上手く活用しましょうというメッセージが込められています。

ーーMySQLをはじめとするデータベースについて学ぶ際、初学者がつまずきやすいのはどのような点でしょうか。

MySQLで初学者がつまづきやすい理由は、SQLの宣言的な性質にあります。例えばSELECT文でも、どういう順番でデータを取り出すのか、どういう順番でフィルタリングをするのかはSQLの段階で隠蔽されているんです。

またSELECT文の動作を理解し、次にどういう仕組みで実行されているのかを理解したくても、データがどのように格納され、どのように情報を取り出しているのかもソースコードに隠蔽されています。

ソースコードを読み解いていくと、今度はディスクのIO部分やデバイスへのアクセスというのがOSに隠蔽されていて、どんどん玉ねぎの皮をむいていくように深いところまで行かなければならなくなってしまうんです。

長年MySQLに携わってきた人たちは「沼」という言い方をしますが、気が付けばこのようにインフラのレイヤーなどの部分も理解しなければならなくなります。この沼を初学者が1人で深くまで潜るのは難しいでしょう。コミュニティに参加するなどして、「ここから先は難しいね、息苦しくなってきたね」と言い合える仲間を見つけるのが理想ですが、そうもいかない場合もあります。

そんなとき、本書がMySQLの深いところまで一緒に潜ってくれる仲間のような、成長を促してくれる相棒のような存在になってくれたらいいなと思っています。ぜひ時間をかけて付き合っていってほしいですね。

ーーデータベースについてしっかり学ぶことは、システム開発において重要だと考えていますか?

はい、データベースについての知識は、システム全体に大きな影響を与えます。私自身は常にDBAとして働いてきたので、DBAがいない環境を見たことがあまりないのですが、DBAの有無で、システムの安定性やトラブルシューティングの速度に大きな差が出ると思います。

また、DBAがいることで、コストの限界までシステムを最適化できる可能性が高くなります。

ーーコストの面でも、DBAの存在は重要だということでしょうか。

そうですね。運用にかかるコストは、DBAの有無で大きく変わってきます。

例えば、開発者が見積もったコストを、DBAの知見を活かすことで半分ぐらいまで削減できるかもしれません。それだけ運用コストに差が出るんです。DBAがシステムの詳細を理解し、適切にチューニングやトラブルシューティングを行うことで、長期的なコストを大幅に削減することが可能になります。

ですので、データベースについての専門的な知識を持つ人材は、システムの安定性とコストの両面において、非常に重要な役割を果たすと言えるでしょう。

どんなバージョンでも通用する知識を提供。読者のキャリアを支える一冊

ーー書籍に対する読者の反響は届いていますか?

はい、主に顔見知りの方々から少しずつ反響をいただいています。

内容が非常に充実しているので、机の上に置いておきたいと言ってくださる方もいます。特に印象的だったのが、MySQLのサポートをされている方からのコメントです。その方は、本書が詳しくテンポよく書かれていると評価してくださいました。MySQLの中の人からも、ドキュメントのわかりにくいところをうまくまとめていると言っていただけて、とてもありがたく思います。

ーー最後に、この記事の読者へメッセージをお願いします。

MySQLは最近新しいバージョンがリリースされましたが、この2年間でバージョンアップがあったにもかかわらず、本書の内容はほとんど改訂の必要がありませんでした。これは、本書に書かれているMySQLの基本的な使い方が、バージョンによらず通用する知識だからです。

今後のバージョンでも同様に役立つでしょうし、逆に少し古いバージョンのMySQLを扱うことになっても、本書の知識は力になってくれるはずです。バージョンに依存しない普遍的な知識が詰まっているのが本書の特長だと思います。

データベースを扱うエンジニアにとって、こうした知識はキャリアを長く支えてくれる重要なスキルになります。ですので、ぜひ長い目で見て、自身の知識として身につけていただければと思います。本書が、読者の方々の成長と活躍に役立てば幸いです。