Windows ServerにMySQLを入れてちょっとハマった事
ウィスキー、シガー、パイプをこよなく愛する大栗です。 小ネタですが、最近RDSを使用せずMySQL on Windows Serverを構築した時にハマった事があったので記事を書いてみます。
前提環境
前提の環境は、以下になります。
項目 | 値 |
---|---|
OS | Windows Server 2012 R2 |
MySQLバージョン | 5.6.25 |
MySQLインストーラファイル | mysql-installer-community-5.6.25.0.msi |
32 / 64 bit | 64 bit |
インストール先 | C:¥Program Files¥MySQL¥MySQL Server 5.6 |
やろうとしていた事
データをDドライブに移動しようとしました。
ハマった事
ハマり1 設定が効かない
普通にMySQLのインストール先であるC:¥Program Files¥MySQL¥MySQL Server 5.6
の直下を確認するとmy-default.ini
があるのでmy.ini
に変更して、以下の設定を追加しました。
datadir=D:/MySQL/Data
データの移行は、サービスを止めてから以下のコマンドを実行しました。
mkdir D:¥MySQL¥Data xcopy /s /e "C:¥Program Files¥MySQL¥MySQL Server 5.6¥data" "D:¥MySQL¥Data"
サービスを起動してからMySQLへログインしてD:¥MySQL¥Data
のファイルを確認しますがタイムスタンプが変わりません。
ログインしてdatadir
を確認すると
mysql> show variables like 'datadir' ; +---------------+---------------------------------------------+ | Variable_name | Value | +---------------+---------------------------------------------+ | datadir | C:¥ProgramData¥MySQL¥MySQL Server 5.6¥Data¥ | +---------------+---------------------------------------------+ 1 row in set (0.00 sec)
隠しフォルダのC:¥ProgramData
に保存されてました。
Explorerで表示するためにフォルダオプションで隠しファイル、隠しフォルダ、および隠しドライブを表示する
をチェックします。
これでmy.iniとデータフォルダが表示されました。
C:¥ProgramData¥MySQL¥MySQL Server 5.6¥my.ini
の中身を書き換えます。
一番最初にログインして確認しろという話でした。
MySQLのサービスは以下のように登録されているので、登録情報を確認すれば直ぐ気がつきますね。設定内容を確認しましょう。
>sc qc mysql56 [SC] QueryServiceConfig SUCCESS SERVICE_NAME: mysql56 TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "C:¥Program Files¥MySQL¥MySQL Server 5.6¥bin¥mysqld.exe" --defaults-file="C:¥ProgramData¥MySQL¥MySQL Server 5.6¥my.ini" MySQL56 LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : MySQL56 DEPENDENCIES : SERVICE_START_NAME : NT AUTHORITY¥NetworkService
ハマり2 サービスが上がらない
無事設定ファイルを特定できたので、datadir
を変更し、以下のコマンドでデータの移行を実施しました。
一旦間違ったファイルをコピーしているので、サービスを止めてから以下のコマンドを実行しました。
del /S /Q D:¥MySQL¥Data mkdir D:¥MySQL¥Data xcopy /s /e "C:¥ProgramData¥MySQL¥MySQL Server 5.6¥Data" "D:¥MySQL¥Data"
MySQLのサービスを起動しますが、エラーが出力されて起動できません。
>net start MySQL56 MySQL56 サービスを開始します... MySQL56 サービスを開始できませんでした。 システム エラーが発生しました。 システム エラー 1067 が発生しました。 プロセスを途中で強制終了しました。
調べるとMySQL 5.6 リファレンスマニュアルの1.6 Troubleshooting a Microsoft Windows MySQL Server Installationにシステム エラー 1067
の記載があるのですが、どれにも該当しませんでした。
最終的に、原因はD:¥MySQL¥Data
のアクセス権が不足していることが判明しました。
権限は以下の状態になっています。
MySQLのサービスの実行ユーザはLocal System
ではなくNetwork Service
になっています。そのためNetwork Service
に権限を付与します。
Local Systemが実行する場合は権限を付与せずに実行可能(Local SystemはAdministratorと同等の権限があるため)でしたが、Network Serviceの場合は権限を付与する必要があります。
再度サービスを実行すると正常に起動できました。
>net start MySQL56 MySQL56 サービスを開始します. MySQL56 サービスは正常に開始されました。
さいごに
たまにWindows Serverを触ると昔のバージョンと大きく異なっており戸惑います。現在のWindowsの作法を意識し無いとちょっとした事にハマってしまいますね。