2016-10-13 3 views
0

システムコールでMySQLDumpを使用して、あるデータベースからテーブルをエクスポートし、別のデータベースに(選択的に)インポートします。私の問題は、ソースデータベースサーバーでは、一部のテーブルが別の(暗号化された)ディレクトリにあり、ターゲットサーバー上にターゲットデータディレクトリが存在しないことです。基本的に私が望むすべて'DATA DIRECTORY'を持たないMySQLDump

/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `AnExampleTable` (
    `id` int unsigned NOT NULL AUTO_INCREMENT, 
    `type_id` int unsigned DEFAULT NULL COMMENT 'FK The system type.', 
    `resource` varchar(64) DEFAULT NULL COMMENT, 
    `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`ActionSystemPendingId`), 
    UNIQUE KEY `resource_type` (`type_id`,`resource`), 
    KEY `created_at` (`created_at`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 DATA DIRECTORY='/mnt/mysqlEncrpyted/'; 
/*!40101 SET character_set_client = @saved_cs_client */; 

/*!40000 ALTER TABLE `AnExampleTable` DISABLE KEYS */; 
-- data inserts 
/*!40000 ALTER TABLE `AnExampleTable` ENABLE KEYS */; 
/*!40103 SET [email protected]_TIME_ZONE */; 

/*!40101 SET [email protected]_SQL_MODE */; 
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; 
/*!40014 SET [email protected]_UNIQUE_CHECKS */; 
/*!40111 SET [email protected]_SQL_NOTES */; 

:暗号化されたディスクに保存されているこれらのテーブルには

mysqldump --skip-opt --skip-comments --no-create-db --disable-keys 
    --extended-insert --quick --create-options --login-path=sourcedb 
    source_database_name source_table | 
mysql --login-path=targetdb target_database_name 

は、ダンプは次のようになります。

私の現在のコマンドは次のようになりますを行うにはsedに頼らなくても、クエリからのドロップがDATA DIRECTORY='/mnt/mysqlEncrpyted/'になります。

これは(私が言ったように)システムコールを介して行われ、いくつかのテーブルは特別なデータディレクトリには存在しないため、正常です。私が望むのは、それを取り除く旗です。

答えて

1

このようなオプションはありません。 mysqldumpは、サーバーが生成する出力をSHOW CREATE TABLEから使用して出力を生成します。それは最初から出力を構築しません。

sedを使用してください。またはPerlなどのツールを使用してパイプすることもできます。

+1

最後に、私はsedを通してそれをパイプしました。かなりの解決策ではありませんが、うまくいきました。 – samlev

+0

mysqldumpの出力フォーマットを理解し、ダンプファイルをストリームとして書き直すことができる、my-dump-filterと呼ばれる、最終的にはリリース予定のユーティリティを書きました。名前のリストからスキーマ全体を含める/除外する、ストレージエンジンを変更する、テーブル定義とデータを別々のファイルに分割する、DEFINER文を削除する(Amazon RDSの場合)ウィッシュリストにデータディレクトリを削除または変更することを追加します。 –

関連する問題