web-dev-qa-db-ja.com

MySQLバックアップファイル(* .sql)をマージする方法

*.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;
5
Jack

.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ステートメントなどのデータ定義言語を含めないでください。これらのステートメントのみを含み、データを含まない個別のファイルを作成し、必要に応じてそれらを保持できます。

3
O. Jones

Ollieの答えは今何をすべきかをカバーしています-DROP TABLECREATE 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 ...
1
Rick James