Restauration BBD ne fonctionne pas

[Résolu]
Signaler
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009
-
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-
Bonjour,

Voila j'ai récupérer un script sur le site pour sauvegarder ma BDD. J'ai modifié le script pour enlever les fonctions envoi par mail et FTP. J'ai aussi modifier $sql_header pour y rajouter des infos style phpmyadmin.

Les sauvgardes fonctionnent mais pas leur restauration.
#1064 - Erreur de syntaxe pr?s de 'CREATE TABLE `referer` (
  `id` smallint(4) NOT NULL auto_inc' ? la ligne 21

Voici le script:

// DUMP SQL
function saveDB($mysql_array = array()){

$mysql_host = $mysql_array[0];
$mysql_user = $mysql_array[1];
$mysql_password = $mysql_array[2];

error_reporting(0);
$err_msg = '';
$maxinsert = 500;

if (!empty($mail_array)){
$mail = $mail_array[0];
$attachement = $mail_array[1];
}

if(!$link = mysql_connect($mysql_host,$mysql_user,$mysql_password))
$err_msg .= 'Impossible de se connecter à '.$mysql_host."\n";
else{
$testfile = 'backup_sql/'.uniqid(mt_rand()).'.tmp';
if (!$handle = fopen($testfile,'w'))
$err_msg .= 'Impossible d\'ouvrir un fichier en écriture dans le répertoire "backup_sql/"'."\n";
else
fclose($handle);

if (file_exists($testfile)) unlink($testfile);

if ($err_msg == ''){
$db_list = mysql_list_dbs($link);
$names = array();

while ($row = mysql_fetch_object($db_list)) {
if ($row->Database != 'information_schema'){
$q = 'SHOW CREATE DATABASE `'.($row->Database).'`';
$r = mysql_query($q);

while ($s=mysql_fetch_object($r)){
$filename = 'BackupSQL_'.($row->Database).'_'.date('d-m-Y').'.sql';
$names[] = $filename;
if (!$handle = fopen('backup_sql/'.$filename, 'w'))
$err_msg .= 'Impossible d\'ouvrir en écriture le fichier sql de '.($row->Database)."\n";
else{

$sql_header .= '# SQL Dump par script PHP'."\n";
$sql_header .= '# http://www.******.com'."\n";
$sql_header .= '#'."\n";
$sql_header .= '# Serveur: sql.*****.fr'."\n";
$sql_header .= '# Généré le '.date('d-m-Y à H:i:s').''."\n";
$sql_header .= '# Version du serveur PHP: '.phpversion().''."\n";
$sql_header .= '# Version de Mysql: '.mysql_get_server_info().''."\n";
$sql_header .= '#'."\n";
$sql_header .= '# Base de données: `'.($row->Database).'`'."\n";
$sql_header .= '#'."\n";
$sql_header .= '#'."\n\n";
$sql_header .= $s->{'Create Database'}.";\n\n";

if (fwrite($handle, $sql_header) === FALSE)
$err_msg .= 'Impossible d\'écrire dans le fichier sql de '.($row->Database)."\n";
else{
mysql_select_db($row->Database, $link);

$q3 = 'SHOW TABLES';
$r3 = mysql_query($q3);

while ($s3 = mysql_fetch_object($r3)){
$table = $s3->{'Tables_in_'.($row->Database)};
$q4 = 'SHOW CREATE TABLE `'.$table.'`;';
$r4 = mysql_query($q4);

while ($s4 = mysql_fetch_object($r4)){
$sql_export = '';
$sql_export .= '# ---------------------------------------------------'."\n\n";
$sql_export .= '#'."\n";
$sql_export .= '# Structure de la table `'.$table.'`'."\n";
$sql_export .= '#'."\n\n";
$sql_export .= $s4->{'Create Table'}."\n\n";

$q5 = 'SELECT * FROM `'.$table.'`;';
$r5 = mysql_query($q5);

$slashes = array();
    $nbfields = mysql_num_fields($r5);
for($i=0; $i < $nbfields; $i++)
if (in_array(mysql_field_type($r5, $i), array('string','blob')))
$slashes[$i] = '\'';

$count = 0;

while($s5 = mysql_fetch_array($r5)){
$count++;

$sql_export .= '#'."\n";
$sql_export .= '# Contenu de la table `'.$table.'`'."\n";
$sql_export .= '#'."\n\n";

$sql_export .= 'INSERT INTO `'.$table.'` VALUES(';
$sql_export .= $slashes[0].mysql_real_escape_string($s5[0]).$slashes[0];
for($i=1; $i < $nbfields; $i++)
$sql_export .= ', '.$slashes[$i].mysql_real_escape_string($s5[$i]).$slashes[$i];

$sql_export .=  ");\n";

if($count == $maxinsert){
if (fwrite($handle, $sql_export) === FALSE){
$err_msg .= 'Erreur d\'exportation avec la '.$table.' de la base '.($row->Database)."\n";

}
else
$sql_export = '';
}
}
$sql_export .= "\n";

if (fwrite($handle, $sql_export) === FALSE)
$err_msg .= 'Erreur d\'exportation avec la '.$table.' de la base '.($row->Database)."\n";
}
}
}
fclose($handle);
}
}
}
}
}
}
}

$mysql_data = array(SERVEUR,NAME,PASS);

MERCI et @+

16 réponses

Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
A vue d'oeil, je dirai que ton script ne met pas de ; à la fin des create, alors qu'il le faut (c'est ce qui permet à sql de savoir où la nouvelle requete commence !)

"ENGINE=MyISAM DEFAULT CHARSET=utf8"
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
ca c'est un probleme d'encodage : il faut que tu récupere le type d'encodage de ta bdd, et que tu fasse un fichier qui ait le meme type d'encodage, ou que tu encode les données de la bdd dans le même format.

Regarde du coté de
utf8_encode et utf8_decode

Content que tu ai solutionné le probleme ! :)
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
1. Ouvre ton fichier et regarde la tête de la table `referer`
2. Vas dans phpmyadmin et fais un SHOW CREATE TABLE `referer`
3. Compare les 2

*****
noisy communication - wherever, be everywhere!
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Phpmyadmin:
CREATE TABLE `referer` (\n  `id` smallint(4) NOT NULL auto_increment,\n

Script:
'CREATE TABLE `referer` (   `id` smallint(4) NOT NULL auto_increment,

Voic les différences les \n
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Pas d'infos du pourquoi et du comment ???
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
les \n ne changent rien, le problème est ailleurs...

*****
noisy communication - wherever, be everywhere!
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
est-ce que tu insère plusieures tables ?
Si tu fait une requete de création de plusieurs tables sur la meme requete, en php avec mysql_query, ca passe pas, c'est ptete ca ?
Il faut découper chaques requetes en plusieures requetes et non plusieurs séparées par des ;
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Je bute et ne trouve pas le soucis !
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
la requete qui plante, c'est juste UN seul insert ? ou c'est PLUSIEURS insert ?
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Ca plante dès la permière requête.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
mais ce que je veux dire, c'est s'il tu fait plusieurs requetes d'un coup, genre

mysql_query ("create....; create....;create....");
ou si tu fait
mysql_query ("create.....;");
mysql_query ("create ....;");
mysql_query ("create ....;");

Car la premiere méthode ne marche pas avec la fonction mysql_query !
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

J'essaye de faire la restauration avec phpmyadmin en lui précisant le fichier que j'ai sauvegardé via le script.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Si j'ai bien compris tu exporte ta bdd avec ton script, et tu essaye ensuite de l'importer dans phpmyadmin ?

Si c'est le cas c'est possible de voir le fichier généré par ton script en entier ? (si ya pas des trucs indiscrets :p)
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

# SQL Dump par script PHP
# http://www.******.com
#
# Serveur: sql.******.fr
# Généré le 06-01-2008 à 20:03:03
# Version du serveur PHP: 4.3.11
# Version de Mysql: 4.1.16-Max
#
# Base de données: `*******`
#
#


CREATE DATABASE `*********` /*!40100 DEFAULT CHARACTER SET utf8 */;


# ---------------------------------------------------


#
# Structure de la table `last_connect`
#


CREATE TABLE `last_connect` (
  `ip` varchar(15) NOT NULL default '0.0.0.0',
  `date` date NOT NULL default '0000-00-00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8


#
# Contenu de la table `last_connect`
#


INSERT INTO `last_connect` VALUES('**.***.***.***', 2008-01-06);


# ---------------------------------------------------


#
# Structure de la table `ref_client`
#


CREATE TABLE `ref_client` (
  `id` smallint(4) NOT NULL auto_increment,
  `nom` varchar(100) NOT NULL default '',
  `ville` varchar(100) NOT NULL default '',
  `date` date NOT NULL default '0000-00-00',
  `photo1` varchar(255) NOT NULL default '',
  `text1` varchar(60) NOT NULL default '',
  `photo2` varchar(255) NOT NULL default '',
  `text2` varchar(60) NOT NULL default '',
  `photo3` varchar(255) NOT NULL default '',
  `text3` varchar(60) NOT NULL default '',
  `photo4` varchar(255) NOT NULL default '',
  `text4` varchar(60) NOT NULL default '',
  `photo5` varchar(255) NOT NULL default '',
  `text5` varchar(60) NOT NULL default '',
  `photo6` varchar(255) NOT NULL default '',
  `text6` varchar(60) NOT NULL default '',
  `description` text NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


#
# Contenu de la table `ref_client`
#


INSERT INTO `ref_client` VALUES(4, '******', '****', 2006-11-12, '*****_1_456789AZ_06032007071.jpg', 'Accenderat super his incitatum propositum ad nocendum', '******_2_3456789A_06032007072.jpg', 'Et eodem impetu Domitianum praecipitem per scalas', '******_3_fghijklm_P1010016.JPG', 'Isdem diebus Apollinaris Domitiani gener paulo ante', '******_4_DSQWXCVB_P1010006.JPG', 'Quod cum ita sit, paucae domus studiorum seriis', '******_5_defghijk_06032007070.jpg', 'Nunc vero inanes flatus quorundam vile esse quicquid', '*******_6_fghijklm_PA270027.JPG', 'Excogitatum est super his, ut homines quidam ignoti', 'Hacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo.

\r\nHorum adventum praedocti speculationibus fidis rectores militum tessera data sollemni armatos omnes celeri eduxere procursu et agiliter praeterito Calycadni fluminis ponte, cuius undarum magnitudo murorum adluit turres, in speciem locavere pugnandi. neque tamen exiluit quisquam nec permissus est congredi. formidabatur enim flagrans vesania manus et superior numero et ruitura sine respectu salutis in ferrum.

\r\nIdeo urbs venerabilis post superbas efferatarum gentium cervices oppressas latasque leges fundamenta libertatis et retinacula sempiterna velut frugi parens et prudens et dives Caesaribus tamquam liberis suis regenda patrimonii iura permisit.

');
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

ok je vais essayer celà
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Ok merci celà fonctionne maintenant. Sinon quand je restaure la base il me remplace les é par des ?. Comment évitez celà ?