質問: MySQLの複数のバックアップデータを一度にリカバリーする方法をお尋ねしたいです。 mysqldumpコマンドを使って、いくつかのテーブルの保存をとりました。 ここでは仮に以下のようにしておきます。 ``` mysqldump -u root -pxxxxxxxxxx mytable > mytable.2019-01-30.sql ``` この方法をつかって、定期的にバックアップをとっておりました。 ただ途中でtableのサイズが大きくなりますので、バックアップをとった後は、drop tableを使って削除して、また新たにcreate table mytableを作っています。 結果として、 mytable.2019-01-30.sql mytable.2019-01-23.sql mytable.2019-01-16.sql を作成したとしてください。 リカバリーの方法としては、 ``` mysql -u root -pxxxxxxxxxx DATABASE < mytable.2019-01-30.sql ``` でバックアップデータを回復させることは知っております。 現在困っていることは、 ``` mysql -u root -pxxxxxxxxxx DATABASE < mytable.2019-01-30.sql mysql -u root -pxxxxxxxxxx DATABASE < mytable.2019-01-23.sql mysql -u root -pxxxxxxxxxx DATABASE < mytable.2019-01-16.sql ``` と行ったときに、最後(?)のtableしかリカバリーされないことです。(他2つのtableは消去(?)されてしまいます。) table名が同じで、中身のstructureも同じtableを「追加」でリカバリーして、3つのsqlファイルを1つのtableでリカバリーさせる方法はございますでしょうか? 具体的には、 mytable.2019-01-30.sql mytable.2019-01-23.sql mytable.2019-01-16.sql のファイル内容をすべてmytableに再収納させたいです。 ファイルをリカバリーさせて、renameでtable名を変更しておき、最後に2つのmytableを結合させる方法はしっておりますが、復元させないといけないファイル数が多いため、別の方法を探しています。 もしご存知の方がおられましたら、ご教授をお願いします。 よろしくお願いします。
回答: ダンプ結果はテキスト形式でSQL文が書かれていますので、一度中身を覗いてみることをおすすめします。 `mysqldump`をデフォルトで実行すると、ダンプしたSQLにはテーブル作成前に予め`drop table`文が挿入されているので、複数回リストアを実行した場合にも最新分しか反映されないようになります。 ``` DROP TABLE IF EXISTS `comments`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `comments` ( ``` これを回避するには、(二回目以降の)バックアップ時に`--skip-add-drop-table`オプションを付けるとよいでしょう。 ただし重複するデータがある場合をケアする必要があるかもしれません (私もMySQLは最近使い始めたばかりなので、あまり自信はありません)。 参考: 4.5.4 mysqldump — データベースバックアッププログラム > > > ``` > --skip-add-drop-table > DROP TABLE ステートメントを CREATE TABLE ステートメントの前に追加しない > > ``` > >