Autor Subiect: Tutorial: Reconstructie topic din backup-uri...  (Citit de 1376 ori)

0 Utilizatori şi 1 Vizitator pe acest subiect.

Deconectat viulian

  • Full Member
  • ***
  • Mesaje: 229
  • Popularitate: +0/-0
  • Gen: Bărbat
    • Hex.Ro
Tutorial: Reconstructie topic din backup-uri...
« : Duminică 30 Aprilie 2006, 23:03:41 »
Doar ce am recuperat un topic ce mi-era drag dar pe care din graba l-am sters :D (am vrut sa sterg de fapt ultimul topic, da am apasat remove topic in loc de remove message).

0. se presupune ca exista un backup al bazei de date de pe forum, in format de mysql dump (creeat de functia de backup a forumului, in partea de administrare)

1. trebuie instalat mysql local (eu aveam instalat deja pentru ca mai bibilesc la forum), creeata o baza de date goala, si apoi lansata comanda:

mysql -u username -p dbname < backup_forum.sql
Aceasta comanda importa in baza de date dbname toate datele de pe forum. Etapa este necesara datorita punctului 2:

2. Se porneste MySql Query Browser, deschisa noua baza, si apoi se izoleaza mesajele din topicul sters folosind:

SELECT * from {prefix}messages where ID_TOPIC=<old_topic_id>

(old topic id se cauta folosind search dupa subiect, si se observa ce id avea)

3. Se exporta Result Set-ul obtinut intr-un fisier HTML (deoarece va fi multa nevoie de copy/paste - eu am recuperat folosind phpmyadmin si a fost mai usor sa fac copy paste dintr-un html deschis in browser in cealalta fereastra cu phpmyadmin).

4. Se porneste phpmyadmin pe server si se recreeaza topicul folosindu-se id-ul vechi. Trebuie completate mai multe informatii, cum ar fi carui board sa apartina, care sunt primul si ultimul mesaj (id-urile lor), cate mesaje sunt in topic si cate vizualizari au fost. Toate aceste informatii se iau tot din backup.

Atentie, topicul nou nu apare listat in board-ul caruia i se asigneaza decat dupa ce toate mesajele sunt puse la loc. Se poate vedea insa topicul in timpul reconstructiei folosindu-se action-ul de topic:

http://example.com/index.php?topic=<old_topic_id>

5. Apoi tot din phpmyadmin trebuie deschis table-ul de  mesaje, si cu insert trebuie adaugat mesaj cu mesaj. Aici trebuie acel HTML deschis, si facut copy paste din el in fereastra cu phpmyadmin.

6. Atasamentele care apar la mesaje sunt in {prefix}attachments. Pentru fiecare mesaj care a avut atasamentele, trebuie:
a) cautat ce atasamente a avut :

SELECT * from {prefix}messages WHERE ID_MSG = <message_id>

b) din phpmyadmin inserat cate un row nou pentru fiecare atasament (in tabela cu atasamente) (valorile necesare se iau din mysql query admin)

c) din backup trebuie copiate atasamentele inapoi pe forum in directorul de atasamente (trebuie evident avut backup si la directorul cu atasamente de pe forum) - eu saptamanal fac backupuri. Atasamentele pe disk au un serial number, trebuie copiate exact cum erau in backup.

7. Forumul nu renumara posturile membrilor atunci cand mesajele sunt injectate din phpmyadmin, asa ca pentru cireasa de pe tort trebuie aduse la zi si numarul de posturi. din phpmyadmin se cauta fiecare membru in parte si se editeaza "posts count" cu cate mesaje a avut persoana respectiva in topicul recuperat.

:)

Asa ca... mai bine atentie sa nu stergeti topicuri, caci recuperarea unui topic de 15 posturi cu tot cu atasamente dureaza o ora, o ora jumate.

PS: Am vazut in phpmyadmin ca se poate popula fiecare tabela cu informatii dintr-un fisier text. Dar trebuie compus acel(e) fisier(e) si dureaza chiar si mai mult asa.

SMF România

Tutorial: Reconstructie topic din backup-uri...
« : Duminică 30 Aprilie 2006, 23:03:41 »

Deconectat admin

  • Administrator
  • Hero Member
  • *****
  • Mesaje: 1.665
  • Popularitate: +46/-6
  • Gen: Bărbat
    • SMF România
Raspuns: Tutorial: Reconstructie topic din backup-uri...
« Răspunde #1 : Luni 01 Mai 2006, 05:08:03 »
..............
7. Forumul nu renumara posturile membrilor atunci cand mesajele sunt injectate din phpmyadmin, asa ca pentru cireasa de pe tort trebuie aduse la zi si numarul de posturi. din phpmyadmin se cauta fiecare membru in parte si se editeaza "posts count" cu cate mesaje a avut persoana respectiva in topicul recuperat.

................


forumul renumara posturi si mesaje personale si toate statisticile
in admin panel este optiunea (pe undeva pe la maintenance, intretinere) recount all forum statistics in engleza pentru <=1.0.7, si cu traducerea respectiva in romaneste pentru 1.1 RC2
« Ultima modificare: Luni 01 Mai 2006, 05:10:33 de către admin »
Free your mind!
NU cereţi pe email sau mesaj personal soluţii la probleme care pot fi întrebate pe forum.

Deconectat viulian

  • Full Member
  • ***
  • Mesaje: 229
  • Popularitate: +0/-0
  • Gen: Bărbat
    • Hex.Ro
Re: Tutorial: Reconstructie topic din backup-uri...
« Răspunde #2 : Luni 01 Mai 2006, 11:38:30 »
Da, am incercat-o dar nu-mi merge... (am un SMF 1.0.7). Aveam 701 posturi inainte sa reconstruiesc topicul, am recalculat statisticile si totalurile (imi zice Maintainance Complete foarte repede) si tot 701 aveam si dupa.. Asa ca mi-am mai adaugat 10 posturi de mana.

Mi s-a intamplat sa am spammeri pe forum (unu a trimis pana l-am prins vreo 50 de mesaje private) si am sters din baza de date toate mesajele private trimise de el. Dar a ramas o discrepanta, am avut membri care aveau doar 2 mesaje, a disparut unul (cel sters) dar forumul tot 2 afisa chiar daca i-am dat sa recalculeze totalurile...

Ce imi face optiunea aceea imi sterge lista de vizitatori momentan (imediat dupa apar ca am 0 vizitatori 0 useri) dar probabil se refera la totalurile legate de statistici.. ca altceva nu face..

Later Edit:
Am luat sursele si m-am uitat prin ele, pana la urma daca e bug in forum, trebuie sa stim si noi nu :D ?
Iata ce face "Recount all forum totals and statistics":

// Get each topic with a wrong reply count and fix it.
// Update the post and topic count of each board.
// Get all members with wrong number of personal messages.
// Any messages pointing to the wrong board?
// Update the latest message of each board.
// Update all the basic statistics.
   // Update the latest member (highest ID_MEMBER) and count.
   // Update the amount of members awaiting approval.
   // Get the number of messages... (personal messages)
   // Get the number of topics. (total topics)
(si inca vreo 2 legate de calendar si de grup).


Acum mi-am lamurit si eu niste dileme. Intr-adevar ar trebui sa renumere mesajele, dar eu am facut o gresala si am sters doar din tabela cu instant_messages fara sa sterg si din im_recipients. Dar recount messages se uita in im_recipients si acolo inca apareau ca fiind prezente mesajele in inbox la oameni (dar nu mai exista mesajul initial, sursa). Am folosit:

delete from {prefix}im_recipients where not exists (Select * from {prefix}instant_messages where {prefix}im_recipients.ID_PM = {prefix}instant_messages.ID_PM)

urmat apoi de un "Recount all totals and forum statistics" si am reparat.

Iar despre numarul de posturi al fiecarui user - nu e verificat :( speram sa fie [cumva pare intuitiv ca ar fi], dar nu e...
« Ultima modificare: Luni 01 Mai 2006, 15:04:17 de către viulian »