mydump разных таблиц

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Закрыто
imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

mydump разных таблиц

Сообщение imobile » Пн 30 апр 2012 12:28

Здравствуйте.
Mysql5.5 Builder XE2
Столкнулся с проблемой добавления столбцов в каждой новой версии моей программы. Постоянно приходится модернизировать программу, трудно предусмотреть все на стадии проектирования. В результате появляются ошибки, столбец такой-то не найден. Таблицы с данными, поэтому, очень большой риск и решил проконсультироваться.
Для решения этой проблемы хочу использовать mydump. В нем есть свойство dotables его отключаю. Делаю резервную копию базы. Удаляю базу. Создаю новую с добавленными столбцами. Востонавливаю БД.
Так у меня появится возможность не следить за столбцами, при условии, что я их добавляю.

Код: Выделить всё

MyDump1->Connection->Close();
MyDump1->Connection->Options->Charset="";
MyDump1->Connection->Options->UseUnicode=true;
MyDump1->TableNames="";//dotables=false
AnsiString fn="c:\\temp\\co.bin";
MyDump1->BackupToFile(fn);
MyDump1->Connection->Close();
//удаляю бд
//создаю новую бд
//восстонавливаю БД
Вопрос: будет ли это работать Может есть решения лучше?

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: mydump разных таблиц

Сообщение Alexp » Пн 30 апр 2012 14:03

Добрый день,

Да такой подход возможен, но кроме отключения doTable, Вам также необходимо включить опцию
CompleteInsert,

Код: Выделить всё

MyDump1->Options->CompleteInsert = True;
так как без этой опции запрос на вставку данных будет формироваться без названия полей и после добавления поля в таблицу при попытке вставки данных возникнет ошибка.
Кроме того перед восстановлением данных также необходимо отключить все constraint, так как при вставке данных возможны нарушения этих constraint.
И перед всеми операциями мы рекомендуем сделать полный дамп средствами самого сервера, для гарантии сохранности данных в случае непредвиденных ситуаций.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: mydump разных таблиц

Сообщение imobile » Пн 30 апр 2012 17:16

Спаибо.
А как отключить все constraint?

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: mydump разных таблиц

Сообщение imobile » Пн 30 апр 2012 20:07

И еще, почему так медленно? я что-то написал не так? Как ускорить?
Сохраняет 1-2 мин. - Приемлимо. Восстанавливает - уже вторые сутки пошли, так ни годится.
CompleteInsert = True;
Вот код

Код: Выделить всё

if (FolderDialog1->Execute())
{
MyDump1->Connection->Close();
MyDump1->Connection->Options->Charset="";
MyDump1->Connection->Options->UseUnicode=true;
MyDump1->TableNames="";
AnsiString fn=FolderDialog1->Directory+"\\tmp.bin";
 ProgressBar1->Position=0;
MyDump1->BackupToFile(fn);
MyDump1->Connection->Close();
//

//---------------------------------
AnsiString sct="DROP DATABASE IF EXISTS "+Form1->ComboBox1->Text;
MyConnection2->ExecSQL(sct,NULL,0);
// удалить таблицы(бд)
//---------------------------------
// востановит таблицы
  MyConnection2->Database = "mysql";
  MyConnection2->Connect();
   MyConnection2->ExecSQL("CREATE DATABASE IF NOT EXISTS `"+Form1->ComboBox1->Text+"` CHARACTER SET utf8 COLLATE utf8_general_ci",NULL,0);
   MyConnection2->Database=Form1->ComboBox1->Text;
 MyConnection2->Connect();
Form1->createtab();
//----------------------------------
// восстановить бд
 MyDump1->Connection->Close();
MyDump1->Connection->Options->Charset="";
MyDump1->Connection->Options->UseUnicode=true;
MyDump1->TableNames="";
//AnsiString fn=FolderDialog1->Directory+"\\tmp.bin";
 ProgressBar1->Position=0;
MyDump1->RestoreFromFile(fn);
MyDump1->Connection->Close();
}

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: mydump разных таблиц

Сообщение Alexp » Ср 02 май 2012 12:53

Добрый день,

мы проверили время восстановления БД из созданного дамп файла - и процесс восстановления данных занимает ориентировочно в три раза больше времени чем процесс сохранения. Т.е. на вашей базе должно быть до 10 минут. Однако кроме отключения constraint (SET FOREIGN_KEY_CHECKS = 0;), также следует отключить индексацию, триггеры, и т.д., для ускорения вставки данных.
Если после отключения всех проверок, индексов и т.д. время вставки данных не уменьшиться, попробуйте вставить данные из сформированного дамп файла используя консоль mysql и сообщите нам результат.

P.S. Также вам нет необходимости включать в файл дампа операции TRUNCATE TABLE, так как блицы уже существуют и в нет данных, для этого необходимо отключить опцию AddDrop

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: mydump разных таблиц

Сообщение imobile » Ср 02 май 2012 14:36

Запустил скрипт в dbforge выполнился за 2 минуты. Кажется разобрался. Все дело в бегунке. По завершению я его не поставил в 0 и он застревал на неправильном положении 80из100, ожидал что он дойдет до 100. Я то думал, что он все еще делает, а все закончилось.
Спасибо большое.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: mydump разных таблиц

Сообщение Alexp » Ср 02 май 2012 14:46

Добрый день,

Рад что проблема решена. Если у Вас возникнуть еще какие либо вопросы связанные с нашими продуктами обращайтесь к нам снова

Закрыто