目的
テスト環境で動作させ、その設定を本番環境へ複写する機能のテストを行う機能のテストを行います。そのために、DBの複製環境を作成することを目的とします。
前提事項
- 作成済み(稼働中)の環境があること
- データの複写テストであるため、テーブルだけを対象とする(ViewやTrigger等は意識していません)
- MySQLのadmin権限のユーザーで操作できる
実施手順
Windows環境を使用し、ある程度は自動化したいという気持ちがあったのでコマンドプロンプトでコマンドを実行していきます。
作っておくと楽だと思うもの
何度か接続することになるので、パスワードを入力すればいい状態にしておきます。このbatを実行してパスワードを入力すれば接続完了です。
MysqlLogin.bat
rem * admin権限での接続情報
set userName=admin
set hostName=host
set dbName=targetDatabase
mysql --username=%userName% --host=%hostName% -p
既存環境から定義情報を取得
既存のDBからテーブル定義を取得します。今回は環境の複製が目的のため、データは取得しないオプション「--no-data」を指定しています。
mysqldump.bat
rem * 複写元となるデータベースの接続情報
set userName=admin
set hostName=host
set dbName=targetDatabase
rem * 取得する定義情報の出力先(batファイルと同じ場所、同じ名前で拡張子を「sql」として保存)
set outputFileName=%~dpn0.sql
rem * 対象の環境を指定、このコマンドのあとにパスワードを入力します
mysqldump --username=%userName% --host=%hostName% -p --no-data %dbName% > %outputFileName%
オプションの指定を「-u」ではなく「--user」のようにしているのは、この方がコマンドを覚えやすいという個人的な好みの問題です。
複製先のデータベースを作成
dbの作成自体は1文で済みます。
-- db作成
create database db_name;
-- 作成されていることを確認
show databases;
複製先のデータベースへテーブルを作成
データベースへ接続し、mysqldumpで取得した内容を実行します。
-- 複製先のDBを選択
use db_name;
-- エラーを回避するためのコマンドを実行する(具体的なコマンドは思い出したら書きます...)
-- smysqldumpを実行し、取得したsqlファイルの内容を実行
外部ファイルを取得してテーブル生成するように書けば、ほぼ自動化することができます。
今回は一回きりの実行だったのでそこまでやっていませんが、定期的に「本番環境→開発環境」の複製が必要であれば、仕組みとして作ってしまった方がよさそうですね。
参考情報
- mysqldump のオプション一覧
- mysql で使用したコマンドのヘルプ関連