[Ruby on Rails 4] Rails で mysqldump する場合は no-create-info オプションを付けると良い

migration file にテーブル作成情報が含まれるので、ダンプには不要では?と思い調べました。

調査

こちらで紹介されていました。
ありがとうございます。

Rails の場合、-t オプションを付けたほうが良いと思います。これは、「テーブル作成情報(CREATE TABLE ステートメント)を書き込まない」オプション。Rails の場合、テーブル作成情報はマイグレーションファイルに含まれるので、sql ダンプには不要です。

バックアップ

$ mysqldump -u ユーザー名 -p -t データベース名 テーブル1 テーブル2 ... > ダンプファイル名

リストア

$ mysql -u ユーザ名 -p データベース名 < ダンプファイル名

mysqldump のオプション

–no-create-info, -t
ダンプされた各テーブルを再作成する CREATE TABLE ステートメントを書き込みません。

実行例

オプションなしでダンプすると

% /usr/local/bin/mysqldump foo_production items --result-file=/Users/****/dump_items.sql --user=bar --host=127.0.0.1 --port=3306 --password

drop, create が含まれる。

DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
    :
LOCK TABLES `items` WRITE;
INSERT INTO `items` VALUES (
    :

-t オプション(--no-create-info)を付けると、

% /usr/local/bin/mysqldump foo_production items --result-file=/Users/****/dump_items.sql --no-create-info --user=bar --host=127.0.0.1 --port=3306 --password

insert のみとなる。

LOCK TABLES `items` WRITE;
INSERT INTO `items` VALUES (
    :

手順メモ

DB を作り直して、リストアする。

% bin/rake db:reset RAILS_ENV=production
% mysql -u bar -p foo_production < db/dump_items.sql