2012-02-10 10 views
1

問題があります。代わりにlaunchinスクリプトmysql:バックアップからカラムの値を復元する

UPDATE table_name SET field=value WHERE id=12345 

の私は

UPDATE table_name SET field=value 

データベースは、(mysqldumpを持つ)毎日バックアップされる立ち上げました。バックアップを使用してその列の値を復元する最も簡単な方法は何ですか。明らかに、私はデータベースが大胆に変更されているので、そのバックアップをdirrectly適用することはできません。

ありがとうございます!

あなたが別のデータベースにバックアップをロードし(DB1は、生産DBとDB2が一時データベースであると仮定して)このようなものを作ってみることができます
+0

、その後、ロールバック...:D時間前に行われた –

+0

。どのようにロールバックできますか? – Eugeny89

答えて

4

私が作成します新しいテーブル 'table_name2'は 'table_name'と同じですが、バックアップのデータが含まれています。

その後、このクエリを使用します。

UPDATE table_name SET 
table_name.field = (SELECT table_name2.field 
        FROM table_name2 
        WHERE table_name.id = table_name2.id) 
1

update db1.table set db1.field = db2.field where db1.id = db2.id 
1

だからあなたは内のすべての値を一掃すべての値を正しい行に戻したいのですか?

私は別のデータベースにバックアップを解凍し、最初にこれを試して、私はまた、あなたのライブサイトの複製を作る推薦

UPDATE live_db.table_name live 
INNER JOIN backup_db.table_name backup 
     ON live.id = backup.id 
     SET live.field = backuop.field 

のような何かをすることをお勧め;)

2

私は次のSQLを実行し、table_name_bckと呼ばれる別のテーブルのテーブルのバックアップを復元します。

UPDATE table_name_bck tb, table_name t 
SET t.field = tb.field 
WHERE tb.id = t.id 

もちろん、状況を悪化させないようにする前に、テスト環境でこれを試してください。

出典:データベースがコミットされていない場合http://www.electrictoolbox.com/article/mysql/cross-table-update/

関連する問題