Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Emil
Błękitny
Dołączył: 06 Lip 2005
Posty: 2288
Przeczytał: 0 tematów
Ostrzeżeń: 0/3 Skąd: Wrocław Płeć:
|
Wysłany: Wto 23:30, 03 Lip 2007 Temat postu: Dla Jenna |
|
|
ZANIM napiszesz w tym temacie następny post, przeczytaj dokładnie WSZYSTKO co poniżej napisałem.
Poniższy post podzielony jest na 2 działy.
1. Opisuję jak (w możliwie najbezpieczniejszy i najmniej problemowy) sposób wykonywać backup bazy.
2. Jak prawidłowo przywrócić wykonany wcześniej backup.
Jeśli przenosisz bazę danych pomiędzy serwerami, przeczytaj również temat w FAQ: Jak przenieść bazę forum z serwera na serwer.
1. Jak prawidłowo wykonać kopię bazy:
1. Przy użyciu wbudowanej w forum funkcji backupu (znajdującej się w PA -> SQL -> Kopia zapasowa)
* Gdzie należy opcji szukać - już podałem. Wykonanie backupu sprowadza się do kliknięcia "Wykonaj kopię teraz" (polecam odznaczyć "Kopiuj zawartość tabel search")
* Plik z backupem został umieszczony w katalogu /db/db_backup/
2. Przy użyciu phpMyAdmin (opis w oparciu o phpMyAdmin 2.6.4)
* Zakładam, że każdy ma dostęp do phpMyAdmina (instalacji i konfiguracji tego programu nie mam zamiaru opisywać!)
* Uruchamiamy phpMyAdmina
* W oknie po lewej stronie wybieramy naszą bazę (którą chcemy zabezpieczyć). Dla przykładu konkretnego niech nazywa się ona Gość.
UWAGA: niektórzy administratorzy zabraniają zmiany bazy danych i jest Twoja baza otwierana automatycznie!
* W prawym oknie pojawia się (na samej górze) Eksport
* Zaznaczamy wszystkie tabele
* Wybieramy następujące "Opcje SQL":
Obejmij eksport transakcją
Dodaj DROP TABLE
Dodaj IF NOT EXISTS
Kompatybilność eksportu SQL: MYSQL40 (najważniejsza opcja!)
Zapisz jako plik
2. Jak prawidłowo odtworzyć kopię bazy
1. Przy pomocy phpMyAdmina (kopię wykonaliśmy również z phpMyAdmina i zaznaczyliśmy kompatybilność eksportu MYSQL40 )
Dodanie opcji MYSQL40 zapobiega dopisywaniu
Kod:
DEFAULT CHARSET=latin1 AUTO_INCREMENT=1
* Wybieramy w phpMyAdminie naszą bazę.
* Na górze wybieramy SQL (interesuje nas na stronie tylko ramka: "lub Lokalizacja pliku tekstowego")
* Klikamy "Przeglądaj" i wskazujemy nasz plik z kopią
* Najważniejsze: z rozwijanej listy: "Zestaw znaków dla pliku" wybieramy binary
* Klikamy "Wykonaj"
UWAGA: jeśli otworzy Ci się biała strona, to oznacza iż plik z bazą jest za duży. Co zrobić w takim wypadku opisuje inny temat w FAQ.
2. Przy pomocy phpMyAdmina (kopię wykonaliśmy również z phpMyAdmina i NIE zaznaczyliśmy kompatybilność eksportu MYSQL40 i/lub w zrobionym zrzucie bazy mamy ciąg "DEFAULT CHARSET..." )
* Wchodzimy do phpMyAdmina
* Na pierwszej stronie powinniśmy mieć coś w stylu: "System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)"
Z innymi kodowaniami się nie spotkałem i ich nie będę opisywał. Jednak jeśli takie występuje, to należy najprawdopodobniej to samo wpisać w poleceniach SET poniżej (wyróżnione kolorkiem)
* Edytujemy nasz plik .sql z kopią bazy.
* Na samym początku pliku dopisujemy:
Cytat:
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SET SESSION collation_connection = 'latin1_general_ci';
* Zapisujemy plik
* Wybieramy w phpMyAdminie naszą bazę.
* Na górze wybieramy SQL (interesuje nas na stronie tylko ramka: "lub Lokalizacja pliku tekstowego")
* Klikamy "Przeglądaj" i wskazujemy nasz plik z kopią
* Na rozwijanej liście może zostać dowolna wartość (np: utf8)
* Klikamy "Wykonaj"
3. Przy pomocy DBLoadera (kopia została wykonana przy użyciu wbudowanej w forum "Kopii zapasowej")
* Kopiujemy plik z backupem na nowe forum do katalogu głównego forum.
* Wchodzimy do DumpLoadera (http://twojeforum/dbloader/dbloader.php)
* Wybieramy "Wczytaj bazę danych"
* Przed wybraniem pliku (o ile mamy już cokolwiek na forum) proponuję usunąć wszystkie tabele prefix_* (unikniemy w ten sposób błędów, iż nie można utworzyć tabeli, a ponieważ tabele będą już zawierały dane, stąd może dojść do zdublowania informacji). Na wszelki wypadek możesz wykonać aktualną kopię.
* No to zaczynamy: "Rozpocznij wgrywanie"
* Czekamy... i sprawdzamy czy wszystko ok jest z forum (przy tej metodzie nie spotkałem się aby wykonany i wgrany dump nie działał bądź były z nim jakieś problemy z kodowaniem polskich liter)
* UWAGA: w szczególnych przypadkach kopia ta może odtworzyć się z błędami (w efekcie nie będziemy mieli odtworzonych kilku tabel) - sprawdźmy to w zakładce "Sprawdzenie bazy" w dbloaderze. Jeśli tak, wykonaj punkt poniższy wykorzystując do przywrócenia phpMyAdmina.
4. Przy pomocy phpMyAdmina (kopia została wykonana przy użyciu wbudowanej w forum "Kopii zapasowej") (opis w oparciu o phpMyAdmin 2.8.x i 2.9.x)
WARUNEK konieczny do prawidłowego odtworzenia polskich znaków: • W starej bazie, w widoku struktury tabel widoczny był napis: "Metoda porównywania napisów" i wartość: "latin1_swedish_ci"
* Wybieramy w phpMyAdminie naszą bazę.
* Na górze w ramce po prawej stronie wybieramy Import (interesuje nas na stronie tylko ramka: "Plik do importu")
* Klikamy "Przeglądaj" i wskazujemy nasz plik z kopią
* Najważniejsze: z rozwijanej listy: "Zestaw znaków dla pliku" wybieramy ISO-8859-1
* Przypomnę, że nie ruszamy zawartości pozostałych ramek - mają one zostać domyślne
* Klikamy "Wykonaj"
UWAGA: jeśli otworzy Ci się biała strona, to oznacza iż plik z bazą jest za duży. Co zrobić w takim wypadku opisuje inny temat w FAQ.
Powyższy opis może nie działać, jeśli konfiguracja serwera SQL jest "egzotyczna". Wówczas takie sytuacje rozwiązuję indywidualnie.
EDIT: z związku z brakiem czasu, nie podejmę się przeniesienia forum - nie ma sesnu, abyś do mnie pisał(a), bo jest to moja ostateczna decyzja.
INFORMACJA od autora: Straciłem kilka godzin na uporządkowanie tego tematu. Zostawiłem tylko wiadomości, które pomogły, lub jest bardzo prawdopodobne iż mogą pomóc. I taki charakter tego tematu chciałbym zachować. A jeśli znalazłeś inny sposób aby przenieść bazę w przypadku problemów z kodowaniem, opisz tutaj go dokładnie.
PROSZĘ nie pisać tutaj wiadomości typu: mam krzaczki, kto mi przeniesie bazę itp. Do takich pytań jest specjalny temat w dziale Ogólnym: Dyskusja nt. braku polskich liter na forum.
Dziękuję za zrozumienie.
|
|
Powrót do góry |
|
|
|
|
Emil
Błękitny
Dołączył: 06 Lip 2005
Posty: 2288
Przeczytał: 0 tematów
Ostrzeżeń: 0/3 Skąd: Wrocław Płeć:
|
Wysłany: Wto 23:35, 03 Lip 2007 Temat postu: |
|
|
Napisałem fajnego moda, który służy do zmiany kodowania bazy danych poprzez forum Czyli nie musimy się babrać w bazie danych. Wystarczy skopiować do forum jeden plik, wybrać kodowanie i chwilkę poczekać
Mod współpracuje tylko z wersją 1.12.5
Testowałem go na tym forum, przekonwertował w 1,5 godz.
Konwerter po prostu przelatuje przez wszystkie pola tekstowe we wszystkich tabelach i jeśli wykryje podane wejściowe kodowanie zmienia zawartość wpisu na podane kodowanie wyjściowe.
Na razie obsługuje formaty:
iso-8859-2
windows-1250
utf-8
ascii-iso-8859-2
ascii-windows-1250
Jeżeli ktoś ma jeszcze inne kodowanie bazy to musi zebrać zestaw polskich znaków w tym kodowaniu i w odpowiedniej kolejności wstawić je do jakiegoś klucza w tablicy $charset
Jak na twoim forum polskie znaki są wyświetlane nieprawidłowo to ten skrypt możesz użyć tylko wtedy jeśli nowo pisane posty mają już poprawne kodowanie !
Aby nowe posty miały poprawne kodowanie należy zmienić kodowanie wszystkich pól w tabelach które mają podane jakieś kodowanie (są to pola tekstowe) na początek można testować na samych treściach postów (ale po każdej zmianie trzeba napisać nowy post) w bazie tabela phpbb_posts_text i pole post_text jeżeli nie da sie zmienić nalezy napisać do admina! Forum ma kodowanie iso-8859-2 co odpowiada w bazie polom z kodowaniem latin2_general_ci
Jak ktoś przekonwertował poprawnie baze niech tu napisze.
Jak ktoś w bazie danych (nie na forum) ma zamiast polskich znaków znaki zapytania ? to niestety nic już nie zrobi, za późno.
Jak ktoś przekonwertuje baze i kodowanie nie będzie prawidłowe niech wrzuci kopię bazy danych bo inaczej z tą bazą może się już nic nie zrobić.
Plik z załącznika rozpakowujemy i wrzucamy do katalogu /scripts/ po czym na niego wchodzimy, wybieramy kodowanie i startujemy, na końcu jeżeli wynik jest pozytywny trzeba odbudować search.
Skrypt jest przeznaczony dla osób z podstawową wiedzą na temat technologi www oraz kodowania znaków.
Można to użyć w sytuacji gdy kiedyś mieliśmy problem z kodowaniem lecz nie robiliśmy nic a nowonapisane tematy miały już poprawne kodowanie. Skrypt przekonwertuje tylko dane, które są w innym (wybranym) kodowaniu.
Niestety problemy z kodowaniem baz danych są okropne i trzeba mnóstwo cierpliwości jak ktoś się na tym dobrze nie zna.
Mile widziana wypowiedź osoby która zna się na tym dobrze bo ja mam tylko podstawową wiedzę na ten temat.
|
|
Powrót do góry |
|
|
Emil
Błękitny
Dołączył: 06 Lip 2005
Posty: 2288
Przeczytał: 0 tematów
Ostrzeżeń: 0/3 Skąd: Wrocław Płeć:
|
Wysłany: Śro 0:13, 04 Lip 2007 Temat postu: |
|
|
Wszystko ręcznie wklepywane (phpMyAdmin -> Bazy danych -> "twoja_baza" -> SQL (zakładka)):
Mój przepis wygląda tak:
1) Wykonać zrzut bazy z poziomu Forum (plik bazy znajduje się w /db/db_backup/, system kodowania bazy Windows-1250)
2) W nowej bazie ustawić w phpMyAdmin:
- język: Polish (pl-utf-
- system porównań dla połączenia MySQL: utf8_general_ci
3) Wklepać przez phpMyAdmin ze zrzutu bazy wszystkie CREATE TABLE do nowej bazy
4) Zmienić w phpMyAdmin (nowej bazy) wszystkie tabele na utf8_general_ci
5) Otworzyć zrzut bazy przez program EdHTML v5.0, zmienić system kodowania na ISO 8859-2 (Dokument -> System kodowania) i zapisać (pojawią się polskie znaki ę,ó,ą,ś,ł,ż,ź,ć,ń).
6) Teraz trzeba zmienić system kodowania zmodyfikowanej bazy z ISO 8859-2 na Unicode. W moim przypadku bazę edytowałem programem Programmer's Notepad 2 v0.6.1 (Find -> Replace -> Find watchZnajdź Replace withZamień z i kliknąć Replace All(Zamień wszystko)). Gdyż windowsowski notatnik jak i ten EdHTML nie odróżniał wielkich od małych liter. Czyli gdy dajesz żeby Ci zmienił np. znak Ł na Ł (powinien być jeszcze średnik na końcu, ale po dodaniu ten kod zmienia się w Ł) to zmieniał wszystkie Ł i ł na Ł
7) Wklepać teraz wszystkie INSERT INTO do nowej bazy
Ale pomimo tego co zrobiłem mam pytanie. Czy podzielenie zrzutu bazy na dwie części daje coś w dbloaderze?
Pierwsza część od [CREATE TABLE phpbb_admin_notes] do pierwszego średnika przed [CREATE TABLE phpbb_posts_text_history].
Druga część od [CREATE TABLE phpbb_posts_text_history] i do samego końca.
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
Bluetab template design by FF8Jake of FFD
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
|