could not fetch schema table status
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
pgFrank schreef op 19.11.2007 22:22:
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 :PPs. Er bestaan ook nog andere, betere, databases dan MySQL...
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
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.
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.
------------------------------------------------------------------------------------------
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?
/*************************************************/
/* 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();
?>
/*************************************************/
/* 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
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.
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
Gewijzigd op 01/01/1970 01:00:00 door Marc
Marc schreef op 27.11.2007 17:54:
Het programme mysqldump wordt nergens aangeroepen, dat is dus niet het geval. Ga daarmee aan de slag, PHP kan geen veilige backups maken.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
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
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
Gewijzigd op 01/01/1970 01:00:00 door Marc
Heb je trouwens al eens gedacht om PHPmyAdmin te gebruiken?
Daarin kun je ook mysldumps maken.
@pgFrank: Waarom zou je via een PHP script dat via een query een dump maakt en dit bijv. in een sql file wegschrijft geen veilige backup kunnen maken? Kun je dit uitleggen?
PHPmyAdmin heb ik net gedownload en geprobeerd om op te starten.
Ik moet blijkbaar ergens een account kunnen aanmaken maar heb nog niet gevonden waar. Ik dacht gewoon te kunnen opstarten en zelf te kunnen bepalen welke user inlogt. Ik zoek nog even verder, tenzij iemand mij kan uitleggen hoe in te loggen in PHPmyAdmin.
Met vriendelijke groeten,
Marc
Gewijzigd op 01/01/1970 01:00:00 door Marc
Daarnaast zijn er mogelijk problemen met table- en/of rowlocks, die mag je evenmin onderschatten.
En vergeet niet, een backup is pas goed als je hem ook kunt terugzetten. Veel backups blijken in de praktijk dan ook niet goed te zijn... En dan heb ik het niet alleen over backups van bv. crimiclowns, maar ook van grote tot zéér grote organisaties. Ik spreek uit ervaring, ervaring met zeer ernstige crashes van zeer grote systemen.
Ik kan u momenteel enkel melden dat met het bovenstaande script het terugplaatsen echt goed gaat. Het enige probleem is dat het script maar de helft van de tabel laadt. Waarschijnlijk, zoals u hierboven vermeldt, omdat het script niet eeuwig loopt.
Om terug te komen tot die PHPmyAdmin. Ik heb de index.php van PHPmyAdmin opgestart en dan krijg ik de melding
------------------------------------------------------------------------------------------
Probably reason of this is that you did not create configuration file. You might want to use setup script to create one.
Fout
MySQL retourneerde:
#1045 - Access denied for user 'root'@'localhost' (using password: NO)
------------------------------------------------------------------------------------------
Ik had graag geweten, als ik de setup script gebruik om een account aan te maken, of dat er problemen kunnen ontstaan bij bijv. 'mysql Administrator' of bij de website zelf.
Met vriendelijke groeten,
Marc
Nee je krijgt geen problemen. Je kunt de config.inc.php zelf aanmaken (renamen dacht ik). Of je gebruikt idd die setup.php. Dit staat beide als het goed is uitgelegd in de documentatie die je erbij download.
Het lijkt mij namelijk anemelijk dat als je met een bepaalde user/ww combinatie nog gewoon via scripts de db kan benaderen, dan moet het via PHPmyAdmin ook lukken.
Als je DB trouwens zo groot is dat PHPmyAdmin ook stops na X seconden, zou je ook per tabel kunnen backupen. Weet alleen niet hoe je Database eruit ziet.
Marc schreef op 28.11.2007 09:24:
Tja, ik vermoed dat wij er een verschillende definitie van 'goed' op nahouden.Aan pqFrank
Ik kan u momenteel enkel melden dat met het bovenstaande script het terugplaatsen echt goed gaat. Het enige probleem is dat het script maar de helft van de tabel laadt.
Ik kan u momenteel enkel melden dat met het bovenstaande script het terugplaatsen echt goed gaat. Het enige probleem is dat het script maar de helft van de tabel laadt.
Wanneer je de helft van de data kwijt raakt, valt dat bij mij niet in de categorie 'goed', maar in de categorie 'ramp'.
Nogmaals, je kunt met PHP nooit een veilige backup van een database maken. PHP is daar gewoon niet voor geschikt. Vergeet deze aanpak en ga met mysqldump aan de slag, die is daar speciaal voor geschreven.
http://fragments.turtlemeat.com/mysql-database-backup-restore-phpmyadmin.php
Hier staat ook in zoals pgFrank aangeeft, dat er limieten zijn aan de bestandsgrootte en/of executie tijd.
Dan zul je idd naar een tool als mysqldump moeten grijpen.
Ik neem trouwens aan dat je je eigen server beheerd?
Ik bedoel met het goed terugplaatsen dat het bovenstaant script ± 1100 van de ± 2200 lijnen opslaat in een sql en er dan ook ± 1100 terugplaatst in een backup bestand.
Aan Jaws
Het is mijn eigen server dus ik kan erop doen wat ik wil.
Aan pqFrank en aan Jaws
Ik heb eindelijk gezien dat mysqldump een exe is dat vermeld staat in de bin map. Ja soms moet men verder zoeken dan z'n neus lang is.
Ik probeer het en hou jullie op de hoogte
Nogmaals vriendelijk bedankt
Marc
----------------------------------------------------------------
mysqldump databasenaam tabelnaam
----------------------------------------------------------------
en heb vele data zien passeren in een zwart schermpje.
Maar waar schrijft die mysqldump die data weg?
Onder welke extentie schrijft mysqldump z'n data weg?
Onder welke naam schrijft mysqldump z'n data weg?
Ik heb nergens iets gevonden (gezocht via "zoeken" en op vandaag).
Ik heb het volgende ook geprobeerd
----------------------------------------------------------------
mysqldump databasenaam tabelnaam > tabelnaam.sql
----------------------------------------------------------------
Dit heeft zeer kort een zwart schermpje naar voor. Te snel want ik kon niet lezen wat erin stond. Dus veronderstel ik dat het een foutmelding zal geweest zijn.
Met vriendelijke groeten,
Marc
Laat Windows even zoeken naar bestanden die na 16:00 uur zijn aangemaakt (neem aan dat je na dit tijdstip e.e.a. hebt uitgevoerd), dan zul je hopelijk vrij snel het juiste pad hebben gevonden. Je kunt ook even in de handleiding van MySQL duiken, daar staat ook vast wel e.e.a. in beschreven.
Verder kan ik je niet helpen, ik gebruik niet/nauwelijks Windows en al helemaal geen MySQL onder Windows.