【決定版】MySQL コマンド一覧|初心者から実務で使えるSQLまで徹底解説

目次

1. はじめに

MySQLは、データベース管理システム(DBMS)の中でも広く利用されているオープンソースのリレーショナルデータベースです。特に、Webアプリケーションやエンタープライズシステムで広く活用されています。本記事では、MySQLの基本的なコマンドについて詳しく解説し、初心者から中級者までがスムーズに学べるように構成しています。

1.1 MySQLとは?

MySQLは、リレーショナルデータベース(RDB)を管理するためのソフトウェアです。データはテーブル形式で保存され、SQL(Structured Query Language)を使用してデータを操作します。MySQLは以下のような特徴を持っています。

  • オープンソースであり、誰でも無料で利用可能
  • 高速で軽量な動作が特徴
  • 多くのプログラミング言語と互換性がある(PHP, Python, Java など)
  • 大規模データベースの運用にも対応

1.2 MySQLコマンドを学ぶメリット

MySQLを効率的に利用するためには、基本的なコマンドを理解しておくことが重要です。以下のような利点があります。

  • データ管理の効率化:SQLコマンドを使いこなせば、データの取得・更新・削除が迅速に行える
  • 業務の自動化:スクリプトを活用することで、データベース操作を自動化できる
  • エラー対応がスムーズ:問題が発生した際に、適切なSQLコマンドで解決できる

1.3 本記事で学べること

この記事では、以下の内容について詳しく解説します。

  • MySQLの基本操作(起動・接続・データベース操作)
  • データの追加・取得・更新・削除(CRUD操作)
  • ユーザー管理と権限設定
  • 便利なコマンドやトラブルシューティング

これから順番に、各セクションの詳細な説明に入っていきます。まずは、MySQLの基本操作から見ていきましょう。

2. MySQLの基本操作(初心者向け)

2.1 MySQLの起動と接続

2.1.1 MySQLの起動

MySQLは、サーバープログラムとして動作するため、まずサーバーを起動する必要があります。起動方法はOSによって異なります。

Linux / macOSでの起動

LinuxやmacOSでは、systemctl コマンドを使ってMySQLを起動できます。

sudo systemctl start mysql

MySQLの起動状態を確認する

sudo systemctl status mysql

「active(running)」と表示されていれば、MySQLは正常に起動しています。

Windowsでの起動

Windowsでは、MySQLをサービスとして実行することが多いため、net start コマンドを使用します。

net start mysql

または、XAMPPを使用している場合は、XAMPPのコントロールパネルから「MySQL」を「Start」にすればOKです。

2.1.2 MySQLへの接続

MySQLに接続するためには、mysql コマンドを使用します。基本的な接続コマンドは以下のとおりです。

mysql -u ユーザー名 -p
rootユーザーで接続

初期状態では、root ユーザーが管理者として設定されています。以下のコマンドで接続できます。

mysql -u root -p

Enterキーを押すと、パスワードの入力を求められます。正しいパスワードを入力すれば、MySQLにログインできます。

特定のホストへ接続

リモートのMySQLサーバーに接続する場合は、-h オプションを使います。

mysql -h ホスト名 -u ユーザー名 -p

例えば、192.168.1.100 のMySQLサーバーに接続する場合は、以下のように記述します。

mysql -h 192.168.1.100 -u root -p
ポート番号を指定して接続

MySQLのデフォルトのポート番号は 3306 ですが、変更されている場合は -P オプションで指定できます。

mysql -h 192.168.1.100 -P 3307 -u root -p

2.2 MySQLの基本的なコマンド

MySQLに接続できたら、基本的な操作コマンドを実行してみましょう。

2.2.1 MySQLのバージョンを確認

現在使用しているMySQLのバージョンを確認するには、次のコマンドを実行します。

SELECT VERSION();

2.2.2 現在のデータベースを確認

現在選択されているデータベースを確認するには、次のコマンドを実行します。

SELECT DATABASE();

何も選択されていない場合は NULL が返されます。

2.2.3 利用可能なデータベースの一覧を表示

MySQL内に存在するデータベースを一覧表示するには、次のコマンドを使用します。

SHOW DATABASES;

2.3 よくあるエラーと対処法

2.3.1 「Access denied」エラー

エラー例:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解決方法:
  1. パスワードが正しいか確認
  2. root の権限を確認し、再設定する
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新しいパスワード';
FLUSH PRIVILEGES;

2.3.2 「Can’t connect to MySQL server on ‘localhost’」エラー

エラー例:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
解決方法:
  1. MySQLが起動しているか確認 (systemctl status mysql)
  2. MySQLを再起動する
sudo systemctl restart mysql

2.4 まとめ

このセクションでは、MySQLの起動と接続方法について解説しました。

3. データベースの操作

MySQLでは、データを管理するために データベース(Database) を作成し、その中に テーブル(Table) を配置して情報を整理します。このセクションでは、データベースの作成・選択・一覧表示・削除などの基本的な操作について詳しく解説します。

3.1 データベースの作成

MySQLでデータベースを作成するには、CREATE DATABASE コマンドを使用します。

3.1.1 基本的なデータベースの作成

以下のSQLコマンドを実行すると、新しいデータベース my_database を作成できます。

CREATE DATABASE my_database;
作成成功時のメッセージ
Query OK, 1 row affected (0.01 sec)

3.1.2 すでに存在するデータベースを作成しようとした場合

データベースが既に存在していると、次のようなエラーが表示されます。

ERROR 1007 (HY000): Can't create database 'my_database'; database exists

このエラーを防ぐには、IF NOT EXISTS オプションを使用すると便利です。

CREATE DATABASE IF NOT EXISTS my_database;

このコマンドを実行すると、データベースが存在しない場合のみ作成されます。

3.2 データベースの一覧表示

現在のMySQLサーバー内にあるデータベースを確認するには、SHOW DATABASES コマンドを使用します。

SHOW DATABASES;

出力例:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| my_database       |
| mysql             |
| performance_schema |
| sys               |
+--------------------+

mysqlinformation_schema などのシステムデータベースは、MySQLの管理に必要なものです。

3.3 データベースの選択

MySQLでは、作成したデータベースを選択して使用する必要があります。データベースを指定するには USE コマンドを実行します。

USE my_database;
成功時のメッセージ
Database changed

現在選択されているデータベースを確認するには、以下のコマンドを使用します。

SELECT DATABASE();

出力例:

+------------+
| DATABASE() |
+------------+
| my_database |
+------------+

3.4 データベースの削除

不要になったデータベースを削除するには、DROP DATABASE コマンドを使用します。

DROP DATABASE my_database;

3.4.1 削除前の注意点

  • 削除するとすべてのデータが消えるため注意!
  • 誤って削除しないように、IF EXISTS を付けることも可能です。
DROP DATABASE IF EXISTS my_database;

このコマンドは、my_database が存在しない場合でもエラーを出さずに処理を終了します。

3.5 よくあるエラーと対策

3.5.1 「Access denied for user」エラー

エラー例:

ERROR 1044 (42000): Access denied for user 'user_name'@'localhost' to database 'my_database'
解決策
  • GRANT コマンドを使って権限を付与する
GRANT ALL PRIVILEGES ON my_database.* TO 'user_name'@'localhost';
FLUSH PRIVILEGES;

3.5.2 「Can’t drop database」エラー

エラー例:

ERROR 1010 (HY000): Error dropping database (can't rmdir './my_database', errno: 39)
解決策
  • MySQLを再起動する
sudo systemctl restart mysql
  • my_database のすべてのテーブルを削除してから DROP DATABASE を実行する。

3.6 まとめ

このセクションでは、データベースの作成・選択・一覧表示・削除について学びました。

4. テーブルの操作

データベースを作成した後は、その中にテーブル(Table)を作成してデータを整理する必要があります。テーブルとは、データを格納するための表のようなもので、カラム(列)と行(レコード)で構成されています。

このセクションでは、テーブルの作成・確認・一覧表示・削除などの基本操作を詳しく解説します。

4.1 テーブルの作成

テーブルを作成するには、CREATE TABLE コマンドを使用します。以下のSQLを実行すると、users というテーブルが作成されます。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.1.1 テーブル作成時の各要素の説明

  • id INT AUTO_INCREMENT PRIMARY KEY
  • id カラムは整数型(INT)で、自動的に増加(AUTO_INCREMENT)し、主キー(PRIMARY KEY)として設定。
  • name VARCHAR(50) NOT NULL
  • name カラムは最大50文字の文字列(VARCHAR)で、NOT NULL により必須項目。
  • email VARCHAR(100) UNIQUE NOT NULL
  • email カラムは最大100文字の文字列で、UNIQUE 制約により同じメールアドレスを重複登録不可。
  • created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • created_at カラムは、デフォルト値として現在の日時を自動設定。
成功時のメッセージ
Query OK, 0 rows affected (0.02 sec)

4.2 テーブルの構造を確認

作成したテーブルの構造を確認するには、DESC または SHOW COLUMNS を使用します。

DESC users;

または

SHOW COLUMNS FROM users;

出力例:

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| name       | varchar(50)  | NO   |     | NULL              |                |
| email      | varchar(100) | NO   | UNI | NULL              |                |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

4.3 テーブルの一覧を表示

現在のデータベース内に存在するテーブルの一覧を確認するには、SHOW TABLES コマンドを実行します。

SHOW TABLES;

出力例:

+------------------+
| Tables_in_mydb   |
+------------------+
| users            |
| products         |
| orders           |
+------------------+

4.4 テーブルの削除

不要になったテーブルを削除するには、DROP TABLE コマンドを使用します。

DROP TABLE users;

4.4.1 テーブル削除時の注意点

  • 削除するとデータが完全に消えるため注意!
  • 誤って削除しないように、IF EXISTS を付けるとエラーを防げる。
DROP TABLE IF EXISTS users;
成功時のメッセージ
Query OK, 0 rows affected (0.01 sec)

4.5 テーブルのデータをリセット(全削除)

テーブルの構造はそのままで、中のデータだけを削除したい場合は、TRUNCATE TABLE を使用します。

TRUNCATE TABLE users;
DROP TABLE との違い
  • DROP TABLE はテーブルそのものを削除する。
  • TRUNCATE TABLE はデータのみを削除し、テーブルの構造は保持する。

4.6 よくあるエラーと対策

4.6.1 「Table already exists」エラー

エラー例:

ERROR 1050 (42S01): Table 'users' already exists
解決策
  • 既存のテーブルを確認する
SHOW TABLES;
  • IF NOT EXISTS をつけて作成する
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.6.2 「Unknown table」エラー

エラー例:

ERROR 1051 (42S02): Unknown table 'users'
解決策
  • SHOW TABLES; で対象のテーブルが存在するか確認
  • 存在しない場合は IF EXISTS をつける
DROP TABLE IF EXISTS users;

4.7 まとめ

このセクションでは、MySQLのテーブルの作成・確認・削除の基本操作を解説しました。

5. データの操作(CRUD)

データベースとテーブルを作成した後は、データを適切に追加・取得・更新・削除することが重要です。MySQLでは、データ操作の基本として CRUD(Create, Read, Update, Delete)と呼ばれる4つの操作が行えます。

このセクションでは、データの追加(INSERT)、取得(SELECT)、更新(UPDATE)、削除(DELETE)の方法を詳しく解説します。

5.1 データの追加(INSERT)

テーブルに新しいデータを追加するには、INSERT INTO コマンドを使用します。

5.1.1 基本的なデータの追加

たとえば、users テーブルに新しいユーザーを追加するには、以下のSQLを実行します。

INSERT INTO users (name, email) VALUES ('田中 太郎', 'tanaka@example.com');
成功すると、次のメッセージが表示されます。
Query OK, 1 row affected (0.01 sec)

5.1.2 複数のデータを一括追加

一度に複数のレコードを追加することも可能です。

INSERT INTO users (name, email) VALUES
('佐藤 花子', 'sato@example.com'),
('鈴木 一郎', 'suzuki@example.com'),
('高橋 真由', 'takahashi@example.com');

5.2 データの取得(SELECT)

テーブル内のデータを取得するには、SELECT 文を使用します。

5.2.1 すべてのデータを取得

users テーブルのすべてのデータを取得する場合、以下のSQLを実行します。

SELECT * FROM users;

出力例:

+----+------------+------------------+---------------------+
| id | name       | email            | created_at          |
+----+------------+------------------+---------------------+
|  1 | 田中 太郎  | tanaka@example.com | 2024-02-01 10:00:00 |
|  2 | 佐藤 花子  | sato@example.com  | 2024-02-01 10:01:00 |
|  3 | 鈴木 一郎  | suzuki@example.com | 2024-02-01 10:02:00 |
+----+------------+------------------+---------------------+

5.2.2 特定のカラムだけを取得

特定のカラム(列)だけを表示したい場合は、カラム名を指定します。

SELECT name, email FROM users;

5.2.3 条件を指定してデータを取得

WHERE 句を使用すると、特定の条件に合致するデータのみを取得できます。

SELECT * FROM users WHERE name = '佐藤 花子';

5.2.4 並び替え(ORDER BY)

データを昇順・降順に並び替えるには、ORDER BY を使用します。

昇順(小さい順)

SELECT * FROM users ORDER BY id ASC;

降順(大きい順)

SELECT * FROM users ORDER BY id DESC;

5.2.5 データの件数を制限(LIMIT)

最初の2件のみ取得する場合:

SELECT * FROM users LIMIT 2;

5.3 データの更新(UPDATE)

テーブル内のデータを更新するには、UPDATE 文を使用します。

5.3.1 指定したデータを更新

例えば、id = 2 のユーザーのメールアドレスを変更するには、以下のSQLを実行します。

UPDATE users SET email = 'sato_hanako@example.com' WHERE id = 2;

5.3.2 複数のカラムを同時に更新

UPDATE users SET name = '佐藤 美咲', email = 'misaki@example.com' WHERE id = 2;

5.3.3 条件を指定しないと全件更新される

注意! WHERE 句を指定しないと、すべてのデータが更新されてしまいます。

UPDATE users SET email = 'test@example.com';  -- ⚠️ すべてのユーザーのメールが変更される

5.4 データの削除(DELETE)

不要なデータを削除するには、DELETE FROM 文を使用します。

5.4.1 指定したデータを削除

id = 3 のユーザーを削除するには、以下のSQLを実行します。

DELETE FROM users WHERE id = 3;

5.4.2 すべてのデータを削除

注意! WHERE 句を省略すると、テーブル内のすべてのデータが削除されます。

DELETE FROM users;  -- ⚠️ 全データ削除(危険!)

すべて削除する場合は、TRUNCATE TABLE を推奨

TRUNCATE TABLE users;

DELETE は行ごとに削除処理を行いますが、TRUNCATE TABLE はテーブルを初期化するため、高速です。

5.5 まとめ

このセクションでは、データの追加(INSERT)、取得(SELECT)、更新(UPDATE)、削除(DELETE)の基本的な操作を学びました。

6. ユーザー管理と権限設定

MySQLでは、データベースのセキュリティを確保するために、ユーザーごとに適切な権限を設定することが重要です。特に、複数の開発者が関わるプロジェクトや、本番環境のデータベースでは、ユーザー管理が不可欠です。

このセクションでは、MySQLのユーザー管理と権限設定について詳しく解説します。

6.1 MySQLのユーザー管理

MySQLのユーザー情報は、mysql データベースの user テーブルに格納されています。ユーザー管理の基本として、ユーザーの作成・一覧表示・削除の方法を学びましょう。

6.1.1 ユーザーの作成

新しいユーザーを作成するには、CREATE USER コマンドを使用します。

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';

このコマンドの意味:

  • new_user というユーザーを作成
  • localhost(ローカル接続のみ許可)
  • password123 をパスワードとして設定
リモートアクセス用のユーザーを作成

サーバー外からMySQLにアクセスする場合は、'%' を指定します。

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'securepassword';

%すべてのIPアドレスからのアクセスを許可することを意味します。

6.2 ユーザーの一覧表示

作成済みのユーザー一覧を確認するには、mysql.user テーブルを参照します。

SELECT user, host FROM mysql.user;

出力例:

+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | localhost |
| new_user  | localhost |
| remote_user | %       |
+-----------+-----------+

この表では、各ユーザーの user(ユーザー名)と host(接続可能なホスト)を確認できます。

6.3 ユーザーの削除

不要なユーザーを削除するには、DROP USER コマンドを使用します。

DROP USER 'new_user'@'localhost';
削除後の注意点
  • ユーザーを削除すると、そのユーザーの権限も削除されます。
  • 誤って削除した場合は、再度 CREATE USER で作成する必要があります。

6.4 権限の管理

MySQLでは、ユーザーごとに権限を設定し、操作できる範囲を制限することができます。

6.4.1 権限の付与(GRANT)

ユーザーに特定の権限を与えるには、GRANT コマンドを使用します。

GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';

このコマンドは、new_usermy_database のすべての権限を付与します。

特定の権限のみを付与
GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'new_user'@'localhost';

このコマンドでは、new_userデータの取得(SELECT)、挿入(INSERT)、更新(UPDATE) のみを許可しています。

6.5 権限の確認

ユーザーの権限を確認するには、SHOW GRANTS コマンドを使用します。

SHOW GRANTS FOR 'new_user'@'localhost';

出力例:

+------------------------------------------------------------+
| Grants for new_user@localhost                              |
+------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'new_user'@'localhost' |
+------------------------------------------------------------+

6.6 権限の削除(REVOKE)

ユーザーから特定の権限を取り消すには、REVOKE コマンドを使用します。

REVOKE INSERT, UPDATE ON my_database.* FROM 'new_user'@'localhost';

このコマンドを実行すると、new_userINSERT(追加)と UPDATE(更新) の権限を失います。

6.7 パスワードの変更

6.7.1 ユーザーのパスワードを変更

MySQLユーザーのパスワードを変更するには、ALTER USER を使用します。

ALTER USER 'new_user'@'localhost' IDENTIFIED BY 'newpassword123';

6.7.2 rootユーザーのパスワードを変更

管理者(root)のパスワードを変更するには、以下のコマンドを実行します。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'strongpassword';

パスワードを変更した後は、権限を適用するために FLUSH PRIVILEGES を実行します。

FLUSH PRIVILEGES;

6.8 よくあるエラーと対策

6.8.1 「Access denied」エラー

エラー例:

ERROR 1045 (28000): Access denied for user 'new_user'@'localhost' (using password: YES)
解決策
  • SHOW GRANTS で権限を確認
SHOW GRANTS FOR 'new_user'@'localhost';
  • 権限を再付与
GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;

6.8.2 「User already exists」エラー

エラー例:

ERROR 1396 (HY000): Operation CREATE USER failed for 'new_user'@'localhost'
解決策
  • すでに存在する場合は、削除してから再作成
DROP USER 'new_user'@'localhost';
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';

6.9 まとめ

このセクションでは、MySQLのユーザー管理と権限設定について詳しく解説しました。
特に重要なポイント:

  • CREATE USER でユーザー作成
  • GRANT で権限を付与
  • SHOW GRANTS で権限を確認
  • ALTER USER でパスワード変更

 

7. MySQLの便利コマンド(中級者向け)

MySQLには、基本的なデータ操作(CRUD)以外にも、データベースの管理や最適化をサポートする便利なコマンドが多数用意されています。このセクションでは、データベースのバックアップ・復元、パフォーマンスの最適化、システム情報の確認など、中級者向けのMySQLコマンドを紹介します。

7.1 データベースのバックアップ

データの損失を防ぐために、MySQLではバックアップ(エクスポート)復元(インポート)ができます。

7.1.1 mysqldump を使ったバックアップ

mysqldump コマンドを使用すると、特定のデータベースのバックアップを取得できます。

mysqldump -u root -p my_database > my_database_backup.sql
オプションの説明
  • -u root → root ユーザーで実行
  • -p → パスワードを入力
  • my_database → バックアップするデータベース名
  • > → 出力先のファイル(例: my_database_backup.sql

7.1.2 すべてのデータベースをバックアップ

すべてのデータベースを一括バックアップするには、--all-databases オプションを使用します。

mysqldump -u root -p --all-databases > all_databases_backup.sql

7.2 データベースの復元

バックアップデータをMySQLに復元するには、mysql コマンドを使用します。

7.2.1 単一データベースを復元

mysql -u root -p my_database < my_database_backup.sql

7.2.2 すべてのデータベースを復元

mysql -u root -p < all_databases_backup.sql

7.3 実行中のプロセスの確認

MySQLサーバーの負荷状況や、どのクエリが実行されているかを確認するには、SHOW PROCESSLIST を使用します。

SHOW PROCESSLIST;

出力例:

+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host      | db | Command | Time | State    | Info             |
+----+------+-----------+----+---------+------+----------+------------------+
|  1 | root | localhost | my_database | Query  |    10 | Sending data | SELECT * FROM users |
+----+------+-----------+----+---------+------+----------+------------------+

7.3.1 現在実行中のすべてのプロセスを詳細に表示

SHOW FULL PROCESSLIST;

7.4 クエリの最適化

7.4.1 実行計画を確認(EXPLAIN)

EXPLAIN コマンドを使用すると、クエリの実行計画を確認し、パフォーマンスの問題を特定できます。

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

出力例:

+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
|  1 | SIMPLE      | users | ref  | email_index   | email| 62      | const |    1 |       |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
  • possible_keys:使用可能なインデックス
  • key:実際に使用されたインデックス
  • rows:検索対象となった行数(少ないほど高速)

7.5 インデックスの確認

データ量が増えると検索が遅くなることがあります。そのため、インデックスを適切に設定することが重要です。

7.5.1 現在のインデックスを確認

テーブルのインデックス一覧を取得するには、SHOW INDEX を使用します。

SHOW INDEX FROM users;

出力例:

+-------+------------+----------+--------------+-----------------+-----------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name     | Index_type|
+-------+------------+----------+--------------+-----------------+-----------+
| users |          0 | PRIMARY  |            1 | id              | BTREE     |
| users |          1 | email    |            1 | email           | BTREE     |
+-------+------------+----------+--------------+-----------------+-----------+

7.6 データベースの状態を確認

7.6.1 MySQLのバージョンを確認

現在のMySQLのバージョンを確認するには、以下のコマンドを実行します。

SELECT VERSION();

出力例:

+-----------+
| VERSION() |
+-----------+
| 8.0.32    |
+-----------+

7.6.2 データベースのサイズを確認

各データベースのサイズを確認するには、以下のクエリを実行します。

SELECT table_schema AS "Database", 
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.tables
GROUP BY table_schema;

出力例:

+---------------+-----------+
| Database      | Size (MB) |
+---------------+-----------+
| my_database   |     45.23 |
| mysql         |      2.10 |
+---------------+-----------+

7.7 まとめ

このセクションでは、MySQLの中級者向けの便利コマンドを紹介しました。
特に重要なのは:

  • データベースのバックアップ・復元(mysqldump, mysql)
  • 実行中のプロセスの確認(SHOW PROCESSLIST)
  • クエリの最適化(EXPLAIN)
  • インデックスの管理(SHOW INDEX)
  • データベースの状態確認(情報スキーマのクエリ)

8. MySQL トラブルシューティング

MySQLを使用していると、接続エラーやパフォーマンスの問題など、さまざまなトラブルに直面することがあります。このセクションでは、よくあるMySQLのエラーとその解決策を紹介します。

8.1 MySQLに接続できない場合

8.1.1 「Access denied for user」エラー

エラー例:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
原因
  • パスワードが間違っている
  • ユーザーに適切な権限がない
  • MySQL認証方式の問題
解決策
  1. パスワードが正しいか確認
mysql -u root -p
  1. 現在のユーザー権限を確認
SELECT user, host FROM mysql.user;
  1. パスワードをリセット
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

8.1.2 「Can’t connect to MySQL server on ‘localhost’」エラー

エラー例:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
原因
  • MySQLサーバーが停止している
  • ポートが変更されている
  • ファイアウォールの影響
解決策
  1. MySQLが起動しているか確認
sudo systemctl status mysql
  1. MySQLを再起動
sudo systemctl restart mysql
  1. 接続ポートを指定
mysql -u root -p --port=3306
  1. ファイアウォールをチェック
sudo ufw allow 3306/tcp

8.2 データベースやテーブルの問題

8.2.1 「Unknown database」エラー

エラー例:

ERROR 1049 (42000): Unknown database 'my_database'
原因
  • データベースが存在しない
  • データベース名のスペルミス
解決策
  1. データベース一覧を確認
SHOW DATABASES;
  1. データベースを作成
CREATE DATABASE my_database;

8.2.2 「Table doesn’t exist」エラー

エラー例:

ERROR 1146 (42S02): Table 'my_database.users' doesn't exist
原因
  • テーブルが存在しない
  • テーブル名のスペルミス
解決策
  1. テーブル一覧を確認
SHOW TABLES;
  1. テーブルを作成
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

8.2.3 「Table is marked as crashed」エラー

エラー例:

Table 'users' is marked as crashed and should be repaired
原因
  • サーバーが異常終了した
  • データが破損した
解決策
  1. テーブルを修復
REPAIR TABLE users;
  1. データベース全体をチェック
CHECK TABLE users;

8.3 パフォーマンスの問題

8.3.1 「Too many connections」エラー

エラー例:

ERROR 1040 (HY000): Too many connections
原因
  • 最大接続数を超えている
解決策
  1. 現在の接続数を確認
SHOW STATUS LIKE 'Threads_connected';
  1. 最大接続数を増やす
SET GLOBAL max_connections = 200;

8.3.2 クエリが遅い

原因
  • インデックスが設定されていない
  • クエリが非効率
解決策
  1. 実行計画を確認
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
  1. インデックスを作成
CREATE INDEX email_index ON users(email);

8.4 まとめ

このセクションでは、MySQLで発生しやすいトラブルとその解決策を紹介しました。

  • 接続エラー → パスワード・ユーザー権限を確認
  • データベース・テーブルの問題SHOW DATABASES / SHOW TABLES で確認
  • パフォーマンスの問題EXPLAININDEX を活用

9. 【表付き】MySQL コマンド一覧(保存版)

本セクションでは、これまで紹介したMySQLの主要なコマンドを一覧表としてまとめます。各カテゴリごとに分けているため、すぐに使いたいコマンドを簡単に見つけることができます。

9.1 基本操作コマンド

コマンド説明
SELECT VERSION();MySQLのバージョンを確認
SHOW DATABASES;データベース一覧を表示
SHOW TABLES;現在のデータベース内のテーブルを表示
SELECT DATABASE();現在使用しているデータベースを確認
USE my_database;指定したデータベースを選択
DESC users;テーブルの構造を表示

9.2 データベースの操作

コマンド説明
CREATE DATABASE my_database;新しいデータベースを作成
DROP DATABASE my_database;データベースを削除
SHOW CREATE DATABASE my_database;データベースの作成SQLを表示

9.3 テーブルの操作

コマンド説明
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));テーブルを作成
DROP TABLE users;テーブルを削除
ALTER TABLE users ADD COLUMN email VARCHAR(100);新しいカラムを追加
ALTER TABLE users DROP COLUMN email;指定したカラムを削除
SHOW CREATE TABLE users;テーブルの作成SQLを表示

9.4 データの操作(CRUD)

コマンド説明
INSERT INTO users (name) VALUES ('田中');データを追加
SELECT * FROM users;すべてのデータを取得
SELECT name FROM users WHERE id = 1;条件を指定してデータを取得
UPDATE users SET name = '佐藤' WHERE id = 1;データを更新
DELETE FROM users WHERE id = 1;データを削除
TRUNCATE TABLE users;テーブル内のすべてのデータを削除

9.5 ユーザー管理と権限設定

コマンド説明
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';ユーザーを作成
DROP USER 'new_user'@'localhost';ユーザーを削除
GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';ユーザーに権限を付与
REVOKE INSERT ON my_database.* FROM 'new_user'@'localhost';指定の権限を取り消し
SHOW GRANTS FOR 'new_user'@'localhost';ユーザーの権限を確認

9.6 バックアップと復元

コマンド説明
mysqldump -u root -p my_database > backup.sqlデータベースのバックアップ
mysql -u root -p my_database < backup.sqlバックアップから復元

9.7 パフォーマンスと最適化

コマンド説明
SHOW PROCESSLIST;現在実行中のクエリを表示
SHOW STATUS LIKE 'Threads_connected';現在の接続数を確認
SHOW INDEX FROM users;インデックスの一覧を表示
CREATE INDEX idx_name ON users(name);インデックスを作成
ANALYZE TABLE users;テーブルの統計情報を更新
OPTIMIZE TABLE users;テーブルを最適化

9.8 トラブルシューティング

コマンド説明
SET GLOBAL max_connections = 200;最大接続数を変更
REPAIR TABLE users;クラッシュしたテーブルを修復
FLUSH PRIVILEGES;権限の変更を適用

9.9 まとめ

このセクションでは、MySQLの重要なコマンドを一覧表としてまとめました。特に、データ操作(CRUD)、バックアップ、パフォーマンス管理、トラブルシューティングなど、実践でよく使うコマンドを即座に参照できるように整理しました。