2016年06月09日

MariaDBでSQLを学ぶ [データベース複製編]

Railsで開発していると、既存のデータに修正を加えるようなSQLを含めたmigrationを作成することがあります。
データに修正を加えるmigrationはミスると絶望しかないので、まずは開発環境のデータに対して実行して検証を行うかと思います。

しかし、開発環境のデータと言えど、万が一何かあると戻すのが面倒です。
なので僕は開発環境のデータベースを複製し、そちらに対して色々実験を行うことにしています。
今回はMariaDBでデータベースを複製する方法をメモします。

手順

  • 既存DBのバックアップ
  • 新規にDBを作成
  • 新規に作ったDBにバックアップしたDBで上書き

こんな感じで行います。
結果的にバックアップも取れますが、開発環境のDBなので別にどうでもいいです。

バックアップ

バックアップの文法は以下の通り

mysqldump -u (ユーザー名) -p (パスワード) (DB名) > (出力先)/(出力ファイル名).sql

Railsでは「アプリ名称_development」と言う名前でDBが作成されますので、以下のようになるかと思います。

mysqldump -u root myapp_development > ~/Desktop/dump.sql

こうすることで、開発環境のDBがデスクトップに「dump.sql」と言う名前で保存されます。
(DBの内容をSQL文で出力するので、膨大な量のデータがあるDBには時間がかかりすぎて使えなさそうです)

複製

前述の通り、新しくDBを作成して、バックアップしたDBで上書きします。
DBの作成は -e オプションをつけて手軽に作成します。

mysql -u (ユーザー名) -p (パスワード) -e "create database (DB名)”

これで新しくDBが作成されます。
そして作成した空のDBにバックアップファイルからリストアします。

mysql -u (ユーザー名) -p (作成した空のDB名) < (バックアップしたファイル).sql

これであとは、rails db または mysql -u root でログインし、複製したDBに対してあれこれSQLを発行して試します。

他にもっと簡単な方法ありそうですが、とりあえずこれでやっています。