it-swarm.com.de

Problem mit mysqldump und view

Bei der Verwendung von mysqldump zum Sichern von MySQL wurde der folgende Fehler angezeigt.

mysqldump --all-databases --routines >> all.sql
mysqldump: Couldn't execute 'show table status like 'hdkien'': SELECT command denied to user 'tungbt'@'192.168.12.197' for column 'id' in table 'hdcn_hd' (1143)

hdkien ist eine Ansicht

CREATE ALGORITHM=UNDEFINED DEFINER=`tungbt`@`192.168.12.197` SQL SECURITY DEFINER VIEW `hdcn`.`hdkien` AS (...striped...)

Benutzer tungbt @ 192.168.12.197 Hatte bereits das Privileg, in Tabelle hdcn_hd Auszuwählen, und ich kann problemlos aus der Ansicht hdkien auswählen.

mysql> select * from hdkien limit 1;
+------+-----------+
| id   | shd       |
+------+-----------+
|  876 | ADFADFA1  |
+------+-----------+

Mehr Info:

  • MySQL-Version: mysql-community-server-5.5.37-4.el6.x86_64
  • Betriebssystem: CentOS 6.5

Warum habe ich den Fehler beim Ausführen von mysqldump erhalten und wie kann ich ihn beheben?

pdate 1 (17.04.2014)

Ich führe mysqldump mit dem Benutzer 'root'@'localhost' Aus.

mysql> show grants for 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '...striped...' WITH GRANT OPTION                             |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+

Der Benutzer 'tungbt'@'192.168.12.197' Ist der Definierer der Ansicht hdcn.hdkien (Und der SQL SECURITY Ist DEFINER.

+------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tungbt'@'192.168.12.197' IDENTIFIED BY PASSWORD '...striped...'                             |
| GRANT ALL PRIVILEGES ON `hdcn`.* TO 'tungbt'@'192.168.12.197'                                                      |
+------------------------------------------------------------------------------------------------------------------+

pdate 2

$ mysql -ANe"SELECT USER(),CURRENT_USER()"
+----------------+----------------+
| [email protected] | [email protected] |
+----------------+----------------+

pdate

mysql> SELECT COUNT(1) MySQLGrantsCount,VERSION() MySQLVersion FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';
+------------------+--------------+
| MySQLGrantsCount | MySQLVersion |
+------------------+--------------+
|               42 | 5.5.37-log   |
+------------------+--------------+
5
favadi

Sie benötigen das Privileg SHOW VIEW . Ich habe über diesen Dezember 2013 geschrieben: Welche Mindestrechte sind erforderlich, um eine Sicherung eines MySQL-Datenbankschemas zu erhalten ?

In diesem Beitrag zeige ich diese Mindestberechtigungen für einen mysqldump

Sie sollten diesen Befehl ausführen:

SHOW GRANTS FOR [email protected];

Wenn SHOW VIEW nicht vorhanden ist, ist dies der Grund dafür.

UPDATE 2014-04-16 23:06 EDT

Als du das getan hast

mysqldump --all-databases --routines >> all.sql

Ich sehe, Sie haben den Benutzer und das Passwort nicht angegeben. In diesem Fall wurden Sie nicht als [email protected] angemeldet. Sie müssen den Root-Benutzer explizit angeben

mysqldump -uroot -p --all-databases --routines >> all.sql

Sie sehen die Eingabeaufforderung für das Passwort. Geben Sie das root @ localhost-Passwort ein und Sie können loslegen.

Sie können auch das Passwort angeben

mysqldump -uroot -ppassword --all-databases --routines >> all.sql

Versuche es !!!

WILDE VORSCHLÄGE

Wenn Sie .~/my.cnf verwenden und dennoch eine Fehlermeldung erhalten, tritt diese Situation möglicherweise in Fehler # 70907 mysqldump auf: 'show table status' konnte nicht ausgeführt werden: SELECT-Befehl an Benutzer verweigert '

Wenn die Konfigurationsdatei .~/my.cnf wirklich /root/.my.cnf ist, sind Sie möglicherweise nicht als Linux-Root angemeldet. Möglicherweise müssen Sie Sudo ausführen.

Bitte führen Sie diesen Befehl aus

mysql -ANe"SELECT USER(),CURRENT_USER()"

Wenn Sie [email protected] nicht zweimal sehen, authentifizieren Sie sich nicht korrekt.

In .my.cnf müssen Sie sicherstellen, dass sich Benutzer und Kennwort im Abschnitt [client] befinden

[client]
user=root
password=rootpassword

nicht unter dem Abschnitt [mysql].

UPDATE 2014-04-17 13:53 EDT

Ich kann nicht anders, als mir diesen Fehlerbericht anzusehen und mich über Folgendes zu wundern: Da Sie DEFINER = tungbt @ 192.168.12.197 haben, ist es möglich, dass sich root @ localhost wie tungbt @ verhält 192.168.12.197? Ich sage dies, weil gemäß der MySQL-Dokumentation zu CREATE VIEW : At view definition time, the view creator must have the privileges needed to use the top-level objects accessed by the view. For example, if the view definition refers to table columns, the creator must have some privilege for each column in the select list of the definition, and the SELECT privilege for each column used elsewhere in the definition.

Sie können den Definierer der Ansicht in root @ localhost ändern und den mysqldump erneut versuchen

5
RolandoMySQLDBA

Ich hatte ein ähnliches Problem damit, dass ich aus meiner Sicht als root keinen mysqldump ausführen konnte:

mysqldump: Couldn't execute 'show create table `v_view01`': View 'my_db.v_view01' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)

In meinem Fall lag es daran, dass sich mein zugrunde liegendes Schema geändert hat, sodass die darauf basierende Ansicht nicht mehr gültig war. Obwohl ich den Dump als Root ausgeführt habe, heißt es immer noch "oder der Aufrufer der Ansicht hat keine Rechte ...". Die Lösung war einfach:

drop view v_view01

Da die Ansicht bereits veraltet war, habe ich sie einfach gelöscht, und der mysqldump verlief wie gewohnt.

3
David B

Meins konnte keine Ansicht zum Erstellen einer Ansicht anzeigen, die nicht vorhanden war - also wurde der Job einfach beendet. Also habe ich diese beiden Dinge getan:

create or replace view v_view01 as select * from any_table;
drop view v_view01;

Das größere Problem ist, dass mysqldump standardmäßig einen Fehler stoppt - schreckliche Idee !!!

Wenn Sie alle anderen guten Tabellen sichern möchten, fügen Sie die Option --force Und Optionen wie diese hinzu ...

mysqldump -u root -p${MP} --all-databases --lock-tables --debug-info --comments --dump-date --force --events --routines --add-drop-table --add-locks --log-error=/somewhere/mysqldump.err >all_db.`date "+%Y%m%d%H%M"`.sql
0
user153465