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

Тема в разделе "Базы данных", создана пользователем Qwest-fx, 5 окт 2012.

Модераторы: latteo
  1. Qwest-fx

    Qwest-fx Постоялец

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

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

    Первый вариант, colordif
    Для сравнения структуры, т.е. имена таблиц и полей в них.
     
  2. EugeneVC

    EugeneVC

    Регистр.:
    28 окт 2007
    Сообщения:
    297
    Симпатии:
    83
    latteo и Qwest-fx нравится это.
  3. Belora23

    Belora23 Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    65
    Симпатии:
    4
    Пришлите пожалуйста куски из данных БД и скажите в каком виде должна быть конечная БД.
    В вашем сообщении нет конкретики, сложно понять характер требуемых данных на выходе.
     
  4. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    129
    Симпатии:
    39
    Базу соединил, использовал 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>';