データベース内のすべてのテーブルとそのすべてのデータを保持する mysqldump で作成された mysql ダンプがあります。ただし、2 つのテーブルのみを復元したいと考えています。(それらkittens
を呼び出してみましょうkittens_votes
)
データベース全体を復元せずに、これら 2 つのテーブルを復元するにはどうすればよいでしょうか?
データベース内のすべてのテーブルとそのすべてのデータを保持する mysqldump で作成された mysql ダンプがあります。ただし、2 つのテーブルのみを復元したいと考えています。(それらkittens
を呼び出してみましょうkittens_votes
)
データベース全体を復元せずに、これら 2 つのテーブルを復元するにはどうすればよいでしょうか?
さて、あなたには3つの主な選択肢があります。
バックアップされたテーブルに関連するファイル内の SQL ステートメントを手動で検索し、それらを手動でコピーできます。これには単純であるという利点がありますが、大規模なバックアップの場合は実用的ではありません。
データベースを一時データベースに復元します。基本的には、新しいデータベースを作成し、そのデータベースに復元してから、そこから古いデータベースにデータをコピーします。これは、単一データベースのバックアップを行っている場合にのみうまく機能します (CREATE DATABASE
バックアップ ファイルにコマンドがない場合)。
データベースを新しいデータベース サーバーに復元し、そこからコピーします。これは、単一データベースのバックアップではなく、完全なサーバー バックアップを作成する場合に適しています。
どちらを選択するかは、正確な状況 (データの量など) によって異なります...
たとえば、正規表現を使用してCREATE TABLE kittens|kitten_votes
ANDを解析し、これらのステートメントのみを実行できます。INSERT INTO ...
私の知る限り、ダンプから「部分的に復元」する方法は他にありません。
.sql ファイルを開き、必要なテーブルの挿入ステートメントをコピーします。
これらの 2 つのテーブルのみにアクセスできる新しいユーザーを作成します。失敗したステートメントを無視し、許可されているステートメントのみを実行する -f (強制) オプションを使用して DB を復元します。
あなたが望むのは「単一テーブルの復元」です
http://hashmysql.org/wiki/Single_table_restore
いくつかのオプションが上に概説されています...しかし、私のために働いたものは次のとおりです:
$ mysql -u root -p CREATE DATABASE temp_db
$ mysql -u root -p temp_db < ~/full/path/to/your_database_file.sql
$ mysqldump -u root -p temp_db awesome_single_table > ~/awesome_single_table.sql
$ mysql -u root -p original_database < ~/awesome_single_table.sql
次に、temp_db を削除すると、すべてゴールデンになります。