すぐに使えるMySQL CLI入門:接続方法と実践テクニック


すぐに使えるMySQL CLI入門:接続方法と実践テクニック

データベース操作と聞いて、多くの人がGUIツールを思い浮かべるかもしれません。しかし、MySQLを深く理解し、効率的に操作するためには、コマンドラインインターフェース(CLI)の習得が不可欠です。CLIは、高速な操作、バッチ処理、自動化、リモートサーバーへのアクセスなど、GUIツールにはない多くのメリットを提供します。

この記事では、MySQL CLIの基本的な接続方法から、日常的なデータベース操作、さらには効率化やトラブルシューティングに役立つ実践的なテクニックまでを、初心者の方にも分かりやすく詳細に解説します。この記事を読めば、MySQL CLIをすぐに使いこなし、データベースとの対話がよりスムーズになるでしょう。

対象読者:

  • MySQLを使い始めた方
  • GUIツールだけでなく、CLIでの操作も習得したい方
  • より効率的にデータベース操作を行いたい方
  • Linux/Unix系のコマンド操作に慣れている方(必須ではありませんが、馴染みやすいです)

はじめに:なぜMySQL CLIなのか?

MySQL CLI、具体的にはmysqlコマンドは、MySQLサーバーと直接対話するための強力なツールです。GUIツール(例: MySQL Workbench, phpMyAdmin)は直感的で分かりやすいですが、CLIには以下の点で優位性があります。

  1. 高速性: GUIの起動や操作に比べて、CLIからのコマンド実行は非常に高速です。
  2. 自動化とスクリプト化: CLIコマンドはシェルスクリプトに組み込むことが容易です。これにより、定型的な作業(バックアップ、データメンテナンス、レポート生成など)を自動化できます。
  3. リモート操作: SSHなどでリモートサーバーにログインし、直接MySQLサーバーを操作する場合、CLIが最も一般的な方法です。GUIツールをリモートサーバーにインストールする必要はありません。
  4. 柔軟性: GUIツールでは提供されない高度なオプションや、特定の環境設定が必要な場合に、CLIは細かな制御を提供します。
  5. 学習: データベースの内部動作やSQLの理解を深める上で、CLIでの直接的な操作は非常に役立ちます。

もちろん、GUIツールにもメリット(視覚的なデータの確認、ER図の作成など)があり、CLIとGUIは互いに補完し合う関係です。しかし、プロフェッショナルとしてMySQLを扱う上で、CLIの習得は必須と言えるでしょう。

それでは、MySQL CLIの世界へ踏み込んでいきましょう。

第1部: MySQL CLIの基本

このセクションでは、MySQL CLIを使用するための準備から、サーバーへの基本的な接続、そして接続後の簡単な操作方法を学びます。

1.1 MySQL CLIのインストールと確認

MySQL CLI (mysqlコマンド) は、通常、MySQLサーバー本体、またはMySQLクライアントパッケージに含まれています。多くのオペレーティングシステムでは、パッケージマネージャーを使って簡単にインストールできます。

  • Linux (Debian/Ubuntu系):
    bash
    sudo apt update
    sudo apt install mysql-client
  • Linux (RHEL/CentOS/Fedora系):
    bash
    sudo yum install mysql
    # または新しいバージョンで mariadb-connector-c-devel などクライアント関連パッケージ
    sudo dnf install mysql-client # Fedoraなど
  • macOS (Homebrew使用):
    Homebrewがインストール済みであれば、MySQLサーバーと一緒にインストールされるか、クライアントのみをインストールできます。
    bash
    brew install mysql-client
  • Windows:
    MySQL Installer for Windows を使用して、「Client only」オプションを選択してインストールします。インストール時に、MySQLの実行ファイル(mysql.exeなど)へのパスを環境変数PATHに追加することを推奨します。

インストール後、ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行してmysqlコマンドが利用可能か、およびそのバージョンを確認します。

bash
which mysql
mysql --version

which mysqlmysqlコマンドのインストール場所を表示し、mysql --version はインストールされているクライアントのバージョンを表示します。これらのコマンドが正しく動作すれば、CLIを使用する準備は完了です。

もしcommand not foundのようなエラーが表示される場合は、インストールが失敗しているか、環境変数PATHが正しく設定されていない可能性があります。Windowsの場合は、MySQLのインストールディレクトリ内のbinフォルダへのパスをPATHに追加してください。

1.2 MySQLサーバーへの接続

MySQLサーバーへ接続するための基本的なコマンドは以下の形式です。

bash
mysql -u <ユーザー名> -p

  • -u <ユーザー名>: 接続に使用するユーザー名を指定します。MySQLのユーザーは通常、ユーザー名とホスト名の組み合わせ(例: 'myuser'@'localhost', 'myuser'@'%')で識別されますが、接続時にはユーザー名のみを指定することが一般的です。
  • -p: パスワードの入力を求められます。

このコマンドを実行すると、パスワード入力プロンプトが表示されます。

Enter password:

ここにパスワードを入力してEnterキーを押します。パスワードを入力しても画面には何も表示されませんが、これはセキュリティ上の正常な動作です。正しく入力できれば、MySQLのプロンプトが表示されます。

“`
Welcome to the MySQL monitor. Commands end with ; or \g.
… (バージョン情報などのメッセージ) …

mysql>
“`

これでMySQLサーバーへの接続に成功しました。mysql> がCLIのプロンプトです。

ホスト名とポート番号の指定

デフォルトでは、mysqlコマンドはローカルホスト(localhost または 127.0.0.1)上のデフォルトポート(3306)で実行されているMySQLサーバーに接続しようとします。異なるホストやポートに接続する場合は、以下のオプションを使用します。

bash
mysql -h <ホスト名またはIPアドレス> -P <ポート番号> -u <ユーザー名> -p

  • -h <ホスト名またはIPアドレス>: 接続先のMySQLサーバーのホスト名またはIPアドレスを指定します。リモートサーバーに接続する場合などに使用します。
  • -P <ポート番号>: 接続先のMySQLサーバーがリッスンしているポート番号を指定します。デフォルトの3306以外を使用している場合に使用します。

パスワード入力の注意点

セキュリティ上の理由から、パスワードはコマンドラインに直接書かないことが強く推奨されます。以下の形式は避けるべきです。

“`bash

これは避けるべき!

mysql -u myuser -ppassword
“`

この形式だと、パスワードがコマンド履歴に残ったり、psコマンドなどで他のユーザーに見えてしまう可能性があります。安全のため、パスワード入力が必要な場合は必ず -p オプションのみを使用し、プロンプトでの入力を利用してください。

設定ファイル (~/.my.cnf) を利用した自動接続

毎回ユーザー名、ホスト名、ポート番号などをコマンドラインで指定するのは面倒です。また、パスワードをプロンプトで入力する手間も省きたい場合があります(ただし、セキュリティ上のトレードオフがあります)。

MySQLクライアントは、設定ファイルから接続情報を読み込むことができます。最も一般的な設定ファイルは、ホームディレクトリにある .my.cnf です(Linux/macOSの場合)。

  1. ホームディレクトリに .my.cnf という名前のファイルを作成します。
    bash
    cd ~
    nano .my.cnf # または vi エディタなど

  2. ファイルに以下の内容を記述します。

    ini
    [mysql]
    user = your_username
    password = your_password
    host = your_host # 必要に応じて
    port = your_port # 必要に応じて
    database = your_database # 必要に応じて、接続時にデフォルトで選択したいデータベース

    <your_username>, <your_password>, <your_host>, <your_port>, <your_database> を実際の情報に置き換えてください。

  3. 重要: 設定ファイルにパスワードを記述する場合、そのファイルが他のユーザーから読み取られないように、適切な権限を設定する必要があります。これは非常に重要です。

    bash
    chmod 600 ~/.my.cnf

    このコマンドは、ファイルの所有者(あなた自身)のみがファイルを読み書きでき、他のユーザーは一切アクセスできないように権限を設定します。

これで、単に mysql とコマンドを実行するだけで、.my.cnf ファイルから情報を読み込んで自動的に接続できるようになります(パスワードも自動入力されます)。特定のデータベースに接続したい場合は、.my.cnfdatabase オプションを追加するか、mysql <データベース名> と実行します。

ただし、設定ファイルにパスワードを記述することは、ファイル自体が漏洩した場合のリスクを伴います。このリスクを理解した上で利用してください。より安全な方法としては、パスワードは設定ファイルに書かず、-p オプションでプロンプト入力を利用する方法もあります。この場合、.my.cnf には user, host, port などパスワード以外の情報を記述します。

特定のデータベースへの直接接続

接続時に特定のデータベースをデフォルトで選択したい場合は、コマンドの最後にデータベース名を指定します。

bash
mysql -u <ユーザー名> -p <データベース名>

または、.my.cnf ファイルに database = <データベース名> と記述しておきます。

1.3 接続後の基本的な操作

MySQLプロンプト (mysql>) に接続できたら、いよいよデータベースへの操作を開始できます。操作は基本的にSQL(Structured Query Language)コマンドを入力して行います。

SQLコマンドの実行

SQLコマンドを入力し、最後にセミコロン (;) を付けてEnterキーを押すと、コマンドが実行されます。

例:利用可能なデータベースの一覧を表示する

sql
mysql> SHOW DATABASES;

実行結果はターミナルに表示されます。

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| your_database_name |
+--------------------+
5 rows in set (0.01 sec)

コマンドの区切り文字 (;)

SQLコマンドはセミコロン (;) で区切られます。これは、複数のコマンドを続けて入力する場合や、コマンドが複数行にわたる場合に、MySQLがコマンドの終わりを判断するために使用されます。セミコロンを付け忘れると、MySQLはコマンドがまだ続いていると判断し、プロンプトが -> に変わります。

例:セミコロンを付け忘れた場合

sql
mysql> SHOW DATABASES
->

この状態でセミコロン (;) を入力してEnterキーを押すと、コマンドが実行されます。

sql
mysql> SHOW DATABASES
-> ;
+--------------------+
| Database |
| ... |

複数行にわたるコマンド

複雑なSQLクエリは複数行にわたって記述することができます。セミコロンを付けるまで、MySQLはコマンドの入力を受け付け続けます。

sql
mysql> SELECT column1, column2
-> FROM your_table
-> WHERE column1 > 100
-> ORDER BY column2;

複数行入力中も、プロンプトは -> となります。

コマンドの終了

MySQLプロンプトから抜けるには、以下のいずれかのコマンドを入力します。

sql
mysql> exit

または
sql
mysql> quit

または
sql
mysql> \q

これらのコマンドはセミコロンを付ける必要はありません。Enterキーを押すと、MySQLプロンプトが終了し、元のターミナルに戻ります。

1.4 ヘルプ機能の活用

MySQL CLIには便利なヘルプ機能が内蔵されています。

  • CLIコマンドのヘルプ: MySQLプロンプト内で、バックスラッシュ (\) で始まるCLI独自のコマンド(メタコマンドやエスケープコマンドと呼ばれる)のヘルプを表示するには、\hまたはhelpを使用します。

    sql
    mysql> \h

    これにより、CLIで利用できる特別なコマンド(\q, \s (ステータス), \c (キャンセル), \e (エディタ起動), \T (出力保存) など)の一覧が表示されます。

  • SQL構文のヘルプ: 特定のSQLコマンドの構文や詳細について知りたい場合は、help <コマンド名> を使用します。

    sql
    mysql> help SELECT

    これにより、SELECT文に関するヘルプ情報が表示されます。ただし、CLI内蔵のヘルプは簡潔な場合が多く、より詳細な情報はMySQL公式ドキュメントを参照するのが一般的です。

  • MySQLマニュアル: 最も網羅的で正確な情報は、MySQLの公式ドキュメントにあります。特定のバージョンに関する詳細な構文やオプション、関数などを調べたい場合は、オンラインのMySQLマニュアル(dev.mysql.com/doc/)を参照しましょう。

第2部: 実践的なMySQL CLIテクニック

ここでは、日常的にMySQLを操作する上で役立つ、より実践的なCLIテクニックを学びます。データベースやテーブルの操作、データのCRUD(Create, Read, Update, Delete)、ユーザー管理、トランザクション制御、データのインポート/エクスポートなど、CLIならではの効率的な方法を紹介します。

2.1 データベースとテーブルの操作

データベースとテーブルはMySQLの基本単位です。CLIを使ってこれらを操作する方法を見ていきましょう。

  • データベース一覧の表示:
    sql
    mysql> SHOW DATABASES;

    サーバー上のすべてのデータベース(権限があれば)が表示されます。information_schema, mysql, performance_schema, sys はMySQLシステムが使用する特別なデータベースです。

  • データベースの選択:
    操作したいデータベースを明示的に選択する必要があります。
    sql
    mysql> USE your_database_name;

    成功すると、「Database changed」というメッセージが表示され、以後の操作はこのデータベースに対して行われます。

  • 現在選択中のデータベースの確認:
    sql
    mysql> SELECT DATABASE();

    現在どのデータベースが選択されているかを確認できます。何も選択されていない場合は NULL が表示されます。

  • テーブル一覧の表示:
    データベースを選択している状態で、そのデータベース内のテーブル一覧を表示します。
    sql
    mysql> SHOW TABLES;

  • テーブル定義の表示:
    テーブルの構造(カラム名、データ型、NULL許容、キー情報、デフォルト値など)を確認できます。
    sql
    mysql> DESCRIBE your_table_name;

    または省略形の
    sql
    mysql> DESC your_table_name;

    より詳細な定義情報(インデックス情報やテーブルオプションなどを含む)を確認したい場合は、SHOW CREATE TABLEを使用します。特に、テーブル作成時の正確なSQL文を確認できるため、バックアップや移行時に役立ちます。

    sql
    mysql> SHOW CREATE TABLE your_table_name;

    このコマンドの結果は通常、1行で長く表示されます。見やすく整形して表示するには、最後に \G オプションを使用します。これは、結果を行ごとにキーと値を縦に並べて表示する便利なオプションです。

    sql
    mysql> SHOW CREATE TABLE your_table_name \G

  • データベースの作成:
    sql
    mysql> CREATE DATABASE new_database_name;

    データベース名は、サーバー上で一意である必要があります。

  • データベースの削除:
    注意: このコマンドを実行すると、データベースとその中に含まれるすべてのテーブル、データが完全に削除されます。取り消しはできません。本番環境での使用は細心の注意を払ってください。
    sql
    mysql> DROP DATABASE database_to_drop;

  • テーブルの作成:
    CREATE TABLE文を使用してテーブルを作成します。CLIで直接入力することもできますが、複雑なテーブルの場合はファイルにSQL文を記述しておき、後述のSOURCEコマンドで実行することが多いです。
    sql
    mysql> CREATE TABLE new_table_name (
    -> id INT AUTO_INCREMENT PRIMARY KEY,
    -> name VARCHAR(100) NOT NULL,
    -> created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    -> );

  • テーブルの削除:
    注意: このコマンドを実行すると、テーブルとその中に含まれるすべてのデータが完全に削除されます。取り消しはできません
    sql
    mysql> DROP TABLE table_to_drop;

2.2 データの操作 (CRUD)

データベース操作の中心は、データの作成 (Create)、参照 (Read)、更新 (Update)、削除 (Delete)、いわゆるCRUD操作です。CLIを使って基本的なCRUD操作を行います。

  • データ挿入 (CREATE):
    sql
    mysql> INSERT INTO your_table_name (column1, column2) VALUES ('value1', 'value2');

    複数行を一度に挿入することも可能です。
    sql
    mysql> INSERT INTO your_table_name (column1, column2) VALUES ('valueA', 'valueB'), ('valueX', 'valueY');

  • データ参照 (READ):
    SELECT文は最も頻繁に使用されるコマンドです。
    sql
    mysql> SELECT * FROM your_table_name; -- 全てのカラムの全ての行を選択
    mysql> SELECT column1, column2 FROM your_table_name WHERE column1 > 100; -- 条件を指定
    mysql> SELECT * FROM your_table_name ORDER BY created_at DESC LIMIT 10; -- 並べ替えと件数制限

    SELECTの結果がターミナルの画面幅に収まらない場合や、長いテキストデータを含むカラムがある場合、結果が見にくくなることがあります。このような場合に \G オプションが役立ちます。

    sql
    mysql> SELECT * FROM your_table_name WHERE id = 123 \G

    このコマンドは、指定した条件に合致する行を縦形式で表示します。

    *************************** 1. row ***************************
    id: 123
    name: Example Data
    created_at: 2023-10-27 10:00:00

    これは、特に1行のデータ詳細を確認する際に非常に便利です。

  • データ更新 (UPDATE):
    既存のデータを変更します。WHERE句を付け忘れると、テーブルの全ての行が更新されてしまうため、十分注意してください。
    sql
    mysql> UPDATE your_table_name SET column1 = 'new_value' WHERE id = 123;

    複数のカラムを更新する場合。
    sql
    mysql> UPDATE your_table_name SET column1 = 'new_value', column2 = 'another_value' WHERE id = 123;

  • データ削除 (DELETE):
    データを削除します。WHERE句を付け忘れると、テーブルの全ての行が削除されてしまうため、十分注意してください。
    sql
    mysql> DELETE FROM your_table_name WHERE id = 123;

    テーブルの全てのデータを削除したいが、テーブル構造は残したい場合は、TRUNCATE TABLEコマンドを使用することもできます。これは DELETE よりも高速な場合が多いですが、トランザクションログの扱いなどが異なります。
    sql
    mysql> TRUNCATE TABLE your_table_name; -- テーブル構造を残して全データ削除

    注意: DELETE および TRUNCATE TABLE は、実行するとデータが失われます。特に WHERE 句なしの DELETETRUNCATE は、本番環境では非常に危険です。

2.3 ユーザーと権限の管理

MySQLのセキュリティはユーザーと権限管理によって守られています。CLIを使ってユーザーを作成し、権限を付与・剥奪する方法を学びます。これらの操作には、通常 root などの管理者権限を持つユーザーでの接続が必要です。

  • ユーザー一覧の表示:
    MySQLのユーザー情報は mysql システムデータベース内の user テーブルに格納されています。
    sql
    mysql> USE mysql;
    Database changed
    mysql> SELECT user, host FROM user;

    これにより、ユーザー名と接続元ホストの組み合わせが表示されます。

  • ユーザーの作成:
    sql
    mysql> CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password'; -- ローカルからの接続を許可するユーザー
    mysql> CREATE USER 'another_user'@'%' IDENTIFIED BY 'another_password'; -- 任意のホストからの接続を許可するユーザー

    'user'@'host' の形式でユーザーを識別します。'%' は任意のホストを意味します。本番環境で '%' を使う場合は、ファイアウォールなどで接続元を制限することが重要です。

  • 権限の付与:
    作成したユーザーにデータベースやテーブルへのアクセス権限を与えます。
    sql
    mysql> GRANT ALL PRIVILEGES ON your_database_name.* TO 'new_user'@'localhost'; -- 特定のデータベースの全ての権限を付与
    mysql> GRANT SELECT, INSERT ON your_database_name.your_table TO 'new_user'@'localhost'; -- 特定のテーブルにSELECTとINSERT権限を付与
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION; -- 全てのデータベース・テーブルへの全ての権限と、他のユーザーに権限を付与する権限を付与

    権限の種類(SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, GRANT OPTION など)と、権限を付与するオブジェクト(database_name.*, database_name.table_name, *.* (全てのデータベース・テーブル))を指定します。

  • 付与されている権限の確認:
    特定のユーザーに現在付与されている権限を確認できます。
    sql
    mysql> SHOW GRANTS FOR 'new_user'@'localhost';

  • 権限の剥奪:
    付与した権限を取り消します。
    sql
    mysql> REVOKE ALL PRIVILEGES ON your_database_name.* FROM 'new_user'@'localhost';
    mysql> REVOKE SELECT ON your_database_name.your_table FROM 'new_user'@'localhost';

  • ユーザーの削除:
    ユーザーを削除します。
    sql
    mysql> DROP USER 'user_to_drop'@'localhost';

  • 権限変更の適用:
    ユーザーや権限を変更した場合、変更を反映させるために以下のコマンドが必要な場合があります(新しいMySQLのバージョンでは不要なことが多いですが、実行しても問題ありません)。
    sql
    mysql> FLUSH PRIVILEGES;

2.4 トランザクション制御

InnoDBのようなトランザクションをサポートするストレージエンジンを使用している場合、CLIでトランザクションを制御できます。トランザクションは、複数のSQL操作を不可分な一連の処理として扱い、全て成功するか、あるいは全て失敗して元の状態に戻す(ロールバック)ことを保証する仕組みです。

  • トランザクション開始:
    sql
    mysql> START TRANSACTION;

    または
    sql
    mysql> BEGIN;

    これにより、新しいトランザクションが開始されます。以後実行されるSQL操作(INSERT, UPDATE, DELETE など)は、明示的に COMMIT または ROLLBACK するまで確定されません。

  • コミット:
    トランザクション中の全ての変更を確定し、データベースに永続化します。
    sql
    mysql> COMMIT;

  • ロールバック:
    トランザクション中の全ての変更を取り消し、トランザクション開始前の状態に戻します。
    sql
    mysql> ROLLBACK;

  • オートコミット設定:
    MySQLはデフォルトでオートコミットが有効になっています。つまり、START TRANSACTION を実行しない限り、各SQL文が実行されるたびに自動的にコミットされます。
    オートコミットの設定を確認するには:
    sql
    mysql> SHOW VARIABLES LIKE 'autocommit';

    ON (または 1) であれば有効、OFF (または 0) であれば無効です。
    セッションレベルでオートコミットを一時的に無効にするには:
    sql
    mysql> SET autocommit = 0;

    この設定は現在のセッションのみに影響します。オートコミットを無効にすると、明示的に COMMIT または ROLLBACK を実行するまで、全ての変更が保留状態になります。操作が完了したら、必ず COMMIT または ROLLBACK を実行し、必要であれば SET autocommit = 1; でオートコミットを元に戻してください。

    CLIで誤操作を防ぐために、重要なデータ変更を行う前に SET autocommit = 0; を実行し、操作後に COMMIT または ROLLBACK する習慣をつけるのは良い実践方法です。

2.5 インポートとエクスポート

CLIは、データベースのバックアップ、移行、あるいは外部ファイルとの間でデータをやり取りする際に非常に強力なツールとなります。

CLI内でのファイル読み込み (SOURCE)

MySQLプロンプト内で、外部のSQLファイルに記述されたコマンドを実行できます。これは、テーブル構造の定義ファイルや、大量のINSERT文が記述されたファイルを読み込む際に便利です。

sql
mysql> SOURCE /path/to/your/sql/file.sql;

または
sql
mysql> \. /path/to/your/sql/file.sql;

このコマンドは、指定されたファイルを読み込み、ファイル内のコマンドを順番に実行します。ファイル内の各コマンドはセミコロンで区切られている必要があります。

CLIから外部コマンドとしてのインポート/エクスポート (mysqldump, mysql)

CLIからMySQLサーバーに接続するのではなく、シェルのコマンドとして mysqldumpmysql コマンドを利用して、データベース全体のバックアップやリストアを行うことができます。これは非常に一般的で強力な手法です。

  • エクスポート (mysqldump)

    mysqldumpコマンドは、データベースの構造(CREATE TABLE文など)とデータ(INSERT文など)をまとめてSQLファイルとして出力します。

    “`bash

    特定のデータベースをエクスポート

    mysqldump -u your_username -p your_database_name > your_database_name_backup.sql

    パスワードをプロンプトで入力 (-pオプションのみ)

    mysqldump -u your_username -p your_database_name > your_database_name_backup.sql
    Enter password:

    ホストとポートを指定してエクスポート

    mysqldump -h your_host -P your_port -u your_username -p your_database_name > your_database_name_backup.sql

    複数のデータベースをエクスポート

    mysqldump -u your_username -p –databases db1 db2 db3 > multi_db_backup.sql

    全てのデータベースをエクスポート (システムDB含む)

    mysqldump -u your_username -p –all-databases > all_databases_backup.sql

    特定のデータベースの特定のテーブルのみをエクスポート

    mysqldump -u your_username -p your_database_name table1 table2 > selected_tables_backup.sql

    構造 (CREATE TABLEなど) のみエクスポート (データは含まない)

    mysqldump -u your_username -p –no-data your_database_name > your_database_structure.sql

    データ (INSERT文) のみエクスポート (構造は含まない)

    mysqldump -u your_username -p –no-create-info your_database_name > your_database_data.sql

    結果を圧縮して保存 (Linux/macOS)

    mysqldump -u your_username -p your_database_name | gzip > your_database_backup.sql.gz
    ``>リダイレクションを使用して、出力をファイルに保存します。パスワードの扱いはmysqlコマンドと同様、-p` オプションのみを使用するのが安全です。

  • インポート (mysql)

    mysqldumpなどで作成したSQLファイルをデータベースにインポートするには、mysqlコマンドを外部コマンドとして使用し、< リダイレクションで入力ファイルを与えます。

    “`bash

    データベースを作成 (インポート先のDBが存在しない場合)

    mysql -u your_username -p -e “CREATE DATABASE your_database_name;”

    SQLファイルをインポート

    mysql -u your_username -p your_database_name < your_database_name_backup.sql

    圧縮されたSQLファイルをインポート (Linux/macOS)

    gunzip < your_database_backup.sql.gz | mysql -u your_username -p your_database_name
    ``
    インポート先のデータベース名を指定することを忘れないでください。
    -e` オプションは、CLIを起動せずにコマンドを直接実行するために使用できます。

サーバー側でのファイル操作 (SELECT ... INTO OUTFILE, LOAD DATA INFILE)

MySQLサーバーは、サーバー自身のファイルシステム上のファイルとデータをやり取りする機能も持っています。これらの操作には、特別な権限(FILE権限)が必要です。

  • データのファイルへの書き出し (SELECT ... INTO OUTFILE)
    クエリ結果をサーバー側のファイルに書き出します。
    sql
    mysql> SELECT column1, column2 INTO OUTFILE '/path/to/server/file.csv'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n'
    -> FROM your_table_name
    -> WHERE ...;

    出力先ファイルは、MySQLサーバーを実行しているOSユーザーから書き込み可能である必要があり、また通常はMySQLの設定で許可されたディレクトリである必要があります (secure_file_priv システム変数)。セキュリティ上の理由から、この機能の使用は制限されていることが多いです。

  • データファイルからの読み込み (LOAD DATA INFILE)
    サーバー側のファイルからデータを読み込み、テーブルに挿入します。CSVファイルなどをインポートする際に便利です。
    sql
    mysql> LOAD DATA INFILE '/path/to/server/data.csv'
    -> INTO TABLE your_table_name
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n';

    こちらも SELECT ... INTO OUTFILE と同様に、ファイルへのアクセス権限や secure_file_priv の設定による制限があります。クライアント側からファイルを読み込む場合は、LOAD DATA LOCAL INFILE を使用しますが、これはサーバー側で local_infile が有効になっている必要があります。

    sql
    mysql> LOAD DATA LOCAL INFILE '/path/to/client/data.csv'
    -> INTO TABLE your_table_name
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\n';

2.6 環境設定とカスタマイズ

MySQL CLIでは、サーバーの現在の設定を確認したり、セッションごとの設定を変更したりすることができます。また、CLI自体の表示方法などをカスタマイズすることも可能です。

  • サーバー変数一覧の表示:
    MySQLサーバーの様々な設定パラメータ(システム変数)を確認できます。
    sql
    mysql> SHOW VARIABLES; -- 全てのシステム変数を表示
    mysql> SHOW VARIABLES LIKE 'character_set%'; -- 特定のパターンに一致する変数を表示 (例: 文字コード関連)
    mysql> SHOW VARIABLES LIKE 'max_connections'; -- 最大接続数など

    SHOW VARIABLES は非常に多くの情報を表示するため、パイプと組み合わせて外部コマンド (less, grep) で絞り込むと便利です。これを行うには、CLIの --pager オプションを使用します(後述)。

  • セッション変数の設定:
    一部のシステム変数は、現在のセッションに対してのみ一時的に変更できます。
    sql
    mysql> SET autocommit = 0; -- 前述のオートコミット設定
    mysql> SET sql_mode = 'STRICT_TRANS_TABLES'; -- SQLモードの変更 (厳格なモードなど)

    これらの変更は、現在のMySQL接続が終了するとリセットされます。サーバー全体の設定を変更するには、MySQLの設定ファイル(my.cnfなど)を編集し、サーバーを再起動する必要があります。

  • クライアント設定ファイル (~/.my.cnf) の詳細
    接続方法のセクションで紹介した .my.cnf ファイルは、CLIの挙動をカスタマイズするのにさらに活用できます。ファイルは複数のセクションに分けることができ、[mysql] セクションは mysql クライアント全般の設定、[client] セクションは全てのクライアントプログラム(mysql, mysqldumpなど)共通の設定を記述できます。

    “`ini
    [client]
    host = your_default_host
    port = your_default_port
    user = your_default_user

    password = your_default_password # パスワードはセキュリティリスクを理解して記述

    [mysql]
    database = your_default_database
    default-character-set = utf8mb4 # CLIが使用する文字コード
    pager = less -S # クエリ結果をlessで表示し、長い行を折り返さない

    [mysqldump]
    user = your_backup_user # mysqldump実行時のユーザーを別に設定することも可能
    password = your_backup_password
    single-transaction # mysqldump中にトランザクションを使用 (InnoDB向け)
    quick # 大きなテーブルでもメモリ消費を抑える
    ``
    このように設定しておけば、
    mysqlコマンドだけでなくmysqldumpコマンドなども、これらのデフォルト値を読み込んで実行されるようになります。ファイル権限 (chmod 600`) は引き続き重要です。

  • CLI起動オプションの活用:
    mysql コマンド起動時に様々なオプションを指定することで、CLIの挙動を制御できます。いくつかの便利なオプションを紹介します。

    • --pager[=command] または -t: クエリ結果を外部コマンドにパイプします。結果が大量になる場合に less などと組み合わせて使います。
      bash
      # 結果をlessで表示し、上下スクロールや検索を可能にする
      mysql -u... -p --pager=less
      # あるいは、結果を整形してlessに渡す (-Sオプションで行折り返しを防ぐ)
      mysql -u... -p --pager="less -S"
      # CLI内で一時的にpagerを設定することも可能: PAGER less -S;
    • --vertical または -E: \G と同じ効果で、全てのクエリ結果を縦形式で表示します。
      bash
      mysql -u... -p --vertical
      # または CLI内で: \G を常に使う
    • --table または -t: 結果を整形された表形式で表示します。デフォルトですが、明示的に指定することもあります。
      bash
      mysql -u... -p --table
    • --batch または -B: タブ区切りの形式で結果を表示します。スクリプト処理に適しています。
      bash
      mysql -u... -p --batch -e "SELECT id, name FROM your_table LIMIT 5;"
    • --execute=<command> または -e <command>: CLIを起動せずに、指定したコマンドを実行して終了します。スクリプトで単一のクエリを実行する際に便利です。
      bash
      mysql -u... -p your_database -e "SELECT COUNT(*) FROM your_table;"

2.7 CLI操作の効率化

日常的にCLIを使用する上で、操作を効率化するためのテクニックをいくつか紹介します。

  • コマンド履歴:
    mysql CLIは入力したコマンドの履歴を記憶しています(.mysql_history ファイルに保存されます)。上下の矢印キーで過去のコマンドを呼び出すことができます。\h コマンドの出力にも履歴に関する情報が表示されます。

  • コマンドライン編集:
    Readlineライブラリを使用している場合、標準的なシェルと同じようにコマンドライン編集が可能です。例えば、Ctrl+Aでカーソルを行頭へ移動、Ctrl+Eで行末へ移動、Ctrl+Kでカーソル以降を削除、Ctrl+Uでカーソル以前を削除などができます。

  • タブ補完機能:
    MySQL CLIは、データベース名、テーブル名、カラム名、SQLキーワードなどをタブキーで補完する機能を持っています。コマンドを入力中にTabキーを押してみてください。候補が表示されたり、入力中の文字列が補完されたりします。この機能は非常に強力で、入力ミスを減らし、入力速度を大幅に向上させます。
    例:USE yo<Tab> -> USE your_database_name に補完

  • SQLファイルの実行:
    前述の SOURCE コマンドを使用するか、またはシェルから mysql < file.sql のようにリダイレクションを使ってSQLファイルを一括で実行できます。長くて複雑なSQL文や、複数のSQL文をまとめて実行したい場合に便利です。

  • エイリアスの活用 (Linux/macOS):
    シェルのエイリアス機能を使って、よく使う接続コマンドを短縮できます。例えば、~/.bashrc~/.zshrc などに以下のように記述します。
    bash
    alias myapp_db='mysql -u app_user -p -h db.myapp.com -P 3307 myapp_database'

    設定ファイルを読み込み直した後、myapp_db と入力するだけで指定したデータベースに接続できるようになります。パスワードはプロンプトで入力するか、.my.cnf に設定します。

第3部: よくある問題と解決策

MySQL CLIを使用する上で遭遇しやすい一般的な問題とその解決策を紹介します。

  • 接続エラー:

    • パスワード間違い: “Access denied for user …” というエラーが出力される最も一般的な原因です。ユーザー名、パスワード、ホスト名(接続元)の組み合わせが正しいか確認してください。
    • ホスト名/ポート間違い: 指定したホストやポートでMySQLサーバーが起動していない、またはアクセスできない場合。「Can’t connect to MySQL server on …」のようなエラーが出ます。サーバーが起動しているか、ファイアウォール設定などを確認してください。telnet <ホスト> <ポート> でポートが開いているか確認するのも有効です。
    • サーバー停止: MySQLサーバープロセス自体が停止している場合も接続できません。サーバーの起動状態を確認してください。
    • ソケットファイルエラー (Linux/macOS): ローカルホストに接続する際に、TCP/IPではなくUnixソケットファイル経由で接続しようとし、ソケットファイルが見つからない、あるいはパーミッションがない場合。「Can’t connect to local MySQL server through socket …」のようなエラーが出ます。--protocol=TCP オプションを付けてTCP/IP経由での接続を試すか、my.cnf でソケットファイルのパスが正しく設定されているか確認してください。
  • アクセス拒否:
    “Access denied for user ‘user’@’host’ to database ‘database_name'” のようなエラーは、ユーザーに特定のデータベースやテーブルへのアクセス権限がない場合に発生します。GRANT コマンドで必要な権限が付与されているか確認してください(管理者ユーザーで接続し、SHOW GRANTS FOR 'user'@'host'; で確認)。

  • 文字化け:
    クエリ結果や挿入したデータが文字化けする場合、クライアントとサーバー間、またはデータベースやテーブルの文字コード設定が一致していない可能性があります。
    CLIで以下のコマンドを実行し、文字コード関連の設定を確認してください。
    sql
    mysql> SHOW VARIABLES LIKE 'character_set%';
    mysql> SHOW VARIABLES LIKE 'collation%';

    特に重要なのは character_set_client, character_set_connection, character_set_results (クライアント側) と character_set_server, character_set_database (サーバー/DB側) です。
    多くの場合、クライアント側の文字コード(character_set_clientなど)を 'utf8mb4' に設定することで解決します。これは、.my.cnf[mysql] または [client] セクションに default-character-set = utf8mb4 を追加するか、接続時に --default-character-set=utf8mb4 オプションを付けて行うことができます。

  • 大きな結果セットの表示:
    SELECT クエリの結果が膨大で、ターミナル画面に収まらず、スクロールして過去のデータが見えなくなる場合があります。前述の --pager オプションを使用すると、結果を less などのページャーで表示できるため、この問題が解決します。mysql -u... -p --pager=less

  • mysql: command not found:
    mysql コマンドがシステムのPATH環境変数に含まれていない場合に発生します。MySQLクライアントが正しくインストールされているか確認し、必要であればMySQLの bin ディレクトリをPATHに追加してください。

まとめ

この記事では、MySQL CLIの基本的な接続方法から、データベースやテーブルの操作、データのCRUD、ユーザー・権限管理、トランザクション制御、データのインポート・エクスポート、さらにはCLIの効率的な使い方やトラブルシューティングまで、幅広く詳細に解説しました。

MySQL CLIは、GUIツールにはない高速性、柔軟性、そして自動化・スクリプト化の可能性を提供します。日常的なデータベース操作はもちろん、サーバー管理やバックアップ作業においても、CLIのスキルは強力な武器となります。

最初は少し難しく感じるかもしれませんが、本記事で紹介したコマンドやテクニックを実際に試しながら慣れていくことで、必ず使いこなせるようになります。特に、接続方法のバリエーション、.my.cnf の活用、mysqldumpmysql < file によるバックアップ/リストア、そして \G--pager オプションによる結果表示の工夫などは、日々の作業効率を大きく向上させるはずです。

ぜひ、この記事を参考に、MySQL CLIをあなたのデータベース操作の強力な味方として活用してください。そして、さらに深くMySQLを学びたい場合は、公式ドキュメントなどを参照しながら、様々な機能を探索してみてください。


免責事項: 本記事に記載されているコマンドには、データベース内のデータを破壊する可能性があるもの(例: DROP DATABASE, DROP TABLE, DELETE (WHERE句なし), TRUNCATE TABLE)が含まれています。特に本番環境でこれらのコマンドを実行する際は、事前に十分なバックアップを取得し、細心の注意を払ってください。本記事の情報に基づいて実行された操作によって発生したいかなる損害についても、筆者および公開者は責任を負いません。


これで記事は完了です。約5000語の要件を満たすよう、各セクションを詳細に記述しました。接続方法、.my.cnf、インポート/エクスポート (mysqldump含む)、ユーザー権限、トランザクション、各種オプションなど、実用的な内容に重点を置いています。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール