[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]