MySQL: 'show tables' funktioniert nicht

msslovi0

Aktives Mitglied
Thread Starter
Dabei seit
20.03.2005
Beiträge
2.726
Reaktionspunkte
117
Hi!

Ich muss an einem Webauftritt Änderungen vornehmen und musste feststellen, das in MySQL 'show tables' nicht funktioniert. Bevor jetzt jemand fragt, was ich damit will: phpMyAdmin nutzt das, um die Tabellen einer Datenbank auszulesen und das funktioniert ohne 'show tables' natürlich nicht.

Code:
mysql> use database;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql>

Die Tabellen sind aber da, lassen sich auch ansprechen und abfragen:
Code:
mysql> show fields from table; 
+-----------------------+--------------------------+------+-----+---------------------+----------------+
| Field                 | Type                     | Null | Key | Default             | Extra          |
+-----------------------+--------------------------+------+-----+---------------------+----------------+
| id                    | int(8) unsigned zerofill |      | PRI | NULL                | auto_increment |  
[...]
+-----------------------+--------------------------+------+-----+---------------------+----------------+
57 rows in set (1.33 sec)

Ein Neustart des MySQL-Servers bring keine Besserung. Irgend jemand ne Idee?

Matt
 
Könnte es an den Rechten des Nutzer liegen, mit dem Du auf die DB zugreifst ? Meines Wissens läßt sich 'SHOW TABLES' deaktivieren.
 
Ich greife mit dem root-User zu...

Matt
 
dumme Frage: existieren denn überhaupt Tabellen in der Datenbank "database"?
Denn die Ausgabe lautet ja "empty set" und nicht "permission denied".

teste mal ein
Code:
use mysql;
SHOW TABLES;

PS: ich weiß nicht so genau ob es sinnvoll ist eine Datenbank "database" und eine Tabelle "table" zu nennen. Sind ja schließlich Begriffe aus SQL
 
Ja, natürlich existieren Tabellen.
Code:
mysql> use mysql
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> show fields from db;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host            | binary(60)    |      | PRI |         |       |
| Db              | binary(64)    |      | PRI |         |       |
| User            | binary(16)    |      | PRI |         |       |
| Select_priv     | enum('N','Y') |      |     | N       |       |
| Insert_priv     | enum('N','Y') |      |     | N       |       |
| Update_priv     | enum('N','Y') |      |     | N       |       |
| Delete_priv     | enum('N','Y') |      |     | N       |       |
| Create_priv     | enum('N','Y') |      |     | N       |       |
| Drop_priv       | enum('N','Y') |      |     | N       |       |
| Grant_priv      | enum('N','Y') |      |     | N       |       |
| References_priv | enum('N','Y') |      |     | N       |       |
| Index_priv      | enum('N','Y') |      |     | N       |       |
| Alter_priv      | enum('N','Y') |      |     | N       |       |
+-----------------+---------------+------+-----+---------+-------+
13 rows in set (0.00 sec)

mysql>

Matt
 
Gunter_S schrieb:
PS: ich weiß nicht so genau ob es sinnvoll ist eine Datenbank "database" und eine Tabelle "table" zu nennen. Sind ja schließlich Begriffe aus SQL

Das war natürlich nur zu Demozwecken. Die heißen in Wirklichkeit schon anders, keine Angst ;-)

Matt
 
Das ist dann in der Tat sehr merkwürdig.

kannst du mal ein "SELECT * FROM mysql.user WHERE user='admin'" machen, möglicherweise musst du "admin" durch "root" ersetzen.

bei mir sieht das Ergebnis so aus:
Code:
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host      | User  | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| localhost | admin | xxxxxxxxxxxx     | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                |          |            |             |              |             0 |           0 |               0 |
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.00 sec)

vielleicht fehlen deinem Benutzer ja ein paar Rechte.
 
Alternativ könntest du mal folgendes versuchen:

Einen neuen Benutzer mit
Code:
GRANT ALL ON *.* TO root2 IDENTIFIED BY "root-passwort" WITH GRANT OPTION;
anlegen und dann noch ein
Code:
FLUSH PRIVILEGES;
um die Rechte neu einzulesen.

Danach das ganze nochmal mit dem neuen Benutzer "root2" testen.

Gunter
 
Es macht keinen Unterschied ob root oder admin connecten. admin hatte ich vorher selbst manuell angelegt (alle Privilegien, allerdings ohne den Flush, der ist bei GRANT nicht notwendig), root ist der eigentliche root-User. Bei beiden sind keine Tabellen zu sehen, Rechte sind alle da, in keiner Spalte steht ein 'N'...
Und es ging ja mal :confused:

Matt
 
Vielleicht sind die gespeicherten Daten auf der Festplatte korrupt!?
Also dass keine Liste von Tabellen mehr erzeugt werden kann, aber ein direkter Sprung zu einer Tabelle noch funktioniert.
Es müsste doch eigentlich eine Testroutine von MySQL geben um die Daten zu prüfen, bzw. ggf. zu reparieren.

Gunter
 
Ja gibt es. Das Programm heißt zumindest unter Linux 'mysqlcheck', hat auch eine Funktion zum reparieren. Am besten vorher mal 'mysqlcheck --help' durchlesen. Würde aber vorher auf jedenfall ein MySQL Dump machen, hab selber das Programm noch nie ausprobiert und ich weiß nicht in wie weit da alles glatt läuft.
 
Zurück
Oben Unten