1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsで複数のMySQL環境(データ込み)を管理する

Posted at

概要

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.zipmysql-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を下記のように編集します。

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を下記のように作成します。

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;"

クエリ実行例です。

query.sql
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の各種セクションに追記します。

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?