MySQL Server 8.0 を1つのPCに複数用意し場合によって使い分ける方法

MySQL Server 8.0 をインストールすると特に設定しなければデータベースは

C:\ProgramData\MySQL\MySQL Server 8.0

に作られた。

ある事情で上記のデータベースはのこしたまま

C:\ProgramData\MySQL\MySQL Server 8.0 v2

を作り、PCを場合によって別のデータベースサーバとしてふるまわせる必要がでた。

要は次のサービス管理画面画像のように複数のMySQL80サービスを登録しておき、どちらかを実行することで別のデータベースサーバとして動作させたい。(通信ポートなどはどちらも同じで)

mysql-server-2service-task-man

実際にやってみたので手順を残しておく。

環境

Windows10 pro 64bit
MySQL Server 8.0.26 - X64

条件

新しいサーバは「C:\MySQL LocalServer 8.0」に作る。
新しいサービス名は「MySQL80v2」とする。
PCの管理者権限をもっていること。

サーバフォルダを用意する

サーバフォルダとその中に「temp」「uploads」空フォルダを作り、C:\ProgramData\MySQL\MySQL Server 8.0\my.ini をコピー。

C:\MySQL LocalServer 8.0
C:\MySQL LocalServer 8.0\temp
C:\MySQL LocalServer 8.0\uploads
C:\MySQL LocalServer 8.0\my.ini

My.iniの編集

以下の内容を新しく作ったサーバフォルダに合わせて修正する。

tmpdir"C:\MySQL LocalServer 8.0\temp"
datadir"C:\MySQL LocalServer 8.0\data"
secure-file-priv"C:\MySQL LocalServer 8.0\uploads"

必要があれば、server-id、ログの出力名なども修正する。

データベースの初期化

コマンドプロンプトで次のコマンドを実行する。

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld" --initialize --basedir="C:\MySQL LocalServer 8.0"

「C:\MySQL LocalServer 8.0\data」と中に初期データベースが作成される。

MySQLサービスの登録

管理者として実行したコマンドプロンプトから次のコマンドを実行する。
「 BinPath=」の(等号の)直後にはスペースがなければならない。と昔から言われているのでそれにならう。

sc create MySQL80v2 BinPath= "\"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe\" --defaults-file=\"C:\MySQL LocalServer 8.0\my.ini\" MySQL80v2"

C:\server>sc create MySQL80v2 BinPath= "\"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe\" --defaults-file=\"C:\MySQL LocalServer 8.0\my.ini\" MySQL80v2"
[SC] CreateService SUCCESS

[SC] CreateService SUCCESS となり、サービスウィンドウでも登録されていることが確認できる。

mysql-server-3service-task-man

次に、ログオンの種類を「Network Service」に変える。
「MySQL80v2」の右クリックメニューから「プロパティ」ー「ログオン」タブを開き、「アカウント」チェックボックスをON、「参照」ボタンをクリックする。

mysql-server-logon-edit


ユーザーの選択ウィンドウが開くので、選択するオブジェクト名を入力してくださいのところに「Network」と打ち込み「名前の確認」ボタンをクリックする。

mysql-server-user-serach

候補として「NETWORK SERVICE」が見つかるので「OK」をクリック。

mysql-server-user-found

「プロパティ」ー「ログオン」タブに戻ってくるので、パスワード、パスワードの確認入力の欄に何も入力していない状態にして「OK」。

mysql-server-logon-ok

これでログオンの書類が「Network Service」にできる。

mysql-server-task-man-ns-ok

さっそく、右クリックメニューの「開始」でサービスを起動してみて「実行中」になれば成功。

mysql-server-task-man-boot-ok

ルートアカウントでログイン

コマンドプロンプトで次のコマンドを実行する。
ルートアカウントの初期パスワードは「C:\MySQL LocalServer 8.0\data」の中の ~.err ログに記載されている。

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql" -u root -p

無事ログインできたら成功となる。
あとは初回ログイン時のお決まりとしてルートアカウントのパスワードを変更する。

mysql> set password for 'root'@'localhost'='パスワード';

登録したサービスの削除

登録したサービスがうまく動作しなかった場合などで削除したい場合は管理者として実行されたコマンドプロンプトから次のコマンドで削除する。即時削除ではなく次回起動時に削除となる。

間違って重要なサービスを削除しないように注意が必要。

sc delete サービス名

今回の手順で追加したサービスなら次のようになる。

sc delete MySQL80v2

まとめ

わかってはいたが、サービスの起動、停止を頻繁に行うのは結構面倒くさい。バッチで1発で切り替えれるようにしてはいるけど面倒なのは変わらない。どうしようもない理由がなければ、別PCや、仮想PCを使った方が楽。