Дамп данных из FireBird в Mysql

Serguitar

Новичок->продвинутый
Дамп данных из FireBird в Mysql

Кто-нибудь делал такое, подскажите?
Как технически реализовать такую задачу:
на локальной машиние создаётся дамп данных из FireBird.
Мне необходимо реализовать заливку данных из дампа в базу мускула через админский интерфейс.
Данных бывает много.
База данных в мускуле имеет те же таблицы и поля с такими же именами и свойствами, что и исходная база FireBird.
Как реализовать?
 

ForJest

- свежая кровь
Если дамп в текстовом виде, то можно преобразовать его к тому виду, в котором его есть MySQL
 

Serguitar

Новичок->продвинутый
ForJest
Если дамп в текстовом виде, то можно преобразовать его к тому виду, в котором его есть MySQL
Да, дамп в текстовом виде. Каким образом производится преобразование?
 

ForJest

- свежая кровь
Строковыми функциями - это же текст.
Сделай дамп из MySQL и сравни с дампом для FireBird. Потом устрани разницу - преобразуй текст из одного вида в другой.
 

Serguitar

Новичок->продвинутый
ForJest
Попробую. Спасибо. Об итогах - завтра.

-~{}~ 21.06.05 10:45:

ForJest
Итак, некоторые итоги.
У меня получилось преобразовать тот дамп, который был получен в вид, понятный MySQL.
Вопрос такой: нужно ли анализировать каждое значение в VALUE дампа на наличие запрещённых символов. Образно говоря, чтобы самому себя не хакнуть?
Иными словами есть запрос:
INSERT INTO LEVELS (ID, NAME) VALUES (1, 'начальный');
Сейчас у меня нет таких запросов в дампе, где есть запрещённые символы, но вдруг будет запрос типа
INSERT INTO LEVELS (ID, NAME) VALUES (1, 'д'Артаньян');?
Нужно или нет. Вот в чём вопрос.
 

tashkentchi

Новичок
Я также решал эту задачу. Проверку на наличие запрещённых символов не делал. Работает уже ~ 5 месяцев, но ошибки в связи с запрещенными символами не возникали. Но была другая проблема. FireBird все поля типа BLOB загоняет в файл *.lob а в дамп пишет строчку вида ":h[0-9A-F]{8}_[0-9A-F]{8}". Их нужно отлавливать и обрабатывать.
 

ForJest

- свежая кровь
Serguitar
Зависит от задачи. Ситуация со строкой
'д'Артаньян' - как она может возникнуть? FireBird должен каким-либо образом экранировать спец-символы. И значит это можно легко обработать.
А нужно или нет - решать тебе. Я пожалуй считаю что лучше сделать, чтобы не напороться в будущем.
 

Serguitar

Новичок->продвинутый
tashkentchi
Понятно. Эту проблему я уже решил.
Появилась другая.
Одно из полей в таблице базы Firebird имеет имя зарезервированного слова Level.
Дампер пишет его как INSERT INTO table (id, "level", ....
Мускул понимать такой синтаксис отказывается. Кто даст ссылку почитать что-нит про то, как поступать, если в мускуле поля названы зарезервированными словами.

-~{}~ 21.06.05 13:50:

Всё нормально... Проблему решил. Спасибо всем.
 

alexhemp

Новичок
Serguitar

http://www.mysql.ru/docs/man/Legal_names.html

Синтаксис
`column_name` - Имя столбца является ключевым словом или содержит специальные символы.
 

Serguitar

Новичок->продвинутый
alexhemp
Всё нормально... Проблему решил. Спасибо всем.
Именно там и прочитал. Спасибо. Правда, за час до твоего поста. Но всё равно спасибо за отклик.
 

tashkentchi

Новичок
Автор оригинала: ForJest
'д'Артаньян' - как она может возникнуть? FireBird должен каким-либо образом экранировать спец-символы. И значит это можно легко обработать.
В моем случае, FireBird (вернеее программер, который с ним работал) заменял д'Артаньян на д`Артаньян. Но не факт, что всегда будет именно такая замена. Зависит от реализации.
 

Serguitar

Новичок->продвинутый
tashkentchi
Я ВСЁ анализирую сам. База уже давно функционирует, теперь появилась необходимость сделать интернет-сайт с аналогичным содержанием с запазданием обновления 1-2 часа. Вот и парюсь. Если бы сразу разработка велась параллельно, то мы бы с тем программером перетёрли все моменты. Теперь поздновато. Но ничего. Основной анализатор уже написал. А дальше дело техники.
 

slach

Новичок
Зачем тогда делать через дамп ??
напиши Middleware брокера
который будет работать с двумя источниками данных базами...

один Source другая Destination

или что такое Database Abstraction Layer ты не в курсе ?
 

Serguitar

Новичок->продвинутый
slach
Первая база лежит на локальном компьютере и не доступна из сети. Так что по-другому эта проблема не решается.

-~{}~ 21.06.05 16:16:

Вообще нужна новая тема, но фактически вопрос является продолжение этой.
Чтобы выбирать из дампа только необходимые мне строки дампа, а точнее запросы INSERT.
Написал регулярку, которая в цикле выбирает только то, что нужно. Вот она
PHP:
preg_match_all("/((?<=INSERT)[\w\s\d\.,\:_\-\(\)\"\'\/]*(?=\);))/i", $fp, $inserts)
Проблема такая. Если в строке, которая стоит между INSERT и сравниваемым символом конца запроса ); стоит слово LEVEL(причём неважно в какой комбинации LEVEL_ID EDUCATION_LEVEL), то регулярка его не принимает. Почему? Если убрать хоть одну букву именно из слова LEVEL - всё путём. Помогите, регулярщики!

-~{}~ 21.06.05 16:17:

)<img src="images/smilies/wink.gif" border="0" alt="">)
Вот этой дряни там нет. Там ;)
 

alexhemp

Новичок
Serguitar

А почему не сделать редирект порта на шлюзе и не коннектиться через ibase_* ф-ции к нему?

На шлюзе же файрволом открыть коннект только с Web-сервера
 

Serguitar

Новичок->продвинутый
alexhemp
Этот комп вообще в другом здании, на другой улице, в другом районе, если хочешь. Я не могу это сделать. Это не я себе такие трудности выдумываю. Передо мной ставят задачи, я пытаюсь их решить.
 

alexhemp

Новичок
Serguitar

Ну если расстояние большое и сети никак не связаны - тогда конечно. Но если Web-сервер стоит просто до шлюза то тогда проще порт пробросить ;-)

По сути ты разрабатываешь механизм Interbase to MySQL migration... интересно, есть ли обратный вариант... Я вот думаю - переходить на FireBird ;-)
 

Serguitar

Новичок->продвинутый
alexhemp
да... уже разработал почти.
Я бы не парился, если бы была возможность.
 

delhin

Новичок
Автор оригинала: alexhemp
Serguitar
.. интересно, есть ли обратный вариант... Я вот думаю - переходить на FireBird ;-)
нормального обратного варианта нет, но перевод из мускула на ФБ достаточно прост, я за пару часов написал скрипт переноса структуры таблиц и данных.
Единственно что необходимо сделать в мускуле это в таблицах где есть его по кривому реализованные типы данных - DATE,TIME,DATETIME, убрать признак not null и проапдейтить поля заменив "0000-00-00..." на null.
А в остальном все нормально переносится.
Да и после переезда почуствуеш себя на коне, а не на кривом самокате ;)
 
Сверху