Dag allemaal,

Ik heb een probleem met mysql waar ik nog geen oplossing voor heb gevonden.

Ik start mysql administrator
druk op Catalogs
Druk op een van die catalogs en dan krijg ik de volgende vermelding

"Could not fetch schema table status"

Ik kan ook geen backups meer nemen

Dit is plots gekomen.

Het rare is dat men ook geen velden meer kan wijzigen via
Mysql query omdat de "edit knop" uitgeschakeld is, maar men kan wel de velden wijzigen via de website.

Ik heb op de website van mysql gekeken maar voorlopig geen passende oplossing gevonden.

Met vriendelijke groeten,

Marc
Wanneer je even Googlet, krijg je genoeg resultaten, vooral in MySQL-bugreports. Het is een bekend probleem, wellicht is er ook een oplossing bekend.

Ps. Er bestaan ook nog andere, betere, databases dan MySQL...
pgFrank schreef op 19.11.2007 22:22
Ps. Er bestaan ook nog andere, betere, databases dan MySQL...
Ik was al aan het lezen, en dacht na de eerste alinea: Wtf, hij begint een keer niet over PostgreSQL! Een wonder! Maar dan toch :P
Met dank aan pqfrank en jonathan maar geloof me of niet ik heb reeds vaak gegooglet en kom steeds meer in de problemen met wat zij mij voorstellen.

Is er een mogelijkheid een backup te maken via een php programmatje?
Want ik denk er steeds meer over om de server plat te gooien en vanaf nul te herstarten. Als ik bekijk de uren en dagen dat ik nu reeds aan het zoeken ben om een oplossing te vinden kom ik er vlugger vanaf door een full format en dan alles herinstalleren. Juist nog de gegevens kunnen opslaan op een andere schijf vanop afstand.

Als dat mogelijk is dan zijn waarschijnelijk mijn problemen verleden tijd

Met vriendelijke groeten,

Marc
@WesselB: Dat is redelijk bijdehand, zeker wanneer de ts met een corrupte database zit. Hoe denk jij op een veilige manier een dump te maken van een corrupte database? Weet je dan 100% zeker dat je de corruptie kwijtraakt? Dat lijkt mij van niet.

En dat PHP-scriptje dat met wat SQL-functies een kopie van een database probleert te maken, dat is natuurlijk de giller van de dag. Hier kun je __onmogelijk__ een goede en veilige backup mee maken.

Ontopic: Ik weet te weinig van MySQL om een oplossing te kunnen geven bij een corrupte database. MySQL heeft nogal wat problemen met het beschermen van data, hoewel dat basisfunctionaliteit hoort te zijn van DBMS. Vrijwel iedere DBMS is beter dan MySQL, bv. het reeds genoemde PostgreSQL of denk aan FireBird, een andere opensource DBMS.
Hoy allemaal,
Ik ben enkele dagen niet thuis geweest vandaar die late reactie.

Aan WesselB
ik had die dag via PHP zoeken "Backup" ingevoerd en het resultaat was nul. Misschien een tikfout. In iedergeval bedankt voor de medewerking. Ik heb de programma's uitgeprobeerd maar krijg steeds maar een deel van de backup. Ik heb dan geprobeerd om alleen maar tabel per tabel over te brengen maar bij de grootste tabel van ± 12 megabyte stopt hij halverwege en het is juist de tweede helft dat ik nodig heb want de eerste helft heb ik al.
Dit is een programma dat ik gevonden had op een Franse website en waarmee ik toevallig tot nu toe het beste resultaat heb gehad.
------------------------------------------------------------------------------------------
<?
/*************************************************/
/* SAUVEGARDE DE BASE DE DONNEES */
/* STRUCTURE ET CONTENU */
/* */
/*fichier : save_db.php */
/*création : stefsoft */
/*dernière modification : 02/12/2002 */
/* */
/*************************************************/

/*
utilisation:
sauvegarde simple
---> save_db.php?db=nom_de_la_base
sauvegarde avec drop
---> save_db.php?db=nom_de_la_base&drop=1
*/

/*************************************************/
/* DECLARATION DES VARIABLES */
/*************************************************/

$host="localhost";
$user="root";
$pass=" ";
$db="database";
$drop=1;

/*************************************************/
/* FONCTIONS */
/*************************************************/

function get_table_structure($db, $table)//$db=nom de la base,$table=nom de la table
{
global $drop;

$schema_create = "";
if(!empty($drop))
$schema_create .= "DROP TABLE IF EXISTS $table;\n";

$schema_create .= "CREATE TABLE $table (\n";

$result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
while($row = mysql_fetch_array($result))
{
$schema_create .= " $row[Field] $row[Type]";

if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
$schema_create .= " DEFAULT '$row[Default]'";
if($row["Null"] != "YES")
$schema_create .= " NOT NULL";
if($row["Extra"] != "")
$schema_create .= " $row[Extra]";
$schema_create .= ",\n";
}
$schema_create = ereg_replace(",\n$", "", $schema_create);
$result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
while($row = mysql_fetch_array($result))
{
$kname=$row['Key_name'];
if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
$kname="UNIQUE|$kname";
if(!isset($index[$kname]))
$index[$kname] = array();
$index[$kname][] = $row['Column_name'];
}

while(list($x, $columns) = @each($index))
{
$schema_create .= ",\n";
if($x == "PRIMARY")
$schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
elseif (substr($x,0,6) == "UNIQUE")
$schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
else
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")";
}

$schema_create .= "\n)";
return (stripslashes($schema_create));
}

function get_table_content($db, $table){//$db=nom de la base,$table=nom de la table

$result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
$i = 0;
while($row = mysql_fetch_row($result))
{
$table_list = "(";

for($j=0; $j<mysql_num_fields($result);$j++)
$table_list .= mysql_field_name($result,$j).", ";

$table_list = substr($table_list,0,-2);
$table_list .= ")";

if(isset($GLOBALS["showcolumns"]))
$schema_insert = "INSERT INTO $table $table_list VALUES (";
else
$schema_insert = "INSERT INTO $table VALUES (";

for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= " NULL,";
elseif($row[$j] != "")
$schema_insert .= " '".addslashes($row[$j])."',";
else
$schema_insert .= " '',";
}
$schema_insert = ereg_replace(",$", "", $schema_insert);
$schema_insert .= ")";
echo trim($schema_insert).";\n";
$i++;
}
return (true);
}

/*-----------------------------------------------------------------------*/
/* PROGRAMME PRINCIPAL */
/*-----------------------------------------------------------------------*/

//connexion à la base
@set_time_limit(0);
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter - Problème sur le 'Hostname' ou sur le 'User' ou sur le 'Password'");
@mysql_select_db("$db")
or die("Impossible de se connecter à la base ou nom de base inconnu");

//creation du fichier de sauvegarde (enregistrement en local)
header("Content-disposition: filename=$db.sql");
header("Content-type: application/octetstream");
header("Pragma: no-cache");
header("Expires: 0");


$tables = mysql_list_tables($db);//Liste les tables d'une base de données.
echo $tables;

$num_tables = @mysql_numrows($tables);//Retourne le nombre de lignes d'un résultat
echo $num_tables;

$i = 0;

while($i < $num_tables)
{
$table = mysql_tablename($tables, $i);//Lit le nom de la table qui contient le champs spécifié

if($table = "tabel")
{
print "\n";
print "# --------------------------------------------------------\n";
print "# Structure de la table \"$table\"\n";
print "#\n\n";
echo get_table_structure($db, $table, "\n").";\n\n";

print "#\n";
print "# Contenu de la table \"$table\"\n";
print "#\n";
print "\n";
get_table_content($db, $table);

if (isset($tb) && ($table==$tb))
exit;
}

$i++;

}


mysql_close();

?>
-----------------------------------------------------------------------------------------
Kan iemand zien waarom het programma maar de helft van het bestand wegschrijft?

Aan pqFrank
Ik denk dat de database niet echt corrupt is maar dat om de een of andere reden iets gebeurt is met de connectie (in de register misschien tijdens het maandelijks opkuisen) tussen de Mysqlquery en de database en hetzelfde tussen Mysqladministrator en de database, aangezien ik de gegevens feilloos kan opvragen via mijn internetprogramma's en kan wijzigen via de internet programma's.

In iedergeval wens ik iedereen te danken voor de medewerking in tijd van problemen en hoop ik dat iemand mij een oplossing kan bieden.

Met vriendelijke groeten,

Marc
Met PHP-scriptjes kun je geen veilige backup maken, dat is technisch onmogelijk. Gebruik mysqldump om een backup te maken, dat is de enige manier om dat veilig te doen. Zie de handleiding.

En wat bedoel jij met 'opkuisen' ? Ga jij 1x per maand de database opschonen? Dat is normaalgesproken zinloos, een miljoen records meer of minder maken echt niet uit. Tenzij het datamodel aan alle kanten rammelt, maar dan heb je een ander probleem.
Met opkuisen bedoelde ik het opkuisen van de windows register, en dagelijks wordt de hardeschijf gedefragmenteerd.

Het programma bovenaan gebruikt mysqldump, denk ik, maar blijft toch steken halverwege.

Ik maak nu een nieuw programmatje in php en als dit mijn probleem oplost breng ik jullie ogenblikelijk op de hoogte.

Met vriendelijke groeten,

Marc
Marc schreef op 27.11.2007 17:54
Het programma bovenaan gebruikt mysqldump, denk ik, maar blijft toch steken halverwege.

Ik maak nu een nieuw programmatje in php en als dit mijn probleem oplost breng ik jullie ogenblikelijk op de hoogte.

Met vriendelijke groeten,

Marc
Het programme mysqldump wordt nergens aangeroepen, dat is dus niet het geval. Ga daarmee aan de slag, PHP kan geen veilige backups maken.
Ik wil best mysqldump gebruiken maar ik kan de tabellen niet via mysqladministrator oproepen op de server want dan krijg ik de volgende fout "could not fetch schema table status"

Via Mysqlquery kan ik wel aan de tabelen maar kan ze niet wijzigen. Ik heb daar ook geprobeerd met die mysqldump maar hier terug krijg ik een foutmelding.

Ik heb op de website gekeken en zie het volgende
shell> mysqldump [options] db_name [tables]

Ik dacht dat ik dan naar de "Mysql Command Line Client" moest gaan maar als ik dat opstart zie ik
mysql>
Als ik dan "mysqldump naam van tabel" invoer dan komt er gewoon een pijltje eronder verder niks

Kan je mij een hint geven?

Met vriendelijke groeten,

Marc

Reageren