概要
Windows環境にて、複数のMySQL環境(データ込み)を管理する個人的な手順をまとめました。
- 複数のZip版MySQLバイナリを使用
- それぞれを起動終了することで即座に環境を切り替え可能
- 異なるバージョンや異なるデータ(テーブルやレコード)を管理可能
モチベーション
WindowsPC1台を貸与されており、複数の環境を保守運用しています。とあるシステムはMySQL5.xを使用しており、また別のシステムでは8.xです。また、開発用・テスト用・検証用など複数の環境が存在しています。ローカルで検証しなければならない場面があり、単純にWindows用のMySQLインストーラーを実行してしまうと、環境の切り替えが面倒でした。
切り替えのたびにダンプデータ等からデータを復元し切り替えるというてもないわけではないですが、1つ1つのデータベースが重いため、時間がかかってしまいます。
環境切り替えはDockerを使えばよいと思うのですが、今回はWSL周りで別の問題がありました。
比較的簡単に環境をころころ切り替えることができたので、本記事にまとめました。
手順
任意バージョンのMySQLサーバ(Zip版)をダウンロード
zipファイルにてWindows用のスタンドアロンexe(Zip版)が配布されているため設定して起動します。
- MySQL :: MySQL Downloadsへアクセス
- 「MySQL Community (GPL) Downloads >>」のリンク押下
- 「MySQL Community Server」のリンク押下
- 最新版であればこのページからバージョンを選択し「Download」ボタン押下
- もっと古いバージョンは「Archive」タブ押下でダウンロードページに遷移します。
- 最新版をダウンロードした場合、「No thanks, just start my download.」のリンク押下でダウンロードを開始
これで、mysql-8.4.3-winx64.zip
、mysql-5.7.44-winx64.zip
などがダウンロードできます。Zipファイルを展開します。
bin/
docs/
include/
lib/
LICENSE
README
share/
初期設定
ここで、展開したディレクトリ内に空のディレクトリ、ファイルを作成します。コマンドプロンプトにて、下記コマンドを実行します。
REM ↓適宜変更ください
cd path/to/mysql
mkdir data logs temp mydata
REM 空のファイルmy.iniを作成
copy nul my.ini
下記のようなディレクトリ構成になることを確認します。
bin/
data/
docs/
include/
lib/
LICENSE
logs/
my.ini
mydata/
README
share/
temp/
my.ini
を下記のように編集します。
[mysqld]
# set basedir to your installation path
basedir=./
# set datadir to the location of your data directory
datadir=./data
port=3306
socket=/temp/mysql.sock
key_buffer_size=16M
# この秒数以内(?)に完了しないクエリは処理停止する
wait_timeout=99999
# 起動するマシンスペックによって変更すること
max_allowed_packet=4G
innodb_buffer_pool_size=4G
下記コマンドでMySQLを初期化します。
bin\mysqld --initialize-insecure --user=mysql
下記のようにMySQLを開始するスクリプトrun.bat
を下記のように作成します。
REM スクリプトのあるディレクトリへcdします
cd /d %~dp0
bin\mysqld --defaults-file="./my.ini" --console
if not %errorlevel% == 0 (pause)
run.bat
をダブルクリックし起動します(ポート周りのエラーが出る場合はrun.bat
を右クリック > 管理者として実行)。これでデータベースクライアントからの接続を待ち受け続けてくれます。サーバを停止する場合は、Ctrl + C
で終了させることができます。
同様の手順で別のディレクトリに新しいZip版MySQLを展開すれば、別環境を立てることができます。また、このディレクトリを丸ごとどこかに退避しておけば、バックアップが取れます。
接続
Zip版MySQLサーバに付属しているmysql.exe
を使えば、先ほど立ち上げたMySQLサーバに接続できます。
bin\mysql.exe -uroot --skip-password
初期設定例です。
bin\mysql.exe -uroot --skip-password -e "CREATE DATABASE sample;"
クエリ実行例です。
CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));
INSERT INTO users(name) VALUES ('日本語テスト');
SELECT * FROM users;
REM ※デフォルトではsqlファイルはShift-JISとして読み込まれます。
bin\mysql.exe -uroot --skip-password sample <query.sql
bin\mysql.exe -uroot --skip-password sample -e "select * from users"
その他
ダンプ取り込みのTips
他環境から取得したダンプデータを取り込むとき、REDOログを無効にすることでdump取り込みを高速化できます(MySQL8.0以降)。REDOログを無効にするには、下記のクエリを実行します。
ALTER INSTANCE DISABLE INNODB REDO_LOG;
ダンプの取り込みが終わったら、REDOログを有効化しておきます。
ALTER INSTANCE ENABLE INNODB REDO_LOG;
SQLファイル投入のTips
Windowsでは、SQLファイルはShift-JISとして読み込まれます。UTF-8として読み込みたい場合は、my.ini
の各種セクションに追記します。
# 各セクションにそれぞれ追記
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
REM utf8のファイルOK
bin\mysql.exe -uroot --skip-password sample <utf8_query.sql