MySQLとは
MySQLは、オープンソースのリレーショナルデータベース管理システムです。一般に「マイ・エスキューエル」と読み、クライアントからSQLを受け、表の検索・更新、トランザクション、権限、回復などを行うサーバーソフトウェアです。
Community EditionはGPLで提供され、商用版とサポートもあります。MySQLという製品、データベースというデータ・仕組み、SQLという操作言語は別の意味です。
MySQLの表データをOSのファイルとして直接編集しません。クライアントやコネクターからMySQLサーバーへ接続し、SQLとトランザクションを通して操作します。

問い合わせがデータへ届くまで
TCPまたはローカルソケットで接続し、TLS、アカウント、接続元、リソース上限を確認する。
データベース、表、列、ルーチンなどに対する権限を現在のアカウントで検査する。
構文とオブジェクト名を解析し、実行可能な文として意味を確定する。
統計と索引から、表順、結合方法、アクセスパス、並べ替え方法を比較する。
条件評価、結合、集計を行い、ストレージエンジンへ行の読書きやロックを依頼する。
ページ、索引、バッファー、REDO・UNDO、ロック、トランザクションをエンジンの方式で管理する。
データベース、表、行、列で関係を表す
MySQLではデータベースまたはスキーマの中へ表を作り、行へ一件、列へ項目を保存します。PRIMARY KEYで行を安定して識別し、UNIQUE、NOT NULL、CHECK、FOREIGN KEYで保存してよい関係を制約します。
関連データを一つの巨大表へ重複保存せず、役割ごとの表へ分けて鍵で結ぶnormalization(ノーマライゼーション)を使います。読取性能のため重複を持たせる場合は、どの値を正本とするかを決めます。
InnoDBは標準的なトランザクション対応のエンジン
MySQL 8.4の公式マニュアルでは、InnoDB(イノデービー)が既定のストレージエンジンです。ACIDトランザクション、コミット、ロールバック、異常終了からの復旧、行ロック、整合性読み取り、外部キーを提供します。
MyISAMなど別エンジンはトランザクションや外部鍵の能力が異なります。MySQLサーバーが同じでも、表エンジンを確認せずにInnoDBの保証を前提にしません。新規表は明示した標準を使い、古い表を調査します。
自動コミットと明示トランザクションを区別する
InnoDBでは自動コミットが有効なら、通常、一つのSQL文が一つのトランザクションとして完了します。複数文を一単位にするにはSTART TRANSACTIONからCOMMITまたはROLLBACKまでを明示します。
DDLなど暗黙コミットを起こす文があるため、「BEGINで囲めばどの操作も戻せる」とは限りません。アプリケーションライブラリーの自動コミット、例外時切り戻し、接続プールへ戻す前の状態を確認します。
分離とロック待ちを扱う
InnoDBのMVCCは、読み取りが他トランザクションの未確定変更へ直接干渉しにくい整合性のある表示を提供します。一方、更新同士やロック読み取りは行・索引範囲のロックで待ちます。
デッドロックは複数トランザクションが互いのロックを待つ状態です。InnoDBは検出時に一方を切り戻しするため、アプリケーションは対象エラーを認識し、同じ処理を安全に再試行します。トランザクションを短くし、同じ順で更新します。
索引は列順と問い合わせ条件を合わせる
InnoDBはPRIMARY KEYをクラスター化索引としてデータ行を構成します。セカンダリー索引は検索鍵とPRIMARY KEYを手掛かりに行へ到達します。大きすぎる主鍵はセカンダリー索引にも影響します。
複合索引は先頭列からの並びを利用します。WHERE、JOIN、ORDER BY、GROUP BYと選択性を見て設計し、EXPLAINでアクセス種類、推定行数、利用索引、追加処理を確認します。
アカウントは利用者名だけでなく接続元も持つ
MySQLアカウントは利用者名とホスト部分の組み合わせで識別されます。同名でも接続元により別アカウントになり得ます。アプリケーション、管理、バックアップ、複製でアカウントを分け、GRANTで必要な操作だけ許可します。
インターネット全体から管理アカウントへ接続させず、ネットワークフィルターとMySQLの割り当て設定を組み合わせます。TLSを有効にし、パスワードや証明書をソースコードへ埋め込まず秘密情報管理機能から渡します。
準備済み文はデータをSQL構造から分ける
PHPなどのアプリケーションは、プレースホルダーを持つ準備済み文へ値を割り当てし、SQL注入を防ぎます。表名やORDER BY方向のようにプレースホルダーで値化できない構造は、許可一覧から選びます。
最小権限も重要です。SQL注入が起きても、接続アカウントがDROP、FILE、管理権限を持たなければ被害範囲を小さくできます。
文字設定と照合順序を分ける
文字設定は文字をバイトへ表す規則、照合順序は比較・並べ替えの規則です。MySQLのutf8mb4はUnicodeの広い文字を扱います。歴史的なutf8名称は最大バイト数が異なるため、同じものと考えません。
サーバー、データベース、表、列、接続で設定があり、変換や比較結果へ影響します。絵文字、濁点、大小文字、アクセント、末尾空間、一意判定を実データで試験します。
バックアップ、バイナリーログ、複製を組み合わせる
論理的なバックアップはSQLなどでオブジェクトとデータを書き出しし、移行しやすい一方、大容量では時間がかかります。物理バックアップはデータファイル構造を利用し、高速に戻せますがバージョン・エンジン条件があります。
バイナリーログを保存すれば、バックアップ取得後の変更を再生して特定時点へ近づけられます。複製はソースの変更を複製へ伝えますが、誤削除も伝わります。バックアップの復元試験を別サーバーで行います。
LTSとInnovationのリリース系列を選ぶ
MySQL公式のリリースモデルには、機能を安定させ長期運用するLTSと、新機能を継続して提供するInnovationがあります。本番環境用途では、使用中の系列、サポート期限、OSリポジトリ、コネクター互換性を記録します。
アップグレード前にリリースnote、削除・非推奨機能、SQLモード、文字設定、オプティマイザー変化を確認し、複製環境でバックアップ復元とアプリケーション試験を行います。
MySQL運用では、SQLが動くことだけでなく、どのアカウント・トランザクション・索引・ストレージエンジン・文字比較・バックアップ条件で動いたかを記録すると、正しさと再現性を保てます。
MySQLの確認資料:MySQL 8.4 Reference Manual「Overview」、Introduction to InnoDB、InnoDB and the ACID Model、MySQL Releases: Innovation and LTS、MySQL Community Edition