*.SQL
形式のデータベースのMySQL
バックアップファイルがいくつかあり、これらのファイルを使用してデータベースを復元したいと考えています。ただし、sqlファイルには"DROP TABLE"
定義が含まれているため、1つのスクリプトを実行すると、前のスクリプトによって作成されたデータが削除されます。これらのSQLファイルに加えて、*.FRM
および*.MYD
ファイルを含む他のバックアップフォルダーもあります。 2つのケースのすべてで、これらのバックアップはDifferential
またはIncremental
であり、それらすべてをマージ/結合する必要があると思います。もしそうなら、データを失うことなくそれらをどのように組み合わせることができますか?私はMySQL
の経験がないので、可能であればMySQL Workbench
を使用して方法を説明できますか?前もって感謝します。
Sqlファイルの1つからのいくつかの行:
DROP TABLE IF EXISTS `BLACKLIST`;
CREATE TABLE `BLACKLIST` (
`ID` int(11) NOT NULL auto_increment,
`NAME` varchar(30) NOT NULL,
`SURNAME` varchar(30) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `BLACKLISTINDEX` (`NAME`,`SURNAME`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
.SQLファイルはテキストです。テキストエディタで開くことができます。次に、DROP TABLE
およびCREATE TABLE
ステートメントを見つけて削除します。最後に、ワークベンチまたは他のクライアントを使用して、残りのINSERTステートメントを実行します。
差分バックアップと増分バックアップについては、SQLファイルを正しい順序で復元して、希望する結果を得る必要があります。それはあなたが実際にあなたが持っているファイルから非常に注意深くその順序を考え出す必要があることを意味します。 Oracleのような商用RDMSには、増分および差分バックアップを作成するための精巧なスキームと、それらを復元するためのスキームがあります。 MySQLにはそのようなものはないので、あなたが持っているものはすべて自家製か、ある種のサードパーティのソフトウェアパッケージに基づいています。
これが私のプロジェクトの場合、データベースとすべてのバックアップファイル、.frmファイル、およびその他のものの犠牲的なコピーを作成します。次に、適切な順序でファイルを復元しようとするのに失敗します。
自分のコピーが正しいと確信できたら、全体のSQLバックアップを作成します。実際には2つのバックアップ項目を作成します。1つはCREATE TABLEステートメントのみを含み、もう1つはデータのみを含みます。ワークベンチはそれを行うことができます。
次に、クリーンなバックアップを復元して、新しい本番データベースを作成します。
ワークベンチで実行できないことは、FRMファイルとMYDファイルを使用してユーザーを支援することです。それらを使用するには、それらをサーバーファイルシステムの適切な場所に配置し、それらを参照しているMySQLサーバーを再起動する方法を理解する必要があります。これらのファイルをバックアップとして扱うことは 不規則で危険なビジネス です。それらを正常に復元した場合は、その成果をしゃべるロバと考えてください。それがうまく機能しないのは当然のことですが、まったく機能しないのは不思議です。
今後:通常のSQLバックアップファイルには、DROP TABLEやCREATE tableステートメントなどのデータ定義言語を含めないでください。これらのステートメントのみを含み、データを含まない個別のファイルを作成し、必要に応じてそれらを保持できます。
Ollieの答えは今何をすべきかをカバーしています-DROP TABLE
とCREATE TABLE
を取り除くために100ファイルを退屈に編集してください。
将来的には、これで(おおよそ)これらのステートメントの作成を防ぐことができます。
mysqldump --skip-add-drop-table --no-create-info --no-create-db ...
Dev.mysql.com/doc/refman/5.6/en/mysqldump.htmlを参照してください
ところで、これもあり、CREATEs
だけを提供します。
mysqldump --no-data ...