こんにちは、mysql 管理者を使用して、バックアップ ファイル (backup.sql) を復元しました。データなしで構造を復元したいのですが、そうするオプションがありません。phpadminがこれを提供していることを理解しています。しかし、私はこれを使用することはできません。どなたか簡単に教えて頂けないでしょうか?
6 に答える
データベース構造のみをダンプします。
cat backup.sql | grep -v ^INSERT | mysql -u $USER -p
これにより、テーブルに入力されたINSERT行を除いて、backup.sqlファイル内のすべてが実行されます。これを実行すると、元のデータベースにあったストアドプロシージャ/ビューなどとともに、完全なテーブル構造が得られるはずですが、テーブルはすべて空になります。
sed を使用して、ダンプ内の ENGINE を BLACKHOLE に変更できます。
cat backup.sql | sed 's/ENGINE=(MYISAM|INNODB)/ENGINE=BLACKHOLE/g' > backup2.sql
このエンジンは INSERT ステートメントを「飲み込む」だけで、テーブルは空のままになります。もちろん、次を使用してエンジンを再度変更する必要があります。
ALTER TABLE `mytable` ENGINE=MYISAM;
INSERT コマンドをスキップするように mysql クライアントに指示する方法はありません。これを行うための最も手間のかからない方法は、スクリプトをそのまま実行し、データをロードしてから、すべてのテーブルを TRUNCATE することです。
次のことを行うスクリプトを作成できます。
1 : ダンプを新しいデータベースにインポートします。
2 : すべてのテーブルをループで切り捨てます。
3 : データベースを再度エクスポートします。
4 : これで構造ができました
IIRC backup.sql ファイル (mysqldump によって作成された場合) は、テキスト ファイル内の単なる SQL コマンドです。ファイルの先頭からすべての「create ...」ステートメントをコピーして貼り付けますが、「insert」ステートメントは別のファイルにコピーして貼り付けず、「mysql < newfile」と入力すると、データのない空のデータベースが作成されます。