52444
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名を変更しておき、最後に２つのmytableを結合させる方法はしっておりますが、復元させないといけないファイル数が多いため、別の方法を探しています。

もしご存知の方がおられましたら、ご教授をお願いします。  
よろしくお願いします。
CC BY-SA 4.0
2019-01-31T02:54:12.810
52440
2019-01-31T16:05:17.563
2019-01-31T16:05:17.563
11048
11048
question
mysql
MySQLの複数のバックアップデータをリカバリーする方法
ダンプ結果はテキスト形式で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 —
データベースバックアッププログラム](https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html)

>
```

>     --skip-add-drop-table
>         DROP TABLE ステートメントを CREATE TABLE ステートメントの前に追加しない
>  
```
CC BY-SA 4.0
2019-01-31T05:50:04.843
52444
2019-01-31T05:50:04.843
3060
52440
answer