ZANIM napiszesz w tym temacie następny post, przeczytaj dokładnie WSZYSTKO co poniżej napisałem.
Poniższy post podzielony jest na 3 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.
3. Jakie poprawki wprowadzić do modułu kopii zapasowej, aby w 100% odtworzyć bazę.
- Jak prawidłowo wykonać kopię bazy:
- 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/
- 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
- Jak prawidłowo odtworzyć kopię bazy
- 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.
- 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"
- 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.
- 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.
- Jakie poprawki wprowadzić do modułu kopii zapasowej, aby w 100% odtworzyć bazę (dot. tylko phpBB by Przemo w wersji 1.12.5) Co prawda temat ten został już przeze mnie opisany w dziale "Mod. Gotowe [ 1.12.5 ]" i temacie Ilość przechowywanych kopii, ale jest on na tyle ważny i związany z tematem, że postanowiłem go powielić.
- Problem objawia się przy odtwarzaniu bazy przy pomocy dumploadera. Najczęściej pasek postępu z kilkunastu (kilkudziesięciu) procent (w zależności od rozmiaru bazy danych), od razu przeskakuje do 100% i stwierdza, że baza została odzyskana prawidłowo. Niestety, ale w efekcie błędu, nie zostają odzyskane tabele phpbb_posts_text oraz następne. Następuje również błędne informowanie o "sukcesie" operacji. Dodatkowo zostały usunięte następujące błędy i niedogodności:
- usunięte zostały 4 błędy przy wykonywaniu backupu (w tym związany z (nie)usuwaniem starych kopii),
- wykonywanie kopii (jeśli serwer obsługuje kompresję gzip), powinno znacznie mniej obciążać serwer oraz potrzebna jest kilkanaście razy mniejsza ilość wolnego miejsca na serwerze do wykonania kopii,
- ręczne wykonanie kopii zapasowej z poziomu PA tworzy dodatkową kopię (to, co jest wpisane jako ilość maksymalna kopii + 1) - uznałem, że administrator jeśli wykonuje kopię ręcznie, to nie powinno to kasować poprzednich kopii. Plik z poprawkami (2 pliki) dostępny jest w temacie Ilość przechowywanych kopii. Podkreślę jednak, że jest to poprawka do modułu wykonującego kopie zapasowe. Oznacza to, że kopie wykonane po zastosowaniu poprawki powinny się prawidłowo odtworzyć.
Powyższy opis (punkty 1 i 2) może nie działać, jeśli konfiguracja serwera SQL jest "egzotyczna". 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 z sukcesem 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. //Historia edycji: 08-10-2006: dodany opis odtworzenia bazy w phpMyAdmine (jeśli kopia wykonana została przez forum). 08-10-2006: uporządkowanie treści i pogrupowanie podtematów, aby struktura była bardziej przejrzysta. 16-11-2007: dodanie opisu poprawki dla modułu kopii zapasowej (pkt. 3)