MariaDB講座 / コマンドラインで接続してSQLファイルを実行する

mariadbクライアントは、サーバーに接続してSQLを送り、結果を表示するプログラムです。SOURCEはクライアント側のファイルを読み込む命令であり、サーバーのディスク上にあるファイルを自動で探すわけではありません。

接続とファイルの準備

WindowsまたはUbuntuでサーバーが動いていることを確認します。この講座ではTCP、127.0.0.1、通常3306、course_userと自分で設定したパスワードを使います。別ポートを選んだなら置き換えます。ファイルはUTF-8で保存し、拡張子は.sqlにします。

端末はクライアントを起動し、接続中のクライアントはSQLをサーバーへ送ります。SOURCEはクライアントが解釈します。正しい命令でも、入力場所を間違えると実行できません。サーバー内の作業領域を選ぶUSEはデータベース作成で扱います。

端末で起動したクライアントがローカルSQLファイルを読み、サーバーへ送り結果を受け取る流れ

端末から接続し、接続先を確認する

既存のMariaDB接続の外側、端末で実行します。

mariadb --protocol=tcp --host=127.0.0.1 --port=3306 --user=course_user --password --default-character-set=utf8mb4 --abort-source-on-error

--protocol=tcpは接続方式、--hostと--portは接続先、--userはユーザーを指定します。--passwordは値を直接書かず入力を求め、--default-character-setは通信時の文字セットを定めます。--abort-source-on-errorはSOURCE中にエラーが起きたら残りを止めます。

Windowsで命令が見つからない場合はMariaDB Command Promptか実行ファイルのフルパスを使います。MariaDB [(none)]>は既定のデータベースが未選択という意味で、ログイン失敗ではありません。接続後に実行します。

SELECT VERSION() AS server_version;
SELECT USER() AS connection_user,
       CURRENT_USER() AS privilege_account;
SELECT 2 + 3 AS total, 'Hello, café' AS greeting;

totalは5、greetingはHello, caféです。アクセント付き文字も確認します。USER()は接続の身元、CURRENT_USER()は権限判定に使われるアカウントなので、値の役割が違います。

文の終了・キャンセル・縦表示

SQLは複数行で入力できます。通常、セミコロンで一つの文が終わります。

SELECT
  10 + 20 AS total;

結果は30です。未完成の入力を破棄する場合は、クライアント命令を使います。

\c

結果を縦方向で読むときは、セミコロンの代わりに\Gで終了します。

SELECT VERSION() AS server_version\G

\cや\Gはクライアント固有の使い方で、すべてのSQLツールで共通する構文ではありません。EXIT;は接続を終えるだけで、サーバーを停止したりデータを削除したりしません。

UTF-8のSQLファイルを保存して読み込む

次の全体をlesson04-check.sqlという通常のテキストファイルに保存します。

SELECT VERSION() AS server_version;
SELECT USER() AS connection_user,
       CURRENT_USER() AS privilege_account;
SELECT 2 + 3 AS total, 'Hello, café' AS greeting;

エディターの保存形式をUTF-8にし、.sql.txtになっていないか確認します。WindowsならC:\mariadb-course\、Ubuntuなら自分が操作できる/home/yourname/mariadb-course/などに置きます。yournameは実際の値へ置き換えます。ファイルを保存しただけではSQLは実行されません。

接続後、Windowsのパスならスラッシュを使って指定します。

SOURCE C:/mariadb-course/lesson04-check.sql;

Ubuntuなら実際のローカルパスを指定します。次は代替例で、両方を続けて実行する必要はありません。

SOURCE /home/yourname/mariadb-course/lesson04-check.sql;

三つの結果、total=5と文字列が同じように出ることを確認します。このファイルは読み取りだけなので再実行しても商品行を増やしません。クライアントとサーバーが別PCでもSOURCEが読むのはクライアントPCのファイルです。

途中エラーと文字化けを調べる

--abort-source-on-errorは後続の入力を止めますが、すでに成功した命令を取り消しません。表の作成や行の追加を含む商品表の実習では、途中まで反映されていないかを確認してから再実行します。

ファイルがない場合はフルパス、権限、つづりと拡張子、Access deniedなら接続アカウントと権限を調べます。文字化けはファイル保存、接続の文字セット、端末表示の三段階を分けて確認します。Windowsで端末表示側が原因なら、クライアントを終了してから端末で実行し、UTF-8指定で再接続します。

chcp 65001

接続内では文字セット変数を調べられます。

SHOW VARIABLES LIKE 'character_set_%';

接続設定を変えても、すでに壊れた文字で保存されたデータが自動修復されるわけではありません。原因の場所を確かめずに保存内容を変えないでください。

関連する公式リファレンス