MySQL

HOMELinuxtips > MySQL

MySQL:記事リスト

MySQLのカテゴリーには以下の記事がリストされています。

MySQLが起動しない・ソケットに接続できないときの調査手順|ERROR 2002の原因切り分け

「mysqlコマンドを打ったら ERROR 2002 が出た。ソケットに接続できないって何?」
MySQLに接続しようとして、こんなエラーに出くわしたことはないでしょうか。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

何度 mysql -u root -p を叩いても同じエラーが返ってくる——そんな状況で何から調べればよいか、迷っている方は多いはずです。

ERROR 2002 が示しているのは、「クライアントが参照しようとしたUNIXソケットファイルが存在しない、またはパスが食い違っている」という事実です。原因は大きく2つに絞られます。

mysqldプロセスが停止している——起動していないのでソケットファイルが生成されない
ソケットファイルのパスが食い違っている——mysqldは動いているが、クライアントが探すパスとサーバーが実際に使うパスが一致していない

この記事では、この2つの原因を3ステップで切り分けてピンポイントで対処する手順を解説します。ERROR 1045(パスワード認証失敗)やERROR 2003(TCP/IP接続失敗)とは別の障害事象ですので、それらを期待している方はご注意ください。

動作確認環境:Rocky Linux 9.4 / RHEL 9.4(MySQL 8.0・8.4)、Ubuntu 24.04 LTS(MySQL 8.0)

この記事のポイント

・ERROR 2002はソケットファイルが未生成またはパス不一致を示す
・まずsystemctlでmysqldが起動しているか確認する
・my.cnfのsocket設定とfindコマンドで実際のパスと突き合わせる
・journalctlのエラーログで権限不足・未初期化・InnoDB障害を特定する

続きを読む "MySQLが起動しない・ソケットに接続できないときの調査手順|ERROR 2002の原因切り分け"

MySQLの文字コードをutf8mb4へ移行する手順|照合順序の選定と既存テーブルの変換

「MySQLに絵文字を保存しようとしたら文字化けした」「utf8mb4への移行で照合順序は何を選べばいい?」
既存DBをそのままにしてutf8mb4に移行しようとすると、設定ファイルの変更だけでは足りず、既存のデータベースとテーブルに対してALTER TABLE文を実行する必要があります。この手順を飛ばすと、新しく作成したテーブルだけが変換され、古いテーブルは旧charset(utf8)のまま混在する状態になります。

この記事では、MySQL 5.7・8.0共通のutf8mb4移行手順を、照合順序の選定から既存テーブルの一括変換まで順番に解説します。動作確認環境はRHEL 9.4 / Ubuntu 24.04 LTS(MySQL 8.0.40)です。

この記事のポイント

・MySQLの「utf8」は3バイト文字までで、絵文字など4バイト文字はutf8mb4が必要
・照合順序は5.7系ならutf8mb4_unicode_ci、8.0系ならutf8mb4_0900_ai_ciが推奨
・my.cnf変更後、既存DBとテーブルにALTER TABLEで変換しないと混在状態になる
・CONVERT TO CHARACTER SET文でテーブル内の全カラムを一括変換できる

続きを読む "MySQLの文字コードをutf8mb4へ移行する手順|照合順序の選定と既存テーブルの変換"

MySQLのスロークエリログを有効化して遅いSQLを特定する方法|出力設定からmysqldumpslowとEXPLAINまで

「SQLの実行が遅いと怒られているのに、どのクエリが原因か特定できない」「アプリのレスポンスが落ちているが、DBのどこにボトルネックがあるか根拠となるデータがない」

こういった状況は、MySQLを自前運用しているサーバー管理者なら一度は経験するはずです。MySQLにはスロークエリログという標準の診断機能があり、設定を有効にしておくだけで閾値を超えた遅いSQLを自動的にファイルへ記録してくれます。

この記事では、スロークエリログを有効化するための設定方法から、mysqldumpslowコマンドによるログの集計・分析、EXPLAINを使った実行計画の読み方とインデックス改善の基本まで、Linuxサーバー上でのMySQL自前運用(セルフホスト)を前提に解説します。RDS等のマネージドDBは扱いません。

動作確認環境: Rocky Linux 9.5(Kernel 5.14.0-503.el9.x86_64)/ MySQL 8.4.5 LTS

この記事のポイント

・スロークエリログはmy.cnfにslow_query_log=ONを追記するだけで有効化できる
・long_query_timeを1秒に設定すると実用的な閾値になる(デフォルト10秒は見逃しが多い)
・mysqldumpslow -s t -t 10でボトルネックSQLを合計実行時間の多い順に絞り込める
・EXPLAINのtype=ALLは全件スキャンを意味し、インデックス追加で劇的に改善できる

続きを読む "MySQLのスロークエリログを有効化して遅いSQLを特定する方法|出力設定からmysqldumpslowとEXPLAINまで"

Linuxサーバーに自前でMySQLを導入する手順|公式リポジトリの登録から初期セキュア設定・自動起動まで

「MySQLをLinuxサーバーに自前で入れたいが、どのリポジトリを使えばよいか分からない」「aptやdnfでインストールしたら古いバージョンが入ってしまった」

こういった経験は珍しくありません。MySQLのインストール自体は難しくありませんが、リポジトリ選択・GPGキーの確認・初期セキュア設定と、現場で詰まりやすいポイントが複数あります。ディストリビューションのデフォルトリポジトリに頼ると、MySQL本体ではなくMariaDBが入ったり、MySQL 8.0のままEOL後も使い続けるはめになったりします。

この記事では、MySQL公式リポジトリを使ったMySQL 8.4 LTS(Long Term Support)の導入手順を、Rocky Linux 9(dnf系)とUbuntu 24.04 LTS(apt系)の両OSに対応する形で解説します。初期セキュア設定(mysql_secure_installation)からsystemctlによる自動起動設定・文字コード確認まで、実際のコマンド出力を交えて一通りカバーします。

この記事のポイント

・MySQL公式リポジトリを使えば最新の8.4 LTSを確実に導入できる
・Rocky Linux 9はdnf、Ubuntu 24.04 LTSはapt、手順は違うが考え方は同じ
・mysql_secure_installationで匿名ユーザーとテストDBを必ず削除する
・systemctl enable --now mysqldで起動と自動起動を1コマンドで同時に設定できる


Linuxサーバーに自前でMySQLを導入する手順|公式リポジトリの登録から初期セキュア設定・自動起動まで

続きを読む "Linuxサーバーに自前でMySQLを導入する手順|公式リポジトリの登録から初期セキュア設定・自動起動まで"

mysqldumpコマンドでMySQLデータベースをバックアップする方法|フルバックアップから特定テーブル・リストアまで

「MySQLのバックアップって、どうやればいいんだろう」
「mysqldumpを実行したが、本当にリストアできるのか不安だ」

サーバー管理を始めると、必ずぶつかるのがデータベースのバックアップ設計です。ファイルのバックアップと違い、DBはエンジンのファイルをそのままコピーするだけでは壊れるリスクがあります。

この記事では、mysqldump コマンドの実践的な使い方を解説します。
フルバックアップの取り方、特定テーブルだけのダンプ、圧縮・自動化・リストアの手順まで、RHEL 9.4 / Ubuntu 24.04 LTS で動作確認した内容をもとに説明します。

この記事のポイント

・mysqldump は MySQL/MariaDB 標準のダンプツールで追加インストール不要
・フルバックアップには --single-transaction と --events オプションが安全
・リストアは mysql コマンドでリダイレクト入力するだけでできる
・cronと圧縮を組み合わせた自動バックアップが実務の基本形

続きを読む "mysqldumpコマンドでMySQLデータベースをバックアップする方法|フルバックアップから特定テーブル・リストアまで"

MySQLでユーザー一覧を表示する方法|mysql.userの確認とCURRENT_USERの活用

「MySQLでユーザーの一覧を確認したいのに、SHOW USERSと打ったらエラーになった」
MySQL入門者が必ず一度は通る道です。MySQLには SHOW DATABASESSHOW TABLES がありますが、SHOW USERS というコマンドは存在しません。

この記事では、mysql.user テーブルから正しくユーザー一覧を取得する方法と、現在ログイン中のユーザーを確認する CURRENT_USER 関数、さらに権限確認の SHOW GRANTS まで、実務で必要な操作をまとめて解説します。MariaDBとの違いも含めて対応します。

動作確認環境:MySQL 8.0.36 / MariaDB 10.11(RHEL 9.4 / Ubuntu 24.04 LTS)

この記事のポイント

・MySQLに「SHOW USERS」はない。SELECT User, Host FROM mysql.user を使う
CURRENT_USER() で現在のセッションのユーザーを即座に確認できる
SHOW GRANTS FOR 'user'@'host' で付与された権限を確認する
・アカウントロック中ユーザーは account_locked='Y' で絞り込める

続きを読む "MySQLでユーザー一覧を表示する方法|mysql.userの確認とCURRENT_USERの活用"

MySQLで指定したカラム名を持つテーブルを検索する|information_schemaを使ったDB横断検索

「特定のカラム名を持つテーブルが、どのDBのどこに存在するかわからない」
「テーブル定義を直接見ても、目的のカラムが見つからない」
DBA経験のあるエンジニアなら一度は遭遇する場面です。

この記事では、MySQLで指定したカラム名を持つテーブルを検索する方法を、information_schemaを使った実コマンド付きで解説します。MySQL 5.7 / MySQL 8.0 / MariaDB 10.x で動作確認済みのSQLです。

この記事のポイント

・information_schema.columnsをSELECTすればMySQL内のカラム検索が一発でできる
・table_schemaを条件に加えると、特定データベースに絞った検索が可能
・LIKE演算子で部分一致検索(user_%・%_idなど)にも対応
・MariaDB / MySQL 8.0 でも同じSQLがそのまま動く(標準化済みのスキーマ)

続きを読む "MySQLで指定したカラム名を持つテーブルを検索する|information_schemaを使ったDB横断検索"

MySQLのrootパスワードを忘れた場合の対処について

MySQLはオープンソースのデータベースソフトになります。 無料で利用できるデータベースソフトとしてPostgreSQLがありますが、 それと人気を二分するデータベースソフトです。 人気の理由は高性能且つ高速で、しかも操作が比較的簡単な上、 Movable TypeやXoopsなど多くのウェブサイト構築ソフトウェアが サポートしているためです。またMySQLを利用する事でLAMP環境が 構築出来ます。 ※LAMPとはLinux、Apache、 MySQL、 PHPの略称 今回はそのMySQL専用のrootパスワードを忘れてしまった場合の 対処方法をご紹介します。
【この記事でわかること】
・MySQL を --skip-grant-tables オプションで起動することで認証をバイパスできる
・ALTER USER または UPDATE mysql.user でパスワードを変更し、flush privileges を実行する
・5.7 以降は authentication_plugin が caching_sha2_password に変わった点に注意が必要
・パスワード変更後は必ず通常モードで再起動して接続確認を行う

続きを読む "MySQLのrootパスワードを忘れた場合の対処について"

Linux無料マニュアル(図解60P) 名前とメールで30秒登録