実行環境(OS)、動機 インストーラではなくZIPをダウンロード(昨日) 補足:サーバを起動するWindowsユーザの種別について 空間データのインポート ①(明日)  同 ② (明後日)
Contents


実行環境(コンソール)、データベース初期化

今日の操作はほぼコンソールのみで、Windowsコマンドプロンプトの代替としてConEmuを使ってます。見た目や操作性が違うだけで、実行内容はコマンドプロンプトと特に違いありません。

昨日は適当なフォルダにZIPを解凍した状態 ↓ まで。次にデータベース初期化をして初めてサーバを起動できます。これはPostgreSQLも同じ。違ったのは、設定ファイル(my.ini)を自分で作成する必要がある点。ZIP内のmy-default.iniはそのテンプレらしいです。

昨日紹介した
Stack Overflow - MySql portable versionを参考に、最小限のmy.ini↓ を作成。これをbinフォルダなどの上(my-default.iniと同じ場所)に置きました。
[mysqld]
basedir="."
datadir="data"
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


初期化は公式マニュアル ↓ に解説があり、mysqld --initializeを実行するとランダムな一時パスワードを表示する模様。でもmarks it as expiredともあって、期限切れで使えないとすると何の意味があるか「?」ですが、ともかく解説と同じコマンドを試しました。

With --initialize but not --initialize-insecure, the server generates a random password, marks it as expired, and writes a message displaying the password: [Warning] A temporary password is generated for root@localhost: iTag*AfrH5ej

R:
cd "/MySQL-5.7.8"
"bin/mysqld" --initialize --user=mysql

ところが一時パスワードが表示されないまま ↓ 一応データベース初期化は完了。あれ~と思いながらサーバを起動して接続を試みても、当然パスワードなしではログインできません(二つ目の画像。
サーバ起動については次項で)。


いったんデータフォルダを消去し、--initialize-insecureオプションで ↓ 初期化やり直し。こうしたら、サーバ起動後にパスワード無しでログインでき
(詳細は次項)やっと使い始められました。
"bin/mysqld" --initialize-insecure --user=mysql


↓ 初期化によって作られたデータフォルダの中。「コンピュータ名.err」がログファイルで、my.iniで設定すればファイル名を変えられるかもしれません(PostgreSQLからの類推)。


最初のサーバ起動、ログイン、パスワード設定

初期化できていればサーバ起動は簡単で、binフォルダ内のmysqldを実行するだけ。起動すると、データフォルダ内に「コンピュータ名.pid」という起動中を示すファイルができます(画像の二つ目)。ファイル名を変える方法をそのうち調べる。
"bin/mysqld"


サーバに接続するクライアントはbinフォルダ内のmysql(最後にdが付かない)。前項のとおり--initialize-insecureで初期化を行ったので、rootユーザならパスワード無しでログインできました。↓
"bin/mysql" -u root

ただ、
MySQL 5.7 Reference Manual - Initializing the Data Directory Using mysqldにならって初期化コマンドに--user=mysqlオプションを付けましたが、どうもmysqlというユーザは作られておらず謎です。上の画像の最初のコマンドは、mysqlユーザがあると思ってログインに失敗したもの。


ともかくrootユーザで接続できたので、ALTER USERコマンド ↓ でパスワードを設定します。構文やクォーテーションはPostgreSQLと少し違う。コマンド入力時にパスワードがそのまま見える点は同じ。
mysql > ALTER USER 'root'@'localhost' IDENTIFIED BY '********';

上の画像でも、初期化時に指定した--user=mysqlオプションに意味あったのか確かめていますが(パスワード設定、ユーザ一覧表示)、やっぱりmysqlというユーザ自体が作られてないようです。


サーバ終了コマンドと、起動・終了バッチファイル

コンソールでmysqldを実行しサーバを起動すると、当該コンソールは一切操作できなくなりました。Ctrl-Cも無反応。コンソールをタスクマネージャ等で強制的に閉じても、サーバプロセスは残ったまま。荒技でタスクマネージャでmysqldプロセス強制終了は一応可能でしたが、さすがに無理過ぎ。

調べた結果、binフォルダ内のmysqladminshutdownコマンドを送ると無事終了。この際、mysqldを起動したコンソールはコマンド入力可能な状態に復帰しました(下の画像の二つ目)。
"bin/mysqladmin" shutdown -u root -p


以上で簡単なサーバ起動・終了のコマンドが分かったので、とりあえず別々にバッチファイルを作成。本当は普段PostgreSQLでやっているように一つにまとめ
(53日の記事参照)、起動したら「再起動or終了しますかプロンプト」を出して待機させたかったですが、mysqldを起動したコンソールが操作を受け付けないので今日は断念。何かいい方法ないかな。
:: start.bat
@echo off
cd %~dp0
"bin/mysqld"

:: stop.bat
@echo off
cd %~dp0
"bin/mysqladmin" shutdown -u root -p

↑ こんな感じでMySQLのフォルダに二つのバッチファイルを作り、↓ ショートカットを好きな場所に置いて使います。画像二つ目の後ろ側がstart.batによるmysqldコンソール、前側がstop.batによるmysqldmin。終了時はrootパスワードを入力。

ConEmuなら、起動したmysqldコンソールをタスクトレイに収納できます。ウィンドウ最小化と違ってAlt + Tabのタスク一覧に出てこないので便利。PostgreSQLはいつもこうしてます。


明日は、MySQL 5.7で強化されたという空間データ型・関数を初めて使ってみる予定。