2016-10-13 5 views
0

Я использую MySQLDump через системные вызовы для экспорта таблиц из одной базы данных и их импорта (выборочно) на другой. Моя проблема заключается в том, что на исходном сервере базы данных некоторые таблицы находятся в другом (зашифрованном) каталоге, а на целевом сервере нет целевого каталога данных.MySQLDump без 'DATA DIRECTORY'

Моя текущая команда выглядит примерно так:

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 

В этих таблицах хранятся на зашифрованном диске, свалка выглядит примерно так:

/*!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 */; 

По сути все, что я хочу это сделать DATA DIRECTORY='/mnt/mysqlEncrpyted/' из запроса, не прибегая к sed.

Это делается (как я сказал) через системные вызовы, а некоторые таблицы точны, потому что они не живут в специальном каталоге данных. Все, что я хочу, это флаг, который вытесняет его.

ответ

1

Нет такого варианта. mysqldump использует вывод, который сервер генерирует от SHOW CREATE TABLE для генерации своего вывода. Он не создает выход с нуля.

Использование sed. Или через Perl или аналогичный инструмент.

+1

В конце концов, я просто передал его через sed. Не очень красивое решение, но оно сработало. – samlev

+0

Я написал (и продолжаю работать) утилиту, в настоящее время внутреннюю, но которую я планирую в конечном итоге выпустить, с термическим названием «my-dump-filter», который понимает формат вывода mysqldump и может переписывать файлы дампа как поток. такие как переписывание имен баз данных, включение/исключение целых схем из списка имен, изменение механизмов хранения, разделение определений таблиц и данных на отдельные файлы, удаление операторов 'DEFINER' (для Amazon RDS). Я добавлю удаление или изменение каталога данных в список пожеланий. –

Смежные вопросы