MySQLは、現在最も広く使用されているリレーショナルデータベース管理システム(RDBMS)の1つ。主に構造化問い合わせ言語(SQL)を使用して、スケーラブルなデータベースを作成・管理できます。
データベースがMySQLサーバーに保管され、このサーバーに接続してデータベースにアクセスすることになります。サーバー管理者であれば、サーバーに存在するデータベースの一覧、特定のデータベースからのテーブルの表示、ユーザー役割と権限の表示、制約の確認など、データベースサーバーに関する情報が必要になることがしばしばあります。
そこで、今回の記事では、コマンドプロンプトを使用してMySQLでデータベースの一覧を表示する方法をご紹介します。
前提条件
MySQLのサーバーがローカルマシンで実行されている必要があるため、MySQLをお持ちでない場合は、以下のいずれかの方法で入手してください。
- WAMPServer、XAMPP、MAMP、またはMySQLを含む他のソフトウェア配布パッケージをインストール
- 公式サイトからMySQLのインストーラをダウンロードし、MySQLサーバーやその他ツールの設定・インストール
また、コマンドラインを使用してMySQLコマンドを効率的に実行するには、MySQLの実行ファイルのパスをシステム環境に追加します(※2つ目の方法でMySQLをインストールした場合は不要なので次のセクションをスキップ可能)。
MySQLのパスをシステムの変数環境に追加
WindowsでXAMPPまたはWAMPを実行している場合を対象に、MySQL実行ファイルのパスをシステムの変数環境に追加する方法を見ていきます。
まず、Windowsのエクスプローラーを開き、「PC」に移動します。WAMPまたはXAMPPのパッケージをインストールしたドライブ(C:)を選択してください。
XAMPPの場合は、「xampp」>「mysql」>「bin」に移動して、binフォルダのフルパスをコピー。WAMPの場合は、(使用しているWAMPバージョン名)>「bin」>「mysql」>(使用しているMySQLバージョン名)>「bin」に進んで、フルパスをコピーします。
次に、スタートメニューから「パス」を検索して、「システム環境変数の編集」を選択します。
「起動と回復」の下にある「環境変数」をクリックし、「Path」を選択して「編集」をクリックしましょう。
それから、「新規」ボタンをクリックして、MySQL実行ファイル(先ほどコピーしたもの)へのフルパスを貼り付けます。
貼り付けたら、「OK」を押して、変更を保存します。
これでパスが追加され、ターミナルでMySQLコマンドが実行できるようになります。
MySQLにログイン
MySQLでデータベースを一覧表示するには、すべてのデータベースのアクセス権限を持っているか、そうでない場合は、すべてのユーザーにアクセスを許可するSHOW DATABASES
権限を設定する必要があります。
また、以下のコマンドプロンプトでログインする前に、MySQLのサーバーが実行されていることを確認してください。
mysql -u -p
注意) の部分は、自分のユーザー名に置き換えてください。MySQLデフォルトのユーザー名は
root
、パスワードは空の状態です(デフォルトでパスワードは登録されていません)。
MySQLサーバー内のデータベースを表示
MySQLにログインしたら、以下のSHOW DATABASES
コマンドを実行して、サーバー内にあるデータベースを一覧表示します。
SHOW DATABASES;
すると、ストレージ内に存在する全てのデータベースを取得することができます。
表示された6つのデータベースのうち、information_schema
とperformance_schema
は、MySQLのインストール時に自動で生成されるデフォルトのデータベースです。
information_schema
は、MySQLのサーバーに格納されているデータベースやその他のオブジェクト(ビュー、ユーザー権限、テーブル、制約など)に関連するすべての情報を格納している変更不可のデータベースです。
出力結果のフィルタリング
先ほど、SHOW DATABASES
コマンドでMySQLサーバー上のすべてのデータベースを表示しましたが、サーバー上に多くのデータベースがある場合は、データベースの出力結果のフィルタリングが必要になることも。
LIKE
演算子を使うと、指定したパターンに基づいてSHOW DATABASE
の結果をフィルタリングすることができます。一般的な構文は、以下のようになります。
SHOW DATABASES LIKE '';
入力する文字列は、必ず照合したいパターンを表すもので、「1つ以上の文字」を意味するパーセント記号(%
)で終わらせる必要があります。
例えば、名前がw
で始まるデータベースだけを表示したい場合には、以下のようになります。
SHOW DATABASES LIKE 'w%';
フィルタリングの結果は、以下の通り。
情報スキーマを使用したテーブルのメタデータクエリ
information_schema
データベースが、MySQLのサーバー環境内のデータベース、テーブル、およびその他のオブジェクトに関連する情報を格納していることは、先ほど触れたとおりです。
このinformation_schema
データベースでは、すべてのデータベース関連情報の格納にスキーマテーブルが使用されています。データベースのフィルタリングでは、特定のデータベースのスキーマテーブルを照会する高度な検索が行えます。
例えば、名前が「samp」または「word」で始まるデータベースを探したい場合は、複数のパターンを組み合わせて、以下のような複雑なクエリを作成可能です。
SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'samp%' OR schema_name LIKE 'word%';
すると、以下のような結果が返ってきます。
さらに、information_schema
データベースから、すべてのテーブルの情報が含まれるtables
テーブルも取得できます。同様に、指定したパターンに一致するテーブルのみを取得するクエリも実行可能で 。
例えば、以下のクエリでWordPressのテーブルのみ、つまり名前が「wp_」で始まるテーブルのみを対象にできます。
SELECT * FROM information_schema.tables WHERE table_name LIKE 'wp_%';
実行した結果は以下の通りです。
他にも、information_schema
データベースには、columns
、constraints
、table_constraints
、check_constraints
、referential_constraints
などのテーブルがあります。
よくある問題と対策
SQL実行時に発生するエラーの最も一般的な原因の1つは、ステートメントの最後にセミコロンが付加されていないことです。
また、無効なSQL構文や、テーブル/カラム名に誤字があることも考えられます。エラーを避けるためには、テーブル/カラム名、構文が正しいかどうか、必ず確認するようにしてください。
その他、以下のような対策も有用です。
SQLキーワードには大文字を使う
SQLコードを記述する際、一般的には、SQLキーワードは常に大文字で、テーブル名とカラム名は小文字にすることが推奨されています。コードが読みやすくなり、エラーの原因となる誤字を避けることができます。例えば、以下のような構文を作成するとします。
select * from information_schema.tables where table_name like 'wp_%';
この構文を以下のように記述すると、読みやすくなります。
SELECT * FROM information_schema.tables WHERE table_name LIKE 'wp_%';
SELECT *
の使用を避ける
何が返ってくるかがわからないことが多く、要求が曖昧になるため、SQLクエリでは、SELECT *
を使わないようにしましょう。その代わりに、テーブルから選択したいカラムを指定するのが賢明です。
SELECT * EXCEPT(phone) FROM users.profile
つまり、上の構文は以下のようになります。
SELECT name,
dob,
address,
country,
address,
FROM user.profile
コードをインデントする
誤字が見つけやすくなるもう1つのヒントは、コードをインデントすること。読みやすさが向上します。
データベースマネージャー
SQLを書かずにデータベースを管理したい場合には、データベースマネージャーを使用する方法も。SQLクエリを記述せずに、データベースを管理できます。データベースマネージャーには、MySQLのサーバーに接続して、データベースの管理機能を表示するUIが搭載されており、アクセスするだけで簡単にサーバー上のすべてのデータベースを確認できます。見た目はツールごとに異なりますが、作業方法は似通っています。
phpMyAdminやAdminerなど、ツールはいくつもありますが、このいずれもDevKinstaから利用可能です。DevKinstaのデフォルトの管理ツールは、使い勝手が良く、軽量かつ高速なAdminerですが、phpMyAdminの使用も簡単です。
まとめ
サーバー管理者には、MySQLサーバー上のデータベース情報の効率的かつ正確な取得が求められるものです。サーバー上に格納されているデータベースの確認、特定のテーブルとその中の情報の取得、ユーザー役割と権限の管理は、どれも重要な業務。幸い、コマンドラインからSQLを使用すれば、どれも簡単に実行できます。
データベース管理の拡張が必要であれば、Kinstaのスケーラブルなデータベースホスティングサービスをぜひお試しください。
コメントを残す