probleme importation en locale BD mySQL

Didier_47

Membre confirmé
30 Janvier 2004
37
0
Bonjour!

J'ai un souci avec ma base de données.

Je l'ai exportée depuis mon hébergeur en .sql (phpMyAdmin v.2.6.0-pl3 et MySQL 3.23.58)

et lorsque j'essaie de l'importer chez moi en local (phpMyAdmin v.2.7.0-pl2 et MySQL 5.0.19) il n'arrive pas à récupérer correctement la BD. Il dit qu'il y a un problème de syntaxe #1064

QL query:

INSERT INTO `smf_themes` (
`ID_MEMBER` ,
`ID_THEME` ,
`variable` ,
`value`
)
VALUES # --------------------------------------------------------
#
# Table structure for table `smf_topics`
#

DROP TABLE IF EXISTS `smf_topics` ;


MySQL said:

#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 'DROP TABLE IF EXISTS `smf_topics`' at line 5

Quel problème y a-t-il?? Est-ce dû à une différence de version mySQL? Comment corriger ça?

Merci de m'aider parce que là... je dois changer d'hébergeur et je pas perdre les données de mon forum!!
 
Tout est dans le message : tu es passé de MySQL 3 à MySQL 5 et la fonction DROP TABLE IF EXISTS a peut être changé de mode de fonctionnement. Un petit tour dans la doc de MySQL ... :siffle:

Sinon les commentaires derrière le "VALUES" :confused:
 
Tout est dans le message : tu es passé de MySQL 3 à MySQL 5 et la fonction DROP TABLE IF EXISTS a peut être changé de mode de fonctionnement. Un petit tour dans la doc de MySQL ... :siffle:

Sinon les commentaires derrière le "VALUES" :confused:
Je profite du thread pour demander si quelqu'un arrive a exporter ses tables en utf8 chez Free.

Mes tables sont en utf8 et quelque soit l'encodage choisi pour l'export, les caractères spéciaux sont n'importe quoi genre √© à la place de é etc...

Et j'ai essayer tout les encodages de sorties disponibles, à croire que PHPMyAdmin ne sait pas gérer le UTF-8 en fait...


Si quelqu'un à la solution, ça serait vraiment géniale de pouvoir sauvegarder sa bdd sans avoir à reprendre le fichier pendant uen demi heure à chaque fois :rateau: :)
 
Merci! J'ai vu qu'il y a erreur de syntaxe... le problème c'est qu'apparemment toute la syntaxe est erronée... du coup y a-t-il un moyen de convertir une BD mySql 3 à MySql 5??
 
Qu'entends-tu pas "toute le syntaxe" : toutes les lignes de ton fichier d'export ?
(Désolé mais je n'ai pratiqué que MySQL 5)
En tous les cas, c'est un fichier texte que tu peux modifier avec n'importe quel éditeur de texte (évite toutefois d'utiliser TextEdit en RTF :siffle:). Donc garde une copie de l'original au chaud, et n'hésite pas à bricoler quelques lignes de ton fichier pour le remettre aux standards MySQL 5.
Après pour des outils tout fait pour remettre en forme des milliers de lignes : Google est ton ami, mais le site de MySQL aussi :D
 
Tu maîtrises mySQL 5 ? Si je te montre un bout de ma base, tu peux me dire ce qui joue pas dans la syntaxe???

Voici un petit bout

#
# Table structure for table `smf_attachments`
#

DROP TABLE IF EXISTS `smf_attachments`;

CREATE TABLE `smf_attachments` (
ID_ATTACH int(11) unsigned NOT NULL auto_increment,
ID_MSG int(10) unsigned NOT NULL default 0,
ID_MEMBER int(10) unsigned NOT NULL default 0,
filename tinytext NOT NULL default '',
size int(10) unsigned NOT NULL default 0,
downloads mediumint(8) unsigned NOT NULL default 0,
PRIMARY KEY (ID_ATTACH),
UNIQUE ID_MEMBER (ID_MEMBER, ID_ATTACH),
KEY ID_MSG (ID_MSG)
) TYPE=MyISAM;

#
# Table structure for table `smf_banned`
#

DROP TABLE IF EXISTS `smf_banned`;

CREATE TABLE `smf_banned` (
ID_BAN mediumint(8) unsigned NOT NULL auto_increment,
ban_type varchar(30) NOT NULL default '',
ip_low1 tinyint(3) unsigned NOT NULL default 0,
ip_high1 tinyint(3) unsigned NOT NULL default 0,
ip_low2 tinyint(3) unsigned NOT NULL default 0,
ip_high2 tinyint(3) unsigned NOT NULL default 0,
ip_low3 tinyint(3) unsigned NOT NULL default 0,
ip_high3 tinyint(3) unsigned NOT NULL default 0,
ip_low4 tinyint(3) unsigned NOT NULL default 0,
ip_high4 tinyint(3) unsigned NOT NULL default 0,
hostname tinytext NOT NULL default '',
email_address tinytext NOT NULL default '',
ID_MEMBER mediumint(8) unsigned NOT NULL default 0,
ban_time int(10) unsigned NOT NULL default 0,
expire_time int(10) unsigned,
restriction_type varchar(30) NOT NULL default '',
reason tinytext NOT NULL default '',
notes text NOT NULL default '',
PRIMARY KEY (ID_BAN)
) TYPE=MyISAM;

Si quelqun trouves l'erreur... qu'il me le dise! ce serait vraiment trop sympa!!!
 
Je profite du thread pour demander si quelqu'un arrive a exporter ses tables en utf8 chez Free.

Mes tables sont en utf8 et quelque soit l'encodage choisi pour l'export, les caractères spéciaux sont n'importe quoi genre √© à la place de é etc...

Et j'ai essayer tout les encodages de sorties disponibles, à croire que PHPMyAdmin ne sait pas gérer le UTF-8 en fait...


Si quelqu'un à la solution, ça serait vraiment géniale de pouvoir sauvegarder sa bdd sans avoir à reprendre le fichier pendant uen demi heure à chaque fois :rateau: :)
Je me répond tout seul, apparement il n'y a aucune solutions, donc j'ai fait moi même un script PHP pour backuper ma bdd chez Free.

le voici si ça intéresse quelqu'un :)

Bloc de code:
<?php
header('Content-type: text/plain; charset=utf8');

define('SQL_HOST', 'sql.free.fr');
define('SQL_USER', 'your.user.name');
define('SQL_PASS', 'your.password');
define('SQL_DABA', 'your_user_name'); // remplacer les . par des _ !

function getAutoIncrementValue ($table) {
	$result = @mysql_query("SELECT MAX(id) AS last_id FROM `".$table."`");
	$result = @mysql_fetch_array($result);
	return ($result['last_id']+1 == 1) ? '' : ' AUTO_INCREMENT='.($result['last_id']+1);
}

if ($connexion = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS)) {
	mysql_select_db(SQL_DABA);
	
	$bdd = '';
	$tables = mysql_query('SHOW TABLES FROM `'.SQL_DABA.'`;');
	while ($table = mysql_fetch_array($tables)) {
		$bdd .= '-- '.strtoupper($table[0]).' --'."\n";
		$bdd .= 'CREATE TABLE `'.$table[0].'` ('."\n";
		$fields = mysql_query('SHOW COLUMNS FROM `'.$table[0].'`;');
		$key = array();
		while ($field = mysql_fetch_array($fields)) {
			$bdd .= '  `'.$field[0].'` '.$field[1].(($field[2]=='NO')?' NOT NULL':'').((!empty($field[5]))?' '.$field[5].',':',')."\n";
			if ($field[3] == 'MUL') {
				$key[] = $field[0];
			}
		}
		if (count($key)>0) {
			foreach ($key as $kf) {
				$bdd .= '  KEY `'.$kf.'` (`'.$kf.'`),'."\n";
			}
		}
		$bdd = substr($bdd, 0, -2)."\n) ";
		$bdd .= 'ENGINE=MyISAM'.getAutoIncrementValue($table[0]).' DEFAULT CHARSET=utf8;'."\n\n";
		
		$datas = mysql_query("SELECT * FROM `".$table[0]."`");
		while ($data = mysql_fetch_array($datas)) {
			$nb = (count($data)/2);
			$bdd .= 'INSERT INTO `'.$table[0].'` VALUES (';
			for ($i=0; $i < $nb; $i++) {
				$bdd .= '\''.mysql_real_escape_string($data[$i]).'\', ';
			}
			$bdd = substr($bdd, 0, -2).');'."\n";
		}
		
		$bdd .= "\n\n";
	}
	echo $bdd;
	
	mysql_close($connexion);
}
else {
	echo 'Erreur : impossible de se connecter &#224; la base de donn&#233;es.';
}

?>

Attention j'ai d&#233;velopp&#233; ce truc l&#224; pour mon usage personnel, il ne convient pas forc&#233;ment &#224; votre bdd sans modifications (par exemple je sais que tout mes champs qui ont un auto_increment sont appel&#233; 'id' etc...

Et faut aussi savoir que j'ai &#233;crit ce code par essaie/erreur (en faisant plein de print_r pour voir les info dispo au fur et &#224; mesure), donc il se peut que &#231;a ne marche pas chez tout le monde :)
 
Je tiens juste &#224; pr&#233;ciser que c'est super utile de faire des sauvegarde de sa base de donn&#233;es, parce que quand on perd tout (&#231;a m'est d&#233;j&#224; arriv&#233;), ben c'est vraiment la mis&#232;re :(

Par exemple pour mon blog (voir signature), qui ne contient pourtant pas encore grand chose (&#224; peine plus de 70 posts, un peu plus de 40 commentaires, plus quelques autre fioritures dans la bdd), et bien &#231;a fait d&#233;j&#224; un fichier de sauvegarde .sql de 360Ko.

360Ko de texte, &#231;a fait beaucoup, alors quand c'est perdu c'est super chiant !
D'o&#249; mon acharnement &#224; la sauvegarde.


J'esp&#232;re vraiment que mon script pourra sauver quelqu'un des cheveux blanc, d'un apr&#232;s midi pass&#233; &#224; retrouver par ci par l&#224; seulement quelque bout de sa base de donn&#233;es :)
 
Bonjour!

J'ai un souci avec ma base de donn&#233;es.

Je l'ai export&#233;e depuis mon h&#233;bergeur en .sql (phpMyAdmin v.2.6.0-pl3 et MySQL 3.23.58)

et lorsque j'essaie de l'importer chez moi en local (phpMyAdmin v.2.7.0-pl2 et MySQL 5.0.19) il n'arrive pas &#224; r&#233;cup&#233;rer correctement la BD. Il dit qu'il y a un probl&#232;me de syntaxe #1064

Quel probl&#232;me y a-t-il?? Est-ce d&#251; &#224; une diff&#233;rence de version mySQL? Comment corriger &#231;a?

Merci de m'aider parce que l&#224;... je dois changer d'h&#233;bergeur et je pas perdre les donn&#233;es de mon forum!!
Un petit tour sur Google et tu trouveras que MySQL recommande de passer par la version 4 pour migrer une base 3.23 vers 5.0 :
3.23 -> 4.x -> 5.x :zen:

PS : il n'y a pas de probl&#232;me pour installer plusieurs versions de MySQL. Tu changes juste l'alias /usr/local/mysql pour d&#233;finir la version courante.