- 1 1. はじめに
- 2 2. MySQLの基本操作(初心者向け)
- 3 3. データベースの操作
- 4 4. テーブルの操作
- 5 5. データの操作(CRUD)
- 6 6. ユーザー管理と権限設定
- 7 7. MySQLの便利コマンド(中級者向け)
- 8 8. MySQL トラブルシューティング
- 9 9. 【表付き】MySQL コマンド一覧(保存版)
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)
解決方法:
- パスワードが正しいか確認
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)
解決方法:
- MySQLが起動しているか確認 (
systemctl status mysql
) - 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 |
+--------------------+
※ mysql
や information_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_user
に my_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_user
は INSERT(追加)と 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認証方式の問題
解決策
- パスワードが正しいか確認
mysql -u root -p
- 現在のユーザー権限を確認
SELECT user, host FROM mysql.user;
- パスワードをリセット
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サーバーが停止している
- ポートが変更されている
- ファイアウォールの影響
解決策
- MySQLが起動しているか確認
sudo systemctl status mysql
- MySQLを再起動
sudo systemctl restart mysql
- 接続ポートを指定
mysql -u root -p --port=3306
- ファイアウォールをチェック
sudo ufw allow 3306/tcp
8.2 データベースやテーブルの問題
8.2.1 「Unknown database」エラー
エラー例:
ERROR 1049 (42000): Unknown database 'my_database'
原因
- データベースが存在しない
- データベース名のスペルミス
解決策
- データベース一覧を確認
SHOW DATABASES;
- データベースを作成
CREATE DATABASE my_database;
8.2.2 「Table doesn’t exist」エラー
エラー例:
ERROR 1146 (42S02): Table 'my_database.users' doesn't exist
原因
- テーブルが存在しない
- テーブル名のスペルミス
解決策
- テーブル一覧を確認
SHOW TABLES;
- テーブルを作成
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
原因
- サーバーが異常終了した
- データが破損した
解決策
- テーブルを修復
REPAIR TABLE users;
- データベース全体をチェック
CHECK TABLE users;
8.3 パフォーマンスの問題
8.3.1 「Too many connections」エラー
エラー例:
ERROR 1040 (HY000): Too many connections
原因
- 最大接続数を超えている
解決策
- 現在の接続数を確認
SHOW STATUS LIKE 'Threads_connected';
- 最大接続数を増やす
SET GLOBAL max_connections = 200;
8.3.2 クエリが遅い
原因
- インデックスが設定されていない
- クエリが非効率
解決策
- 実行計画を確認
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
- インデックスを作成
CREATE INDEX email_index ON users(email);
8.4 まとめ
このセクションでは、MySQLで発生しやすいトラブルとその解決策を紹介しました。
- 接続エラー → パスワード・ユーザー権限を確認
- データベース・テーブルの問題 →
SHOW DATABASES
/SHOW TABLES
で確認 - パフォーマンスの問題 →
EXPLAIN
やINDEX
を活用
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)、バックアップ、パフォーマンス管理、トラブルシューティングなど、実践でよく使うコマンドを即座に参照できるように整理しました。