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?

More than 5 years have passed since last update.

mySQLのDBを複製する手順

Posted at

目的

テスト環境で動作させ、その設定を本番環境へ複写する機能のテストを行う機能のテストを行います。そのために、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ファイルの内容を実行

外部ファイルを取得してテーブル生成するように書けば、ほぼ自動化することができます。
今回は一回きりの実行だったのでそこまでやっていませんが、定期的に「本番環境→開発環境」の複製が必要であれば、仕組みとして作ってしまった方がよさそうですね。

参考情報

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?