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

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

[markdown]
## 調査

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

> * [MySQL で特定のテーブルのみをバックアップ | EasyRamble](http://easyramble.com/backup-only-mysql-tables.html)
>
> Rails の場合、-t オプションを付けたほうが良いと思います。これは、「テーブル作成情報(CREATE TABLE ステートメント)を書き込まない」オプション。Rails の場合、テーブル作成情報はマイグレーションファイルに含まれるので、sql ダンプには不要です。

バックアップ

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

リストア

“`prettyprinted
$ mysql -u ユーザ名 -p データベース名 < ダンプファイル名 ``` ### mysqldump のオプション > * [MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム](https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html#option_mysqldump_no-create-info)
>
> –no-create-info, -t
> ダンプされた各テーブルを再作成する CREATE TABLE ステートメントを書き込みません。

## 実行例

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

“`prettyprinted
% /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 が含まれる。

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

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

“`prettyprinted
% /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 のみとなる。

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

### 手順メモ

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

“`prettyprinted
% bin/rake db:reset RAILS_ENV=production
% mysql -u bar -p foo_production < db/dump_items.sql ``` [/markdown]