Сравнение 2 баз данных

Qwest-fx

Профессор
Регистрация
3 Апр 2007
Сообщения
134
Реакции
41
Имеется 2 базы от старой и новой CMS нужно собрать базу для новой CMS.
Под рукой имеется Linux Gentoo, как решается это задача?

И есть ли какое автоматизированное решение?

Первый вариант, colordif
Для сравнения структуры, т.е. имена таблиц и полей в них.
 
Есть серия замечательных продуктов - правда под Windows,
например если у вас база MYSQL то
Для просмотра ссылки Войди или Зарегистрируйся - сравнивает схемы ( таблички и так далее)
Для просмотра ссылки Войди или Зарегистрируйся - данные сравнивать

PS : под линукс нормальных средств нету к сожалению
 
Пришлите пожалуйста куски из данных БД и скажите в каком виде должна быть конечная БД.
В вашем сообщении нет конкретики, сложно понять характер требуемых данных на выходе.
 
Базу соединил, использовал TextDiff (для сравнения структуры) и heidisql (удобно перегонять данные в (в несколько кликов из одной дб в другую))
для того чтобы совпали ключил, сделал экспорт sql, и написал небольшой скрипт чтобы эти самые ключи, новые поставить.

пример скрипта


PHP:
<?php
 
 
error_reporting(PHP_INT_MAX);
 
$f = file('sql.txt');  // исходный массив!
$f2 = file('sql2.txt');
 
$id_new = 310;
$s = sizeof($f);
$s2 = sizeof($f2);
 
echo '<pre>';
for ($i = 0; $i < $s; $i++) {
    preg_match("#VALUES\s\((\d+),#", trim($f[$i]), $id);
    $old = 'VALUES (' . $id[1] . ',';
    $new_ = 'VALUES (' .$id_new . ',';
    //echo str_replace($old, $new_, $f[$i]);
    for ($c = 0; $c < $s2; $c++) {
        preg_match("#VALUES \((\d+), (\d+), (\d+), '(\d+)', (\d+), '(\d+)'\)#", trim($f2[$c]), $id2);
 
        if ($id2[5] == $id[1]) {
            $new = 'VALUES (' . $id2[1] . ', ' . $id2[2] . ', ' . $id2[3] . ', \'' . $id2[4] . '\', ' . $id_new . ', \'' . $id2[6] . '\')';
            $f2[$c] = str_replace($id2[0], $new, $f2[$c]);
            echo $f2[$c];
        }
    }
    $id_new++;
}
 
echo '</pre>';
 
Назад
Сверху