Ciao a tutti, ho scaricato dal repository il file zip relativo a IPB 2.1 contenente convert.php e il file sql.
Lanciandoli ho subito un errore:
Converting members...Wrong value type sent to the database. Date expected. (birthdate)
Devo modificare qualcosa nei file?
Ciao aga21 e benvenuto sul forum! :)
mmm...dato quell'errore, direi che i dati li legge dal db di IPB, ma o i dati non sono quelli che il converter si aspetta, oppure sbaglia ad "assemblarli".
Hai la possibilità di accedere al db via ad esempio phpmyadmin?
Se sì, sarebbe interessante deve cosa restituisce una query tipo questa:
SELECT
IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day))) AS birthdate,
FROM {PREFISSO_IPB}members AS m
WHERE m.id != 0
In teoria dovrebbe ritornare una serie di valori che assomigliano a date (tipo 0004-1-1), prova a far scorrere la prime due o tre pagine e vedi se c'è qualcosa che non ha quell'aspetto. ;)
Quote from: emanuele on April 17, 2013, 10:32:24 AM
Ciao aga21 e benvenuto sul forum! :)
Grazie, gentilissimo.
QuoteSe sì, sarebbe interessante deve cosa restituisce una query tipo questa:
SELECT
IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day))) AS birthdate,
FROM {PREFISSO_IPB}members AS m
WHERE m.id != 0
restituisce
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM {PREFISSO_IPB}members AS m WHERE m.id != 0 LIMIT 0, 30' at line 3
Cambia {PREFISSO_IPB} dopo il FROM col prefisso della tabella. ipb_ o quella che hai scelto al momento dell'installazione. O, comunque, quella che vedi sul nome della tabella, semplicemente.
Yups...sorry, credevo di averlo scritto, ma era in un'altra discussione...
ETA e comunque l'errore è (anche) un altro:
SELECT
IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day))) AS birthdate
FROM {PREFISSO_IPB}members AS m
WHERE m.id != 0
Così dovrebbe funzionare...(avevo lasciato la virgola dopo "birthdate").
Scusate ma non sono molto pratico di MYSQL:
SELECT IF( m.bday_year =0
AND m.bday_month !=0
AND m.bday_day !=0, CONCAT( '0004-', m.bday_month, '-', m.bday_day ) , CONCAT_WS( '-', IF( m.bday_year <=4, 1, m.bday_year ) , IF( m.bday_month =0, 1, m.bday_month ) , IF( m.bday_day =0, 1, m.bday_day ) ) ) AS birthdate
FROM ibf_members AS m
WHERE m.id !=0
LIMIT 0 , 30
restituisce come prima pagina
birthdate
1972-11-18
1917-7-11
1961-3-21
1972-4-27
1-1-1
1982-11-30
1978-7-5
1-1-1
1-1-1
1976-3-23
1972-1-8
1-1-1
1-1-1
1-1-1
1-1-1
1963-8-7
1976-9-13
1984-12-27
1972-8-28
1966-6-18
1983-4-30
1978-3-3
immagino che il problema siano gli 1-1-1
Nope...gli 1-1-1 sono corretti, *assomigliano* ad una data (e sono usati per chi non ne ha inserita una).
Prova a guardare anche in seconda o terza pagina.
ho guardato 30 pagine :P
ci sono delle date NULL NULL NULL
(https://www.simplemachines.org/community/proxy.php?request=http%3A%2F%2Fs24.postimg.org%2F5v5v23aj9%2FAppunti01.jpg&hash=26638bae3272c4220da42b78a1c7cb7f5e934ce5)
Eureka!
I null sono il problema.
heh...ed ora come non considerarli?
Prova così, trova la riga:
IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day))) AS birthdate,
e sostituiscila con:
IF (m.bday_year IS NULL, '1-1-1', IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day)))) AS birthdate,
Non ci metto la mano sul fuoco, ma dovrebbe funzionare...
Stesso errore:
Converting...
Converting members...Wrong value type sent to the database. Date expected. (birthdate)
ma non si potrebbe evitare l'importazione delle date di nascita se è questo che blocca lo script? Non è indispensabile per me.
Sì, basta invece che sostituirla, rimuovere quella riga. ;)
Ok, in invision21_to_smf.sql riga 101 passo da
SUBSTRING(m.email, 1, 255) AS email_address,
IF (m.bday_year = 0 AND m.bday_month != 0 AND m.bday_day != 0, CONCAT('0004-', m.bday_month, '-', m.bday_day), CONCAT_WS('-', IF(m.bday_year <= 4, 1, m.bday_year), IF(m.bday_month = 0, 1, m.bday_month), IF(m.bday_day = 0, 1, m.bday_day))) AS birthdate,
SUBSTRING(me.website, 1, 255) AS website_title,
a
SUBSTRING(m.email, 1, 255) AS email_address,
SUBSTRING(me.website, 1, 255) AS website_title,
si presenta un nuovo messaggio di errore
Converting...
Converting members...Wrong value type sent to the database. Integer expected. (hide_email)
Io tendo ad odiare IPB...
Da qui: http://www.simplemachines.org/community/index.php?topic=238557.msg3400325#msg3400325
Cambia:
m.hide_email AS hide_email,
in
1 AS hide_email,
Quote from: emanuele on April 18, 2013, 07:40:11 AM
Io tendo ad odiare IPB...
Da qui: http://www.simplemachines.org/community/index.php?topic=238557.msg3400325#msg3400325
Cambia:
m.hide_email AS hide_email,
in
1 AS hide_email,
Intanto ti ringrazio nuovamente per la cortesia e la disponibilità, se poi posso contribuire donando qualcosa al progetto sarò contento di farlo.
Passi avanti comunque:
Converting...
Converting members... Successful.
Converting categories... Successful.
Converting boards... Successful.
Converting topics...Wrong value type sent to the database. Integer expected. (id_poll)
http://www.simplemachines.org/community/index.php?topic=238557.msg3400851#msg3400851
---* {$to_prefix}topics
aggiungi dopo:
---{
$row['id_poll'] = (int) $row['id_poll'];
---}
Questo converter non è propriamente testato bene...
ETA: ti conviene guardare anche i messaggi successivi, dato che è probabile incorrerai negli stessi errori...
Dopo la modifica:
Wrong value type sent to the database. Integer expected. (modified_time)
seguendo quel topic ho aggiunto alla riga 304
$row['modified_time'] = (int) $row['modified_time'];
e l'errore non si è presentato, ora esce:
allora dopo ---* {$to_prefix}messages 200
---{
ho inserito:
if(empty($row['id_board']))
$row['id_board'] = 1;
come da post http://www.simplemachines.org/community/index.php?topic=404732.msg2878797#msg2878797
adesso ottengo:
Duplicate entry '17639' for key 'PRIMARY'
A che passaggio ti esce questo errore?
Forse sono stato io a bloccarlo premendo il tasto CONTINUE, non avevo visto che si autoaggiorna, adesso sta elaborando
Converting...
Converting members... Successful.
Converting categories... Successful.
Converting boards... Successful.
Converting topics... Incomplete.
Not quite done yet!
This conversion has paused to avoid overloading your server, and hence not working properly.
Don't worry though, nothing's wrong - simply click the continue button below to start the converter from where it left off.
C'è un tasto CONTINUE con un conto alla rovescia che entro cinque secondi si attiva e nella barra del browser questo contatore si incrementa
/smf/convert.php?step=1&substep=7&start=3500
/smf/convert.php?step=1&substep=9&start=49200
e così via
Sì, meglio lasciargli fare tutto a lui. :P
Quote from: emanuele on April 18, 2013, 12:01:07 PM
Sì, meglio lasciargli fare tutto a lui. :P
è arrivato a 508600! posso sapere il numero a cosa si riferisce per calcolare in maniera approssimata quando finirà?
Diciamo che dovrebbe rappresentare in maniera sommaria il numero di topic processati fino a quel momento.
Quote from: emanuele on April 18, 2013, 02:32:19 PM
Diciamo che dovrebbe rappresentare in maniera sommaria il numero di topic processati fino a quel momento.
Grazie. Considerato che ne ho un milione e ottanta ci vorranno almeno dieci ore... :-\
Spero che non ci siano ulteriori errori dopo questa fase
O_O
Un milione di discussioni?
Ho frainteso: i post sono un milione circa, i topic sono 4000 circa; ma a questo punto
convert.php?step=1&substep=9&start=832600
non trovo corrispondenza
Ahhh...ok.
Mi era venuto un colpo, rischiavi di rendere la più grande board che usa SMF di mia conoscenza una pagliuzza... lol
mmm...beh, ormai siamo quasi al milione, quindi vediamo...
Scollinato. Quando si fermerà?
convert.php?step=1&substep=9&start=1000800
Bella domanda...sta sempre dicendo "converting topics" come ultima voce?
QuoteConverting...
Converting posts (this may take some time)...
Incomplete.
Not quite done yet!
This conversion has paused to avoid overloading your server, and hence not working properly.
Don't worry though, nothing's wrong - simply click the continue button below to start the converter from where it left off.
Il colmo sarebbe che dopo aver finito spunti qualche errore; il processo eventualmente ricomincia dall'inizio o si può fare un resume?
Se quel numero è legato ai post ne mancano ancora 400000 e a questa velocità ci vorranno ancora 3-4 ore :'(
Oh yups, sì allora son proprio i post messaggi!
Se ti può interessare, c'è una board per admin di forum con più di 500'000 messaggi.
Qualche info su Sphinx (ricerca) e credo come migliorare le performance in generale.
smf/convert.php?step=1&substep=9&start=1597200
:P ma quando finirà?
*headscratch*
Fai una cosa, intanto che il converter gira, apri phpmyadmin in un'altra pagina del browser e cerca la tabella smf_members, quante righe ha al momento?
smf_members 4,798 MyISAM utf8_unicode_ci 1.8 MiB
smf_messages 1,639,000 MyISAM utf8_unicode_ci 1.0 GiB
smf_topics 3,940 MyISAM utf8_unicode_ci 659.8 KiB
mentre in IPB
ibf_members 4,818 MyISAM latin1_general_ci 1.7 MiB
ibf_posts 2,048,715 MyISAM latin1_general_ci 3.7 GiB
ibf_topics 3,947 MyISAM latin1_general_ci
Allora i post sono 2 milioni, non 1 e mezzo! ;D
Quindi devi arrivare a 2...
Spero proprio che non succeda nulla dopo aver importato i post! Ripeto, c'è possibilità di un resume o nel malaugurato caso che spunti qualche altro errore si ricomincia da capo?
Nel malaugurato caso si può sempre togliere fisicamente dal file del converter ciò che è già stato fatto. ;)
Ho fatto qualche conto per ingannare il tempo:
lo script converte circa 800 post al minuto
ne rimangono 259915 che diviso 800 fa 324 minuti, quindi cinque ore e mezzo, in pratica per convertire tutto il forum ci starà un giorno, visto che ho cominciato ieri pomeriggio! :P
800 al minuto sembrano molto pochi...dovrebbe farne una media di almeno un 50/100 al secondo di media... ???
/me va a controllare il file
Allego quello che sto usando dopo le modifiche di questo topic
---* {$to_prefix}messages 200
Questo dice che dovrebbe processare 200 messaggi *alla volta*, oghi passaggio dovrebbe fare più blocchi, poi pausa di 3 secondi e riprendere.
Quindi, anche nel caso peggiore dovrebbe fare almeno 200 messaggi ogni 6/7 secondi, quindi un 2000 messaggi al minuto...però...però effettivamente questa è una query che rallenta ad ogni passaggio per il modo stesso in cui è costretta a processare i dati, si deve basare su LIMIT min, range, quindi in pratica tutte le volte deve: raccogliere ed ordinare tutti i dati secondo, quindi partire dall'inizio e contare riga per riga fino a quando non arriva al limite "min" e poi prendere le successive 200 righe...ovviamente, quando si arriva oltre milione ci vuole tempo per fare tutto. E' lo stesso limite strutturale contro cui ho cozzato tempo fa quando ho riscritto il codice per il backup del database, avevo provato ad introdurre qualche ottimizzazione, ma purtroppo non sono affidabili e rischierebbero di portare alla perdita di dati, quindi non si può proprio fare niente... :(
Beh l'importante è che funzioni! Eseguendo lo script in locale potrebbe migliorare la situazione?
Qualcosa, ma probabilmente non moltissimo...
Finalmente ha finito!
E' comparso un messaggio di errore sui sondaggi che non sono riuscito a leggere, poi si è bloccato qui:
Converting...
Converting personal messages (step 1)...
Successful.
Converting personal messages (step 2)... Successful.
Converting personal messages (step 3)...
Notice: Undefined index: id_pm in /***/convert.php(1091) : eval()'d code on line 9
Unsuccessful!
This query:
UPDATE `b***_smf`.smf_personal_messages
SET deleted_by_sender = '0'
WHERE id_pm =;
Caused the error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
Prendi quello allegato, ho già provveduto a togliere quello che hai già fatto (fino alla conversione dei messaggi personali).
Per tracking, quello che ho fatto è cambiare:
while ($row = convert_fetch_row($request))
convert_query("
UPDATE {$to_prefix}personal_messages
SET deleted_by_sender = '0'
WHERE id_pm = $row[id_pm]");
$request = convert_query("
SELECT pm.id_pm
FROM {$to_prefix}pm_recipients AS r
INNER JOIN {$from_prefix}message_topics AS m ON (m.mt_msg_id = r.id_pm && m.mt_vid_folder != 'sent')");
while ($row = convert_fetch_row($request))
convert_query("
UPDATE {$to_prefix}personal_messages
SET deleted = '0'
WHERE id_pm = $row[id_pm]");
In:
while ($row = convert_fetch_row($request))
if (!empty($row['id_pm']))
convert_query("
UPDATE {$to_prefix}personal_messages
SET deleted_by_sender = '0'
WHERE id_pm = $row[id_pm]");
$request = convert_query("
SELECT pm.id_pm
FROM {$to_prefix}pm_recipients AS r
INNER JOIN {$from_prefix}message_topics AS m ON (m.mt_msg_id = r.id_pm && m.mt_vid_folder != 'sent')");
while ($row = convert_fetch_row($request))
if (!empty($row['id_pm']))
convert_query("
UPDATE {$to_prefix}personal_messages
SET deleted = '0'
WHERE id_pm = $row[id_pm]");
Converting...
Converting personal messages (step 3)... Unsuccessful!
This query:
SELECT pm.id_pm
FROM `***_smf`.smf_pm_recipients AS r
INNER JOIN `***_database`.ibf_message_topics AS m ON (m.mt_msg_id = r.id_pm && m.mt_vid_folder != 'sent');
Caused the error:
Unknown column 'pm.id_pm' in 'field list'
Uhm, non ho trovato nulla
Scusa, non me ne sono accorto...
Nel file che ho caricato:
$request = convert_query("
SELECT pm.id_pm
FROM {$to_prefix}pm_recipients AS r
cambialo in:
$request = convert_query("
SELECT r.id_pm
FROM {$to_prefix}pm_recipients AS r
Quindi:
$request = convert_query("
SELECT pm.id_pm
FROM {$to_prefix}pm_recipients AS r
cambialo in:
$request = convert_query("
SELECT r.id_pm
FROM {$to_prefix}pm_recipients AS r
C'è stato qualche warning, ma alla fine è andato tutto! Grazie per l'aiuto indispensabile!.
Un ultima richiesta, siccome nel frattempo ci sarebbero ancora i post scritti dopo la conversione del database posso convertire soltanto quelli?
arg... non è cosa facile...
Si saranno aggiunti anche nuovi topic immagino...
Hai un'idea di quanti messaggi stiamo parlando?
Si, immagino sia difficile. Vabbè non è importante, alla fine erano pochi. Va molto bene così, grazie mille per l'indispensabile aiuto!
Se sono pochi, puoi provare a farlo manualmente da phpmyadmin (sempre che non l'hai ancora aperto al pubblico, perché in tal caso lo cosa diventa più complessa, molto più complessa), ma siccome non l'ho mai fatto ho bisogno di "qualche momento" per dirti esattamente le query da eseguire...
Ormai è aperto, quindi si sovrapporrebero gli id con quegli vecchi, ma ripeto non vale la pena, grazie per il grande aiuto!
Di nulla, felice sia andato tutto bene! ;D
Mi sono accorto che non ha convertito la tabella dei messaggi privati, c'è un modo di convertire SOLO quella (ho il dump) e inserirla nel database di SMF?
Apparentemente dal log che hai postato prima parrebbero convertiti...
Il problema di farlo ora sono gli id e l'ordine dei messaggi, quindi bisognerebbe in pratica:
* backup degli attuali,
* conversione e upload
* re-inserimento degli "attuali" uno per uno mantenendo l'associazione, etc...
Quote from: emanuele on August 20, 2013, 04:13:36 AM
Apparentemente dal log che hai postato prima parrebbero convertiti...
Il problema di farlo ora sono gli id e l'ordine dei messaggi, quindi bisognerebbe in pratica:
* backup degli attuali,
* conversione e upload
* re-inserimento degli "attuali" uno per uno mantenendo l'associazione, etc...
Ok, allora passo ;)
Ma è veramente strano, controlla se nella tabella del db sono spariti.
Non vorrei ci fosse "solo" qualche altri problema da qualche parte...