« Come si migra un forum »

13 ottobre 2010 @ 12:00

Ricetta per migrare un forum.

Nota iniziale: per la verità la soluzione più semplice è migrarlo sul posto, tuttavia se il vostro provider vi mette a disposizione 200MB di spazio mySQL questo è impossibile, difatti dopo la migrazione ci sono sia il DB vecchio che quello nuovo e la somma dei due oltrepassa lo spazio disponibile.

Procuratevi un forum ben avviato su phpBB2,  con circa 140 MB di dati in un server mySQL.
Vi servirà poi un server locale con webserver, PHP5 e un database mysql possibilmente recente.

  1. Per prima cosa fate un bella copia dei dati, tanto del server mySQL quanto della cartella coi file.
    Una volta fatta la copia mettete tutto quanto (dati SQL + files) in un posticino sul server di test.
  2. Adesso fate un’altra copia che metterete da un’altra parte, possibilmente molto molto lontana dalla copia sul sito di test. E per lontana intendo logicamente e magari anche fisicamente.
  3. Ripristinate il forum sul sito di test. Rimettete i files sul webserver, caricate i files sul server mySQL e assicuratevi che tutto funzioni a dovere. Di solito questo significa sistemare il nome del server e il path dello script nella tabella phpbb_config e cambiare i parametri di connessione al server in config.php.
  4. A questo punto potete opzionalmente cancellare DB e files dal sito di produzione.
  5. Installate una copia nuova di phpBB3 sul server di test, chiaramente in un’altra cartella.
    Evitate il mio errore, mettete il file con la localizzazione in italiano prima di iniziare l’installazione, altrimenti l’inglese diventa la lingua di default di tutti gli utenti dopo aver copiato .
  6. Una volta installato potete avviare la procedura di migrazione, dando i dati del vecchio phpBB sul server di test la procedura migrerà utenti, post forum e anche i files. Potrebbe metterci parecchio.
  7. Controllate e sistemate tutte le opzioni sulla nuova installazione. Io per esempio ho scoperto che seguendo questa procedura gli avatar restano disabilitati e vanno riaccesi a mano. Un occhio particolare per i permessi, che in phpBB3 cambiano radicalmente.
  8. Fate il dump del DB migrato, caricate files e dump sul sito in produzione.
    Occhio che alcune cartelle devono essere scrivibili da phpBB3 (phpBB2 non aveva questa necessità), assicuratevi che lo siano.
  9. Come per il punto 3 bisogna sistemare qualcosa nella tabella phpbb_config, io ho cambiato cookie_domain server_name. Cambiate anche i parametri di connessione al db (config.php) sul server di produzione.
  10. A questo punto non resta che incrociare le dita

Caveats & problemi

Durante la migrazione  mi sono imbattuto in alcuni problemi non banali, chè val la pena considerare.

I files sql enormi
Il primo è che caricare un file SQL di più di 50MB non avendo accesso diretto al server SQL, può essere un problema. Lo strumento di gstione standard (phpMyAdmin)  permette ci caricare un file via web, ma con quelle dimensioni c’è un serio rischio timeout/il file è troppo grosso/ho finito la memoria.
Mi son dovuto fare un script di PHP apposta che richiamato da web leggeva i dati da un file locale caricato via FTP. Le alternative erano spezzare i file in N-mila file più piccoli e caricarli uno a uno.

Il tempo di caricamento/conversione
Un altro problema è che il server di test, essendo molto poco carrozzato e ottimizzato, ci ha messo un’ora per caricare i dati e un’altra per convertire il DB ¬.¬
Lo script di caricamento sul server di produzione ci ha messo meno di un minuto ¬.¬

Charset
Altre bestemmie sono partite per la gestione del charset dei forum, ho imparato parecchie cose sui charset durante questa migrazione.
Il forum inversione 2 usava il vecchio encoding latin-1 mentre la versione 3 è passata saggiamente ad un più universale utf-8. Si poteva vedere bene esaminando le collation delle tabelle con PHP admin, che erano latin1_swedish_ci per la versione 2 e utf8_bin per la versione 3.
Per fortuna la procedura di migrazione (punto 6) convertiva automaticamente i caratteri da latin a utf-8… ma allora perchè quando riportavo la board migrata sul server di produzione le accentate andavano regolarmente a Þutt¥@§¶#øפ!!!!™?
Ok, smonto pezzo per pezzo il processo per trovare l’errore…

  • la versione 2 originale è ok
  • controllo il dump della versione 2 (punto 1): è latin-1, le accentate nel file di dump saltano se si indica come charset utf-8
  • la versione 2 caricata sul sito di test (punto 3) è latin-1, lo dice mysql e il browser quando guardo il server di test
  • la versione migrata diventa utf-8 (punto 6), sempre per mysql e il browser
  • il dump della versione migrata (punto 8 ) è utf-8, le accentate saltano se apro il file in latin-1 stavolta
  • il dump caricato sul server di produzione (punto 8 ) è utf-8 secondo mysql e il browser ma le accentate sono tutte saltate.

Perchè un dump corretto in utf-8 caricato su un server correttamente impostato su utf-8 manda tutto a donnine?
Scopro che la connessione fra php e mysql ha un parametro per impostare il charset utilizzato, ed è impostato su latin-1 di default.
In pratica era convinto che i dati arrivassero in latin-1 e prima di metterli nelle tabelle utf-8 li convertiva. Solo che i dati erano già in utf-8 e la conversione li sminchiava invece di sistemarli.
Risultato: impara ad usare  mysql_set_charset, ed impara ad usarla bene: infatti non le piace “utf-8″, le piace “utf8″ e se non lo metti come piace a lei ti ignora.

4 commenti a “Come si migra un forum”

  1. marco lunari ha detto:
    13 ottobre 2010 alle 12:15

    Gerry ti voglio bene.
    Anzi… ti stimo.

  2. Aresio ha detto:
    13 ottobre 2010 alle 13:09

    gesù.. che voglia!! Oo”

  3. momo ha detto:
    14 ottobre 2010 alle 13:21

    Cavolo che lavoro, e io che proprio l’altro giorno adombravo l’ipotesi che non fosse stata una passeggiata… diciamo che sono stato involontariamente eufemistico http://www.dvdrtree.com/board/viewtopic.php?f=88&t=17878&start=30

  4. Gerry ha detto:
    14 ottobre 2010 alle 14:18

    Momo, se lo puoi fare sul posto è una cavolata da pochi minuti, qualche giorno se vuoi fare dei test e andarci coi piedi di piombo.

    E’ che noi abbiamo solo 200MB di spazio, di cui quasi 140 occupati dal vecchio forum.
    Era impossibile migrarlo sul posto perchè ad un certo punto ci saremmo trovati con il vecchio e il nuovo forum contemporaneamente e sicuramente avremmo sforato la quota.
    Altrimenti quello che potevo fare era cancellare l’indice di ricerca del vecchio forum per ridurre lo spazio occupato, cosa che col senno di poi sarebbe stata molto più semplice visto che tanto l’indice non l’ho mai più ripristinato XD

Lascia un commento