MySQL運用・管理[実践]入門
〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ

[表紙]MySQL運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ

紙版発売
電子版発売

B5変形判/232ページ

定価3,080円(本体2,800円+税10%)

ISBN 978-4-297-14184-4

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

  • 「サーバー故障やヒューマンエラーに備えるには?」
  • 「アクセス数の増加時にパフォーマンスを保つには?」
  • 「異常検知をして復旧するには?」

運用・管理における長く役立つ視点を,実践経験豊富なエンジニアがどのように動いているのかをふまえて解説。

本書では,MySQLサーバーの稼働状況の確認方法といった基礎知識を始め,アカウントの権限の評価順序や認証プラグインなど,運用管理者として知っておくべき知識をまず身につけます。そして,正規化プロセスの基本,CRUDを支える仕組み,ロックの仕組みといった,内部構造について理解を深めます。

そのあと,多くのクエリ実行計画を読み解くので,どのようにクエリを書き換え,どの順番でインデックスを使って処理をしてコストを最小にするのかといった,オプティマイザの考え方がわかるようになるでしょう。レプリケーション,バックアップとリストア,監視など,障害発生に対応するためのノウハウも詰め込みました。

現場で通用する知識の地固めをしたい方,より良い運用・管理のためのポイントを知りたい方におすすめの1冊です。

こんな方におすすめ

  • MySQLによる運用・管理に取り組み始めた方
  • MySQLの基本は理解しているが,障害発生時の対応には自信のない方

本書のサンプル

本書の一部ページを,PDFで確認することができます。

目次

第1章 運用を始める第一歩

1-1 MySQLの基礎知識

  • ざっと見るMySQLの歴史
  • MySQLのバージョン
  • 動作環境
  • インストール方法の種類
  • MySQL利用時の構成
  • ストレージエンジン・アーキテクチャ
  • コマンドラインクライアント
    • コラム1 マネージドとアンマネージドのMySQL

1-2 MySQLサーバーの起動,停止方法

  • パッケージを使った場合のMySQLの起動,停止
  • バイナリ版を使用する場合のMySQLの起動,停止
    • 1.init.dを使用する場合
    • 2.mysqld_safeを使用する場合
  • プロセス確認による稼働状態の確認
  • killによるMySQLサーバーの停止
    • kill -15
    • kill -6
    • kill -9

1-3 設定ファイル my.cnf

  • 設定ファイルmy.cnfの基本
  • my.cnfの読み込み順序
  • 設定ファイル以外での設定の変更方法

1-4 MySQLサーバーの稼働状況,設定状態の確認

  • statusコマンド
  • SHOW命令
    • SHOW STATUS
    • SHOW VARIABLES
    • SHOW ENGINE INNODB STATUS
    • その他のSHOW命令
  • 情報スキーマ
    • information_schema
    • performance_schema
    • sys schema

第2章 ユーザー作成,管理

2-1 MySQLアカウントの原則

  • 用語の整理
  • 権限の評価順序
  • 接続元ホストの評価
  • これらの原則から導かれること

2-2 認証プラグイン

    • コラム2 認証文字列の保管方法
    • コラム3 caching_sha2_passwordが「初回のみセキュアな経路を必要とする」理由

2-3 権限操作

  • アカウント管理ステートメントの一覧
    • GRANTで指定するスコープ
    • GRANTでよく使う権限と組み合わせ
    • ALTER USERによるアカウントの「属性」
  • ACL_cacheとACL_table

2-4 アカウント,権限の応用Tips

  • 最小権限の原則と運用
    • 重要な情報は別のスキーマに分離する
    • アプリケーションサイドで暗号化する
    • カラムスコープの権限を設定する
    • 重要なカラムをDEFINERで隔離する
  • 接続元ホストを大きく取るか,小さく取るか
    • 接続元ホストをネットワークセグメントで指定する
    • 接続元をMySQLで制限せず,ネットワークを分離する
  • パスワードの変更
    • デュアルパスワード設定
    • 別アカウントを作成することによる結果的なローテーション
  • 権限システムを応用したクォータの設定

第3章 MySQLのデータ

3-1 論理的なデータ

  • 論理的なデータとは
    • 名前空間と修飾
    • インデックス
    • ストレージエンジン
  • データ型
    • 文字列型のデータに関する注意事項
  • 制約
  • 正規化
    • 正規化の前提
    • 第1正規形
    • コラム4 Eメールアドレスは分割可能か不可能か
    • 第2正規形
    • 第3正規形

3-2 物理的なデータ

  • 物理的なデータとは
    • 論理的なデータと紐づくデータファイル
    • 論理的なデータに紐づかないデータファイル.
    • ibdファイル内部のデータ構造
  • InnoDBとCRUD操作
    • Create(INSERT)
    • Read(SELECT)
    • Update(UPDATE)
    • Delete(DELETE)
  • CRUDを支える仕組み
    • ページクリーナー
    • パージスレッド
    • クラッシュリカバリ
    • チェックポイント/ファジーチェックポイント
    • ダブルライトバッファ
    • チェンジバッファ
    • 書き込み速度を上げる危険なパラメータ
  • テンポラリテーブルに関するデータ
    • ユーザー定義のテンポラリテーブル
    • 内部テンポラリテーブル

3-3 ログファイル

  • エラーログ
  • スローログ
  • ジェネラルログ
  • トレースログ

3-4 それ以外の論理オブジェクト

  • 論理オブジェクトに特有の概念
  • 運用上の論理オブジェクトの欠点
  • マテリアライズドビューを考える

第4章 ロックとクエリ実行計画

4-1 MySQLのロック

  • InnoDBレイヤでのロック
    • トランザクション分離レベル
    • トランザクション分離レベルとロック
  • メタデータロック
  • その他のロック
  • デッドロック
    • デッドロック検出の表示
    • コラム5 本物のデッドロック
  • ロックの観測

4-2 クエリ実行計画

  • インデックスアクセスとテーブルアクセス
  • オプティマイザの気持ちになる
    • コラム6 filteredの表示
  • EXPLAINを読み解く
    • 単一テーブルのWHERE句のないGROUP BY
    • 単一テーブルのWHERE句およびGROUP BY
    • 単一テーブルのORDER BY LIMIT最適化
    • 単一テーブルのGROUP BYと集計結果カラムのHAVING,ORDER BY
    • シンプルな2テーブルJOIN
    • 2テーブルJOIN + WHERE + ORDER BY LIMIT最適化(同テーブル)
    • 2テーブルJOIN + ORDER BY LIMIT最適化(別テーブル)
    • ベーステーブル + FROM句のサブクエリ(1)
    • ベーステーブル + FROM句のサブクエリ(2)
    • ベーステーブル + WHERE句のサブクエリ
    • コラム7 インデックスマージ最適化
    • EXPLAIN SELECT ..以外のEXPLAIN
  • 実行計画とロックの関連

第5章 レプリケーション

5-1 レプリケーションの目的

  • 読み取り専用
  • バッチ処理/分析
  • バックアップ
  • 複数のMySQLを集約
  • アップグレード
  • シャーディング構成の準備
  • フェイルオーバー

5-2 レプリケーションのアーキテクチャー

  • シングルスレッド方式
    • バイナリログ
    • バイナリログダンプスレッド
    • レプリケーションレシーバーI/Oスレッド(I/Oスレッド)
    • リレーログ
    • レプリケーションSQLアプライヤースレッド(SQLスレッド)
  • MTA方式
  • バイナリログの形式
    • STATEMENT
    • MIXED
    • ROW
  • ポジションとGTID
    • ポジションレプリケーション
    • GTIDレプリケーション
  • 応用アーキテクチャー
    • MTA方式
    • カスケードレプリケーション
    • マルチソースレプリケーション
    • 循環レプリケーション
  • レプリケーション遅延
    • 同時実行性の高いトラフィック
    • 一度に大量の行を更新するトランザクション
    • 行ベースレプリケーションの特性による遅延
    • レプリケーション遅延の確認方法

5-3 レプリケーションの構築

  • 設定の確認(ソース)
  • ユーザーアカウントの作成(ソース)
  • フルバックアップの取得(ソース)
  • リストア(レプリカ)
  • レプリケーションの設定(レプリカ)
    • ポジションレプリケーションの場合
    • GTIDレプリケーションの場合
  • レプリケーションの開始(レプリカ)
  • レプリケーションの状態確認(レプリカ)
  • 読み取り専用に設定(レプリカ)
  • レプリケーションの一時停止(レプリカ)
  • レプリケーションのリセット(レプリカ)

5-4 レプリケーションとクラッシュ耐性

  • ソースダウン
    • sync_binlog=0
    • sync_binlog=1
    • sync_binlog=0または1以外
    • ソースダウンとフェイルオーバー
  • レプリカダウン
    • ポジションレプリケーションの場合
    • GTIDレプリケーションの場合
  • 準同期レプリケーション
    • 設定
    • オプション
    • 運用における注意点

5-5 レプリケーションとマイグレーション

  • 構成の確認
  • MySQL 8.0のMySQLサーバーを用意
  • オプション値の確認
  • ユーザーアカウントの作成
  • データのコピー
  • レプリケーションの構築
  • 切り替え前の確認
    • 移行元と移行先のデータベースオブジェクトの比較
    • 移行元と移行先のデータの比較
    • 移行元と移行先のクエリの性能確認
  • 切り替え
    • 移行元を読み取り専用にする
    • 移行元と移行先のデータの状態を確認する
    • 移行先のレプリケーションを停止する
    • Webアプリケーションの接続先を変更する
    • 移行先の書き込みを許可する
    • コラム8 バックワードレプリケーション

第6章 バックアップとリストア

6-1 バックアップの種類と方法

  • 論理バックアップと物理バックアップ
  • オンラインバックアップとオフラインバックアップ
  • フルバックアップ,差分バックアップと増分バックアップ
  • MySQLサーバーのバックアップ方法

6-2 論理バックアップのフルバックアップとリストア

  • mysqldump
    • フルバックアップ
    • リストア
  • mysqlpump
  • MyDumper
    • インストール
    • フルバックアップ
    • リストア
  • MySQLShellダンプロードユーティリティ
    • フルバックアップ
    • リストア.

6-3 物理バックアップのフルバックアップとリストア

  • MySQLサーバーの物理ファイルをコピー
    • フルバックアップ
    • リストア
  • Percona XtraBackup
    • インストール
    • フルバックアップ
    • リストア
  • Percona XtraBackupの仕組み
    • バックアップ
    • リストア
    • フルバックアップの応用
    • 現場での利用例

6-4 ポイントインタイムリカバリ

  • 該当のイベントを探す
  • フルバックアップからリストア
  • mysqlbinlogコマンドを利用したPITR
    • ポジション手法
    • GTID手法
  • レプリケーション機能を利用したPITR
    • ポジション手法
    • GTID手法

6-5 バイナリログのバックアップ

  • 自動削除
  • バックアップ
    • 物理ファイルバックアップ
    • ライブバックアップ
  • バイナリログと増分バックアップ

第7章 監視

7-1 監視とは

7-2 MySQLが稼働するOS,ハードウェアの状態

  • プロセス
  • ハードウェアリソースの利用状況
    • CPU利用率
    • メモリ利用率
    • ディスクに対するI/O量
    • NICごとのデータ転送量
  • パフォーマンストレーサー
    • perf top
    • Flame Graph

7-3 ログファイル

  • エラーログ
    • エラーログの定義の確認
  • スロークエリログ.

7-4 MySQL内部の情報

  • SHOWコマンド
    • SHOW [FULL] PROCESSLIST
    • SHOW ENGINE INNODB STATUS
    • SHOW STATUS
    • SHOW MASTER STATUS
    • SHOW REPLICA STATUS
  • performance_schema
    • events_statements_summary_by_digest
    • file_summary_by_instance
    • table_io_waits_summary_by_table
  • information_schema
    • INNODB_METRICS
    • INNODB_TRX
    • INNODB_TABLESPACES

7-5 mysqld_exporter,Prometheusを設定する

  • mysqld_exporterを起動する
  • Prometheusを起動する

7-6 死活監視と異常検知

  • 死活監視
  • ハードウェアリソースの監視
    • CPU利用率
    • ディスク利用率
    • メモリ利用率
    • ネットワーク帯域
  • 異常検知
    • auto_increment値
    • 長時間実行されるトランザクション
    • スロークエリログの出力量
    • レプリケーションの状態と遅延状況

Appendix Linuxへのインストール

A-1 インストール方法の種類

A-2 Red Hat Enterprise Linux,CentOS,Oracle Linux編

  • yumリポジトリを使用する方法
  • rpmパッケージファイルを使用する方法

A-3 Debian,Ubuntu編

  • aptリポジトリを使用する方法
  • dpkパッケージファイルを使用する方法

A-4 Linux共通:コンパイル済み実行ファイルを使用する方法

著者プロフィール

yoku0825(よくぜろはちにーごー)

MySQLの魅力にとりつかれ,以来10年以上MySQLの運用に携わっている。ソースコードはsql/sql_yacc.yyから読む派。座右の銘は「オラクれない,ポスグれない,マイエスキューエる」。日本MySQLユーザ会副代表。とある企業のDBA。


北川健太郎(きたがわけんたろう)

LINEヤフー株式会社所属のデータベースエンジニア。担当はMySQLとOracle DatabaseとちょっとTiDB。好きなMySQLの機能はレプリケーションで,好きなOracle Databaseの機能はログオントリガー。


tom__bo(とんぼ)

MySQL好きなソフトウェアエンジニア。 MySQLの運用に5年以上携わり,サーバー/クライアントの通信プロトコル,バイナリログやRedoログをデコードして眺めるのが趣味。ソースコードはmysql_execute_ command()を始点に調べることが多い。


坂井恵(さかいけい)

2002年頃にMySQLと出会う。MySQLの好きな機能はSpatial機能(GIS機能)。MySQLのしくみもさる事ながら,特にデータ構造やデータの流れに強い関心を持つ。ソースコードは,item_create.ccから。日本MySQLユーザ会副代表。有限会社アートライ代表取締役。