2009-09-10 13 views
5

Moja firma przenosi obecnie nasze bazy danych, przenosząc jeden zestaw tabel ze starej instancji MySQL do nowej. Przed tą migracją opracowaliśmy pewne rozwiązania, a niektóre struktury tabel zostały zmienione z oryginału (np. Pominięto kolumny).Migracja MySQL do tabeli o innej strukturze

Więc obecnie wyrzuciłem dane ze starej bazy danych i teraz próbuję ponownie wstawić je do nowej tabeli. Oczywiście, importuje borks, gdy próbuje wstawić wiersze z większą liczbą pól niż tabela.

Jaki jest najlepszy sposób (najlepiej skryptowy, ponieważ przewiduję, że muszę to zrobić jeszcze kilka razy), aby zaimportować tylko potrzebne pola do nowej tabeli?

Odpowiedz

2

Aktualizacja następujące dostosowane:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');' 
    FROM OLD_TABLE ot 

Trzeba INSERT do tabeli na nowej bazie danych, z listy kolumnowej. Następnie zapełnij odpowiednio część wartości na podstawie wartości w starej tabeli. Uruchom w starym środowisku, a będziesz mieć swoje wstawki z danymi do nowego środowiska - po prostu skopiuj "wklej" do skryptu.

Pamiętaj, że te typy danych muszą być odpowiednio traktowane - daty (w tym czas) i łańcuchy będą musiały być obsługiwane, ponieważ masz do czynienia z tekstem.

0

Jeśli używasz MySQL 5.1, potężnym, choć może w tym przypadku przesadą, rozwiązaniem jest zrobienie xml mysqldump i użycie XSLT do przekształcenia go. Niestety ponowne zaimportowanie tego pliku xml nie jest obsługiwane w wersji 5.0, będziesz potrzebował 5.1, 5.4 lub 6.0

2

Po pierwsze utwórz nową bazę danych ze starą strukturą lub tabelami tymczasowymi w bieżącej bazie danych. Następnie uruchom skrypt z instrukcjami wstawiania dla każdego wiersza, ale w wartościach muszą znajdować się tylko te pola, które są w nowej strukturze.

insert into newTable select row1,row2 from tempTable 
1

Stosować najszybciej dane plik_we sposób obciążenie:

- Dump dane teleadresowe

SELECT * INTO OUTFILE 'mybigtable.csv' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM mybigtable 

- dane teleadresowe obciążenia

LOAD DATA LOCAL INFILE 'mybigtable.csv' 
    INTO TABLE mynewbigtable 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
    (@col1,@col2,@col3,@col4) set [email protected],[email protected]; 

Ref:

http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html

http://dev.mysql.com/doc/refman/5.6/en/load-data.html

Powiązane problemy