OVH Cloud OVH Cloud

synchronisation de DB

3 réponses
Avatar
WebRod
Bonjour,

connaissez-vous un script php qui compare 2 bases de données, détecte les
différences de tables et champs dans les tables des 2 bds, et, cerise sur le
gateau, soit capable de mettre à jour l'architecture d'une bd par rapport à
une autre???? (pas le sdonnées hein, la structure, le schema quoi)

Du style, je suis en dev, je rajoute un champs, en supprime un autre. Je
lance le script php et l'architecture de la table en PROD est modifiée en
consequence)??

(il est important que le script soit en php).

Merci

Rod

3 réponses

Avatar
Jedi121
Du style, je suis en dev, je rajoute un champs, en supprime un autre. Je
lance le script php et l'architecture de la table en PROD est modifiée en
consequence)??


C'est intéressant.
Je ne sais pas si ça existe mais j'ai le même besoin.
On peut le faire soit même.

Avatar
Jedi121
Il se trouve que Jedi121 a formulé :
On peut le faire soit même.
Premier jet :


<?php
function GetTables($link) //Renvoie les noms des
tables de la base dans un tableau
{
$res = mysql_query("SHOW TABLES", $link);
while ($line = mysql_fetch_array($res))
{
$msg[] = $line[0];
}
return $msg;
}
function GetCreateSql($table_name, $link) //Renvoie la commande SQL
pour créer la table
{
$tab = mysql_fetch_array(mysql_query("SHOW CREATE TABLE $table_name",
$link));
return $tab[1].";n";
}
function GetDropSql($table_name) //Renvoie la commande SQL pour
détruire la table
{
return "DROP TABLE IF EXISTS $table_name;n";
}

$prod = mysql_connect("localhost", "base1", "mdp1");
mysql_select_db("base1");
$dev = mysql_connect("localhost", "base2", "mdp2");
mysql_select_db("base2");

$tablesp = GetTables($prod);
$tablesd = GetTables($dev);

$tablesseulenprod = array_diff($tablesp,$tablesd);
$tablesseulendev = array_diff($tablesd,$tablesp);
$tablescommunes = array_intersect($tablesd,$tablesp);
foreach($tablescommunes AS $key=>$table) {
$tableprod = GetCreateSql($table,$prod);
$tabledev = GetCreateSql($table,$dev);
if ($tableprod==$tabledev) {
$comparaison[$table]='identique';
} else {
$comparaison[$table]='différente';
}
}
?>
<html>
<head>
<title>Diff de bases SQL</title>
</head>
<body>
<table>
<tr>
<td><h3>Prod</h3></td>
<td></td>
<td></td>
<td><h3>Dev</h3></td>
</tr>
<?php
foreach($tablesseulenprod AS $clef=>$valeur) {
echo "<tr>n";
echo "<td>$valeur</td>n";
echo "<td><input type='radio' name='$valeur' value='prod'
checked='checked'><=</td>n";
echo "<td>=><input type='radio' name='$valeur' value='dev'></td>n";
echo "<td></td>n";
echo "</tr>n";
}

foreach($tablesseulendev AS $clef=>$valeur) {
echo "<tr>n";
echo "<td></td>n";
echo "<td><input type='radio' name='$valeur' value='prod'
checked='checked'><=</td>n";
echo "<td>=><input type='radio' name='$valeur' value='dev'></td>n";
echo "<td>$valeur</td>n";
echo "</tr>n";
}

foreach($tablescommunes AS $clef=>$valeur) {
echo "<tr>n";
echo "<td>$valeur</td>n";
if ($comparaison[$valeur]=='différente') {
echo "<td><input type='radio' name='$valeur' value='prod'
checked='checked'><=</td>n";
echo "<td>=><input type='radio' name='$valeur'
value='dev'></td>n";
} else {
echo "<td colspan='2'>identique à</td>n";
}
echo "<td>$valeur</td>n";
echo "</tr>n";
}
?>
</table>
</body>
</html>

Avatar
Raso
Bonjour,

"WebRod" a écrit dans le message de news:
4256a562$0$15290$
connaissez-vous un script php qui compare 2 bases de données, détecte les
différences de tables et champs dans les tables des 2 bds, et, cerise sur
le
gateau, soit capable de mettre à jour l'architecture d'une bd par rapport
à
une autre???? (pas le sdonnées hein, la structure, le schema quoi)

Du style, je suis en dev, je rajoute un champs, en supprime un autre. Je
lance le script php et l'architecture de la table en PROD est modifiée en
consequence)??


www.mysqldiff.org

raso