Konwersja bazy danych z MySQL do PostgreSQL
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Pozdrawiam, Bartek
Cytowanie Bartek Swedrowski bartek@idk.net.pl:
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Tak z czystej ciekawości... jak chcesz tą konwersję przeprowadzić?
Pozdrawiam, chyba najbezpieczniejszy i sprawdzony sposób: 1. Zapisujesz całą bazę phpmyadmin - dostajesz pliczek z milionem insertów 2. podnosisz bazę na postgresie i wgrywasz strukturę z /lms/doc/lms.pgsql 3. pgadminem robisz zapytanie na bazie lms z pliku pk.1 4. uzgadniasz sekwencje w postgresie dla każdej z tabel 5. zmieniasz wpisy w lms.ini
ps. Pamiętaj o kodowaniu ( chyba tutaj są największe problemy )
Pozdrawiam Miłosz
2011/3/2 maniac@sistbg.net
Cytowanie Bartek Swedrowski bartek@idk.net.pl:
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Tak z czystej ciekawości... jak chcesz tą konwersję przeprowadzić?
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Cytowanie milek milekz@gmail.com:
Pozdrawiam, chyba najbezpieczniejszy i sprawdzony sposób:
- Zapisujesz całą bazę phpmyadmin - dostajesz pliczek z milionem insertów
Chyba dane bez struktury, a nie całą bazę. Sam nie używam phpmyadmina i sądzę, że większe szanse na powodzenie będziesz miał jak z niego zrezygnujesz i zrobisz dumpa z konsoli:
mysqldump --compatible=postgresql --complete-insert --no-create-info --skip-add-locks --single-transaction
- podnosisz bazę na postgresie i wgrywasz strukturę z /lms/doc/lms.pgsql
pewnie będziesz musiał jeszcze dać truncate na niektórych tabelach, bo tam na końcu jest INSERT INTO.
- pgadminem robisz zapytanie na bazie lms z pliku pk.1
Jak masz dużą bazę to będzie trwało długo dodatkowo nie jest powiedziane, że przy dodawaniu nie pogwałcisz kluczy obcych. Ja bym wcześniej dał BEGIN, a na końcu pliku COMMIT. I w razie czego pozmieniał jeszcze kolejność tabel, o ile będzie możliwe takie jej ustalenie, by klucze obce się nie czepiały. Jak nie będzie, to będziesz musiał wyłączyć klucze obce, a na końcu je dodać. Dodatkowo ja bym uzył psql \i plik.sql zamiast phppgadmina.
- uzgadniasz sekwencje w postgresie dla każdej z tabel
- zmieniasz wpisy w lms.ini
ps. Pamiętaj o kodowaniu ( chyba tutaj są największe problemy )
Możliwe,
Tak z czystej ciekawości jaki masz problem z MySQL i czym podyktowana jest ta kowersja żywego orgnizmu?
Pozdrawiam Miłosz
2011/3/2 maniac@sistbg.net
Cytowanie Bartek Swedrowski bartek@idk.net.pl:
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Tak z czystej ciekawości... jak chcesz tą konwersję przeprowadzić?
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
2011/3/2 maniac@sistbg.net:
Tak z czystej ciekawości jaki masz problem z MySQL i czym podyktowana jest ta kowersja żywego orgnizmu?
Ostatnio dość mocno spadła nam wydajność LMSa (szczególnie między 1.11.10 - 1.11.11). Np. ładowanie fakturek trwa ok. 4 sek. Wyszukiwanie z inputa na górze ekrany np. komputera trwa około 12 sekund zanim AJAX znajdzie wynik.
Znam znacznie lepiej PostgreSQL niż MySQL oraz mamy większość rzeczy (CMS, inny custom system) działające na PostgreSQL więc konwersja nie tylko ułatwi mi debugowanie problemów z wydajnością ale także sprawi że infrastruktura będzie bardziej jednolita.
Dzięki za sugestie. Dam znać jak poszło.
Cytowanie Bartek Swedrowski bartek@idk.net.pl:
2011/3/2 maniac@sistbg.net:
Tak z czystej ciekawości jaki masz problem z MySQL i czym podyktowana jest ta kowersja żywego orgnizmu?
Ostatnio dość mocno spadła nam wydajność LMSa (szczególnie między 1.11.10 - 1.11.11). Np. ładowanie fakturek trwa ok. 4 sek. Wyszukiwanie z inputa na górze ekrany np. komputera trwa około 12 sekund zanim AJAX znajdzie wynik.
Znam znacznie lepiej PostgreSQL niż MySQL oraz mamy większość rzeczy (CMS, inny custom system) działające na PostgreSQL więc konwersja nie tylko ułatwi mi debugowanie problemów z wydajnością ale także sprawi że infrastruktura będzie bardziej jednolita.
Dzięki za sugestie. Dam znać jak poszło.
Czekam na info, bo też się nad tym zastanawiałem, ale dla mnie migracja bazy byłąby dopiero początkiem schodów, więc nie mam takiego parcia, ale jestem ciekawy jaki będzie skutek u Ciebie.
Jak podeślesz 'SHOW GLOBAL STATUS' i 'SHOW GLOBAL VARIABLES' z mysql to będę wiedział gdzie masz problem. (to jak byś poległ) :)
Pierwsza próba nie wygląda obiecująco :-) Chyba jeszcze troszkę czasu spędzę nad optymalizacją na MySQL zanim ostro zagłębie się w konwersję.
2011/3/2 maniac@sistbg.net:
Jak podeślesz 'SHOW GLOBAL STATUS' i 'SHOW GLOBAL VARIABLES' z mysql to będę wiedział gdzie masz problem. (to jak byś poległ) :)
Problem jest taki że konfiguracja jak i wielkość bazy jest taka sama. Jedynie wersja LMS się zmieniła (1.11.10 -> 1.11.11). Swoją drogą ciekawę czy ktoś zauważył podobne objawy po tym upgradzie.
Pozdrawiam
Dnia 02-03-2011 o godz. 22:03 Bartek Swedrowski bartek@idk.net.pl napisał(a):
Pierwsza próba nie wygląda obiecująco :-) Chyba jeszcze troszkę czasu spędzę nad optymalizacją na MySQL zanim ostro zagłębie się w konwersję.
Klucze obce? Wklej komunikat błędu.
2011/3/2 maniac@sistbg.net:
Jak podeślesz 'SHOW GLOBAL STATUS' i 'SHOW GLOBAL VARIABLES' z mysql to będę wiedział gdzie masz problem. (to jak byś poległ) :)
Problem jest taki że konfiguracja jak i wielkość bazy jest taka sama. Jedynie wersja LMS się zmieniła (1.11.10 -> 1.11.11). Swoją drogą ciekawę czy ktoś zauważył podobne objawy po tym upgradzie.
Może nie było patchy dawno nie upgradowalem, wiec nie wiem. Podrzuc status i variables i info ile masz ram.
OK - kilka godzin później i znalazłem źródło problemu.
Host który trzyma LMS przemigrował się na wirtualnego hosta który ma dużo słabsze procesory niż ten na którym wcześniej działał.
Po przemigrowaniu spowrotem na tego "głównego" czas generowania listy faktur spadł ~1.8 sek a szybkie wyszukiwanie komputerów do ok. ~4 sek co jest już znacznie bardziej akceptowalne :-)
Także, jak zwykle, pierdoła której nigdy bym się nie spodziewał i kilka godzin straconych z życia ;-)
Sorry za zamieszanie.
Dnia 02-03-2011 o godz. 19:37 Bartek Swedrowski bartek@idk.net.pl napisał(a):
2011/3/2 maniac@sistbg.net:
Tak z czystej ciekawości jaki masz problem z MySQL i czym podyktowana jest ta kowersja żywego orgnizmu?
Ostatnio dość mocno spadła nam wydajność LMSa (szczególnie między 1.11.10 - 1.11.11). Np. ładowanie fakturek trwa ok. 4 sek. Wyszukiwanie z inputa na górze ekrany np. komputera trwa około 12 sekund zanim AJAX znajdzie wynik.
Znam znacznie lepiej PostgreSQL niż MySQL oraz mamy większość rzeczy (CMS, inny custom system) działające na PostgreSQL więc konwersja nie tylko ułatwi mi debugowanie problemów z wydajnością ale także sprawi że infrastruktura będzie bardziej jednolita.
Dzięki za sugestie. Dam
Witam!
Ja robiłem konwersję z MySQL do PostgreSQL'a i w dodatku z upgradem LMS'a - stara wersja była sprzed 3 lat a nowa to najnowsza z CVS'a dostępna na początku tego roku.
Mogę podać sposób jaki ja stosowałem - cała migracja zajęła mi jakiś tydzień czasu - praca wykonywana wieczorami i w międzyczasie uzgodnienia i testy robione przez "właściciela" bazy.
1. Eksport z MySQL'a należy wykonać od razu do kodowania UTF-8 i do formaty PostgreSQL mysqldump ma taką opcję. 2. Napisanie skryptu, który zmieni ten format uzyskany z MySQL'a do czytelnej postaci, gdzie każdy rekord znajduje się w osobnym insercie i w osobnej linii - to ułatwia odszukanie rekordu z błędem jeśli się zdarzy. Ja dodałem tu jeszcze usuwanie rekordów z tabel, które "zniknęły" w nowej wersji bazy, oraz korektę rekordów zawierających dane z usunietych kolumn. 3. Zainstalowanie testowej instancji LMS'a z ustawieniami na bazę PostgreSQL'a i utworzenie dla niej nowej czystej bazy ze skryptów instalacyjnych LMS'a. 4. Wgranie danych do bazy PostgreSQL'a otrzymanych po przepuszczeniu przez skrypt z punkut 2. (punkty od 2 do 4 powtarzałem tyle razy aż udało się wyeliminować wszystkie błędy i złapać wszystkie powiązania). 5. Skorygowanie wszystkich sekwencji - MySQL używa do id tabel typu autoincrement, a PostgreSQL uzywa typu serial, który jest sekwencją (tabelą specjalną). W dumpie z MySQL'a nie miałem żadnych informacji o tym jak to zaktualizować i wszystkie liczniki szły od 1 powodując duplikację kluczy głównych i błędy. Dlatego napisałem prostą funkcję, która przechodzi po wszystkich sekwencjach i aktualizuje ich bieżące wartości na maksymalną wartość występującą w tabeli plus jeden.
Po takich operacjach nowy LMS zaczął chodzić, były jeszcze jakieś mniejsze niedomagania ale dało sie je wyeliminować już na wersji produkcyjnej. Być może w twoim przypadku bedzie prościej, jeśli będzie to tylko przeskok z jednaj bazy na drugą (bez upgrade'u LMS'a).
Pozdrawiam Maciej
----- Original Message ----- From: "Bartek Swedrowski" bartek@idk.net.pl To: lms@lists.lms.org.pl Sent: Wednesday, March 02, 2011 11:32 AM Subject: [lms] Konwersja bazy danych z MySQL do PostgreSQL
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Pozdrawiam, Bartek _______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
--------------------------------------------------------------- Dramatyczny wypadek Roberta Kubicy - zobacz najswiezsze doniesienia! Sprawdz >>> http://linkint.pl/f2915
Czy i jaka różnice w wydajności zauwazes?
Pozdrawiam
Dnia 03-03-2011 o godz. 11:07 "Maciej Kesicki" mkesicki@interia.pl napisał(a):
Witam!
Ja robiłem konwersję z MySQL do PostgreSQL'a i w dodatku z upgradem LMS'a - stara wersja była sprzed 3 lat a nowa to najnowsza z CVS'a dostępna na początku tego roku.
Mogę podać sposób jaki ja stosowałem - cała migracja zajęła mi jakiś tydzień czasu - praca wykonywana wieczorami i w międzyczasie uzgodnienia i testy robione przez "właściciela" bazy.
- Eksport z MySQL'a należy wykonać od razu do kodowania UTF-8 i do formaty PostgreSQL
mysqldump ma taką opcję. 2. Napisanie skryptu, który zmieni ten format uzyskany z MySQL'a do czytelnej postaci, gdzie każdy rekord znajduje się w osobnym insercie i w osobnej linii - to ułatwia odszukanie rekordu z błędem jeśli się zdarzy. Ja dodałem tu jeszcze usuwanie rekordów z tabel, które "zniknęły" w nowej wersji bazy, oraz korektę rekordów zawierających dane z usunietych kolumn. 3. Zainstalowanie testowej instancji LMS'a z ustawieniami na bazę PostgreSQL'a i utworzenie dla niej nowej czystej bazy ze skryptów instalacyjnych LMS'a. 4. Wgranie danych do bazy PostgreSQL'a otrzymanych po przepuszczeniu przez skrypt z punkut 2. (punkty od 2 do 4 powtarzałem tyle razy aż udało się wyeliminować wszystkie błędy i złapać wszystkie powiązania). 5. Skorygowanie wszystkich sekwencji - MySQL używa do id tabel typu autoincrement, a PostgreSQL uzywa typu serial, który jest sekwencją (tabelą specjalną). W dumpie z MySQL'a nie miałem żadnych informacji o tym jak to zaktualizować i wszystkie liczniki szły od 1 powodując duplikację kluczy głównych i błędy. Dlatego napisałem prostą funkcję, która przechodzi po wszystkich sekwencjach i aktualizuje ich bieżące wartości na maksymalną wartość występującą w tabeli plus jeden.
Po takich operacjach nowy LMS zaczął chodzić, były jeszcze jakieś mniejsze niedomagania ale dało sie je wyeliminować już na wersji produkcyjnej. Być może w twoim przypadku bedzie prościej, jeśli będzie to tylko przeskok z jednaj bazy na drugą (bez upgrade'u LMS'a).
Pozdrawiam Maciej
----- Original Message ----- From: "Bartek Swedrowski" bartek@idk.net.pl To: lms@lists.lms.org.pl Sent: Wednesday, March 02, 2011 11:32 AM Subject: [lms] Konwersja bazy danych z MySQL do PostgreSQL
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Pozdrawiam, Bartek _______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Dramatyczny wypadek Roberta Kubicy - zobacz najswiezsze doniesienia! Sprawdz >>> http://linkint.pl/f2915
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
U mnie sytuacja była taka, że migracja nie była ze względu na szybkość. Po prostu trzeba było porobić porządki. Stara maszyna poszła do kasacji a na LMS'a została zakupiona nowa - jakiś najtańszy serwer HP z niezbyt wydajnym procesorem (ale takim na czasie a nie archaicznym).
Różnica w wydajności jest bardzo duża - według tego co mówi "właściciel" bazy. Ja administruję tym z doskoku i mało uzywam tego LMS'a. Według tego co usłyszałem, to teraz LMS' pracuje dużo płynniej - wcześniej trzeba było dłużej czekać na wyświetlanie stron z dużą ilościa rekordów. Nie wiem jak szybko generowane były poprzednio strony ale teraz czas generowania stron jest na poziomie 0,1-0,3 sekundy.
Przeskok na Postgres'a był z mojego powodu ("właścicielowi" było to obojetne), ponieważ wolę tą bazę niż MySQL'a - wszystkie moje systemy chodzą na Postgresie więc znam go dużo lepiej niż MySQL'a. Z tego co zauważyłem przy migracji to LMS może chodzić szybciej na Postgresie (w tej samej konfiguracji sprzętowej), bo zapytania w nim są już dość rozbudowane - więc cały mechanizm planowania zapytań zaszysty w Postgresie może się tu wykazać. Dodatkowo pewne operacje możnaby jeszcze przyspieszyć przez zastosowanie sieciowych typów danych jak macaddr czy inet - wtedy nie trzebaby tego przeliczać przez osadzone funkcje tylko skorzystać z natywnych typów danych i funkcji zaszytych w silniku bazy danych. Ale to temat do przyszłej deweloperki.
Pozdrawiam Maciej
----- Original Message ----- From: "Rafał Ramocki" maniac@sistbg.net To: "Maciej Kesicki" mkesicki@interia.pl; "lista użytkowników LMS" lms@lists.lms.org.pl Cc: "lista użytkowników LMS" lms@lists.lms.org.pl Sent: Thursday, March 03, 2011 12:31 PM Subject: Re: [lms] Konwersja bazy danych z MySQL do PostgreSQL
Czy i jaka różnice w wydajności zauwazes?
Pozdrawiam
Dnia 03-03-2011 o godz. 11:07 "Maciej Kesicki" mkesicki@interia.pl napisał(a):
Witam!
Ja robiłem konwersję z MySQL do PostgreSQL'a i w dodatku z upgradem LMS'a - stara wersja była sprzed 3 lat a nowa to najnowsza z CVS'a dostępna na początku tego roku.
Mogę podać sposób jaki ja stosowałem - cała migracja zajęła mi jakiś tydzień czasu - praca wykonywana wieczorami i w międzyczasie uzgodnienia i testy robione przez "właściciela" bazy.
- Eksport z MySQL'a należy wykonać od razu do kodowania UTF-8 i do
formaty PostgreSQL mysqldump ma taką opcję. 2. Napisanie skryptu, który zmieni ten format uzyskany z MySQL'a do czytelnej postaci, gdzie każdy rekord znajduje się w osobnym insercie i w osobnej linii - to ułatwia odszukanie rekordu z błędem jeśli się zdarzy. Ja dodałem tu jeszcze usuwanie rekordów z tabel, które "zniknęły" w nowej wersji bazy, oraz korektę rekordów zawierających dane z usunietych kolumn. 3. Zainstalowanie testowej instancji LMS'a z ustawieniami na bazę PostgreSQL'a i utworzenie dla niej nowej czystej bazy ze skryptów instalacyjnych LMS'a. 4. Wgranie danych do bazy PostgreSQL'a otrzymanych po przepuszczeniu przez skrypt z punkut 2. (punkty od 2 do 4 powtarzałem tyle razy aż udało się wyeliminować wszystkie błędy i złapać wszystkie powiązania). 5. Skorygowanie wszystkich sekwencji - MySQL używa do id tabel typu autoincrement, a PostgreSQL uzywa typu serial, który jest sekwencją (tabelą specjalną). W dumpie z MySQL'a nie miałem żadnych informacji o tym jak to zaktualizować i wszystkie liczniki szły od 1 powodując duplikację kluczy głównych i błędy. Dlatego napisałem prostą funkcję, która przechodzi po wszystkich sekwencjach i aktualizuje ich bieżące wartości na maksymalną wartość występującą w tabeli plus jeden.
Po takich operacjach nowy LMS zaczął chodzić, były jeszcze jakieś mniejsze niedomagania ale dało sie je wyeliminować już na wersji produkcyjnej. Być może w twoim przypadku bedzie prościej, jeśli będzie to tylko przeskok z jednaj bazy na drugą (bez upgrade'u LMS'a).
Pozdrawiam Maciej
----- Original Message ----- From: "Bartek Swedrowski" bartek@idk.net.pl To: lms@lists.lms.org.pl Sent: Wednesday, March 02, 2011 11:32 AM Subject: [lms] Konwersja bazy danych z MySQL do PostgreSQL
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Pozdrawiam, Bartek _______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
Dramatyczny wypadek Roberta Kubicy - zobacz najswiezsze doniesienia! Sprawdz >>> http://linkint.pl/f2915
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
--------------------------------------------------------------- Wybierz Queen of Poland! Ocen i zaglosuj na wybrana dziewczyne >>> http://linkint.pl/f2930
On Wed, Mar 02, 2011 at 10:32:37AM +0000, Bartek Swedrowski wrote:
Witam,
Czy ktoś z listowiczów dokonał operacji konwersji bazy danych LMS z MySQL do PostgreSQL, i mógłby się podzielić doświadczeniami? Napotkane problemy, na co uważać itd.?
Ja to robiłem mniej więcej tak: * lms - kopia bazy * na postgresql zakładałem czystą bazę z lms.pgsql * odpalałem LMS'a * robiłem przywróć bazę
Nie jestem pewien tylko czy to na 100% zadziała, gdyż do produkcji nie weszła baza na postgresql.
uczestnicy (6)
-
Bartek Swedrowski
-
Maciej Kesicki
-
maniac@sistbg.net
-
milek
-
Przemysław 'Repcio' Gubernat
-
Rafał Ramocki