MySQL

MySQL

【MySQL】MySQLとPostgreSQL、実務でどちらを選ぶべきか比較検証

こんにちは、かつコーチです。これでMySQL編は20本目、最終回です。「新しいプロジェクトのDB、MySQLとPostgreSQLどっちにしよう」これは、案件のDB選定のたびに必ず出てくる議論です。どちらも無料で使えるオープンソースのRDB...
MySQL

【MySQL】パーティショニングの基本:大規模テーブルを分割する

こんにちは、かつコーチです。数千万件規模のログテーブルに対して、直近1週間分のデータだけを集計するクエリを投げているのに、テーブル全体をスキャンしてしまい応答が返ってこない。インデックスを見直しても限界がある、そんな状況に心当たりはないでし...
MySQL

【MySQL】文字化けトラブルシューティング

こんにちは、かつコーチです。「絵文字を保存しようとしたらエラーになった」「日本語のデータが???や縺薙s縺ォ縺。縺ッのような文字化けで表示される」MySQLを触っていると、一度は文字コードのトラブルに遭遇するのではないでしょうか。文字コード...
MySQL

【MySQL】よくあるMySQLエラーまとめ(Access denied等)

こんにちは、かつコーチです。MySQLを触り始めると、必ずと言っていいほど遭遇するエラーがいくつかあります。「Access deniedって出たけどパスワードは合ってるはずなのに」「Can't connect to MySQL server...
MySQL

【MySQL】SQLインジェクション対策とプレースホルダの使い方

こんにちは、かつコーチです。「ログインフォームに' OR '1'='1と入力するだけで、誰でもログインできてしまう」こんな話を聞いたことはないでしょうか。これはSQLインジェクション(ユーザーの入力値をそのままSQL文に組み込むことで、意図...
MySQL

【MySQL】ユーザー権限管理:GRANT・REVOKEの基本

こんにちは、かつコーチです。「アプリのDB接続用ユーザーに、うっかりrootを使い続けていませんか」開発中はつい楽なのでrootユーザーで全部済ませてしまいがちですが、これは本番運用ではかなり危険な状態です。もしアプリにSQLインジェクショ...
MySQL

【MySQL】バイナリログの役割とポイントインタイムリカバリ

こんにちは、かつコーチです。前回はmysqldumpによるバックアップとリストアを解説しましたが、mysqldumpだけでは「昨晩0時時点」までしか戻せません。もし障害が発生したのが夜23時だった場合、直近23時間分のデータは失われてしまい...
MySQL

【MySQL】mysqldumpでバックアップ・リストアする方法

こんにちは、かつコーチです。前回はレプリケーションの仕組みを解説しましたが、レプリケーションはあくまで「複製」であり、誤ってデータを消してしまった場合には複製先にも同じ削除が伝わってしまいます。そのため、レプリケーションとは別にバックアップ...
MySQL

【MySQL】MySQLレプリケーションの基本:仕組みとメリット

こんにちは、かつコーチです。「インデックス・パフォーマンス編」が完結し、今回からは「レプリケーション・バックアップ編」です。1本目のテーマは、複数のMySQLサーバー間でデータを複製するレプリケーションの仕組みとメリットです。上級者向けの内...
MySQL

【MySQL】スロークエリログの見方と改善の第一歩

こんにちは、かつコーチです。前回はEXPLAINで個別クエリの実行計画を読む方法を解説しましたが、実務ではまず「どのクエリが遅いのか」を見つけるところから始まります。そこで活躍するのがスロークエリログです。今回は、スロークエリログの有効化か...
MySQL

【MySQL】EXPLAINでMySQLの実行計画を読む

こんにちは、かつコーチです。前回はインデックスの種類を整理しましたが、「インデックスを張ったのに速くならない」という相談は実務でも頻繁に起こります。原因を切り分けるには、MySQLが実際にどうクエリを実行しているかを可視化するEXPLAIN...
MySQL

【MySQL】MySQLのインデックスの種類(B-Tree・フルテキスト・空間インデックス)

こんにちは、かつコーチです。SQL基礎編では「インデックスを張ると検索が速くなる」というところまでお話ししました。ただ、MySQLには用途に応じて何種類かのインデックスが用意されていて、それぞれ得意な検索が違います。今回は「インデックス・パ...
MySQL

【MySQL】JSON型の使い方:半構造化データをMySQLで扱う

こんにちは、かつコーチです。前回はENUM・SET・TEXT系といったMySQL固有のデータ型を解説しました。今回はMySQL 5.7から導入されたJSON型を使って、半構造化データを扱う方法を解説します。JSON型とは?半構造化データを直...
MySQL

【MySQL】MySQL固有のデータ型(ENUM・SET・TEXT系の使い分け)

こんにちは、かつコーチです。アーキテクチャ編では、ストレージエンジンや文字コードの仕組みを解説しました。ここからはデータ型編として、MySQL固有のデータ型に絞って解説します。INT・VARCHARといった基本的な型はSQL基礎編で扱い済み...
MySQL

【MySQL】文字コード・照合順序(utf8mb4)でハマらないために

こんにちは、かつコーチです。前回はMySQLのアーキテクチャ全体像を解説しました。今回は、実務でつまずく人が非常に多い「文字コード」と「照合順序」の話です。絵文字が保存できない、日本語が「?」になる、といったトラブルの多くはここが原因です。...
MySQL

【MySQL】MySQLのアーキテクチャ全体像(サーバーレイヤーとストレージエンジンレイヤー)

こんにちは、かつコーチです。前回はInnoDBとMyISAMというストレージエンジンの違いを扱いました。この記事は上級者向けとして、ストレージエンジンがMySQL全体のどこに位置づけられているのか、アーキテクチャ全体像から解説します。トラン...
MySQL

【MySQL】InnoDBとMyISAMの違い:どちらのストレージエンジンを選ぶか

こんにちは、かつコーチです。入門編ではMySQLのインストールとGUIツールの使い方を解説しました。ここからはアーキテクチャ編として、MySQLの内部の仕組みに踏み込んでいきます。第1回は、MySQLの心臓部とも言えるストレージエンジン、特...
MySQL

【MySQL】MySQL WorkbenchでGUI操作をする基本

こんにちは、かつコーチです。前回はMySQL本体のインストール手順を解説しました。コマンドラインだけでMySQLを操作するのは、慣れないうちはハードルが高く感じるものです。今回は、MySQL公式が提供するGUIツール「MySQL Workb...
MySQL

【MySQL】MySQLのインストールと初期設定

こんにちは、かつコーチです。前回はMySQLがどんなデータベースなのかを解説しました。今回は実際に自分のPCにMySQLをインストールして、使える状態にするまでの手順を解説します。MySQL 8.0系を前提に進めます。インストール方法の選択...
MySQL

【MySQL】MySQLとは?世界で最も使われるOSS RDBMSを初心者向けに解説

こんにちは、かつコーチです。SQL基礎編では、SELECTやJOINといったSQL文法そのものを解説してきました。今回からはMySQLシリーズとして、MySQLという製品ならではの特徴や設定に絞って解説していきます。第1回は「MySQLとは...