Titre du sujet : changement d'hébergeur par setas sur 30/01/2009 10:24:28
Je suis en train de changer d'hébergeur. Je suis coincé depuis 2 semaines à cause du transfert de la base de donnée. C'est que la base de mon site Xoops est grosse, le sql généré dépasse les 80M.
Même table après table j'arrive a un time out pour les plus grosses (26M).
J'ai essayé avec le module backup (des chinois). L'exportation ne pose pas de problème, mais à l'importation sur l'autre hébergeur, ça coince. En effet, pour accéder au module, il faut déjà qu'une bonne partie de la DB soit remplie, puis il faut charger les tables les unes après l'autre, mais il faut aussi faire les "DROP TABLE". Du coup, en traitant une table, je me suis retrouvé avec une page blanche :-o. plus accès au site sur le nouvel hébergeur ... j'étais bon pour recommencer à charger des tables une à une depuis phpmyadmin ... Pfffff !
J'ai donc essayé de faire un petit programme pour charger ces tables automatiquement (ci-dessous), les unes après les autres. Mais il en traite un bout et après "time out". et table seulement partiellement chargée et dur dur de s'y retrouver ...
Je pourrais bien continuer mon programme, et spliter les trops gros fichiers, puis trouver comment lancer ça automatiquement en plusieurs fois pour éviter les time out ... mais c'est quand même de la très grosse bricole.
N'y a-t'il pas un moyen professionnel de transférer une grosse DB d'un hébergeur à un autre ????
<?
$DEBUG = @$_GET["DEBUG"] ; //
if (!$DEBUG) $DEBUG = 'NO' ; //
// initialisations data base
// =========================
mysql_connect('***************','***********','*********3');
mysql_select_db('************');
$fp = fopen('log.txt', 'w'); // fichier log
$dir = './uploads/backup/';
$files = scandir($dir ,1);
/* result like :
Array
(
[0] => truc.sql
[1] => machin.sql
[2] => chose.sql
[3] => ..
[4] => .
)
// donc éliminer les 2 derniers
*/
$nb_files = count($files) - 2 ;
if ($DEBUG=='YES') $nb_files = 4 ;
for ( $counter = 0; $counter < $nb_files; $counter += 1)
{
$FileName = $dir."/".$files[$counter] ;
fwrite($fp, "FILE : ".$FileName." n ============================ nn");
$all_sql = file_get_contents($FileName);
//$all_sql = trim($all_sql);
$len = strlen ($all_sql) ;
echo $FileName." nbcar : ".$len."<br>" ;
$pos = 0 ;
$oldpos = 0 ;
$count = 0;
$FailCount = 0;
// BOUCLE dans le fichier
// ======================
while ( $pos = strpos( $all_sql , ';
' , $oldpos) )
{
//echo $pos."<br>" ;
$sql = substr($all_sql,$oldpos ,($pos-$oldpos) + 1);
if ($DEBUG=='YES')
{
fwrite($fp, "nde ".$oldpos." à ".$pos."n");
fwrite($fp, "requête :n".$sql."n");
}
$oldpos = $pos + 1 ;
$result = mysql_query($sql);
if (!$result) {
//die('Requête invalide : ' . mysql_error());
//echo mysql_error()."<br>n" ;
//echo $sql."<br>" ;
if ($DEBUG=='YES')
{
fwrite($fp, "FAIL N° ".$FailCount." n");
fwrite($fp, mysql_error()."n");
if ($FailCount>20) $oldpos = 100000000 ; //force l'arrêt de la boucle
}
$FailCount += 1 ;
}
else
{
$count =$count + 1 ;
if ($DEBUG=='YES')
{
fwrite($fp, "SUCCESS ! ".$count." n");
if ($count>20) $oldpos = 100000000 ; //force l'arrêt de la boucle
}
}
}
echo $count." elements added n"."<br>" ;
echo $FailCount." elements with errors n"."<br>" ;
fwrite($fp, $count." elements added n");
fwrite($fp, $FailCount." elements with errors nn");
}
fclose($fp);
?>
|