Anonymní profil Roman – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Roman – Programujte.comAnonymní profil Roman – Programujte.com

 

Příspěvky odeslané z IP adresy 78.108.152.–

Roman
MySQL › Jak smazat neexistující funk…
22. 5. 2013   #176440

#1 Roman
#2 Mixxy
Ahoj

Spustil jsem to z příkazového řádku

mysqldump -uroot -proot --no-data --routines --triggers --force test > "c:\Program Files\MySQL\Zalohy\backup.sql"

Odpověď:

mysqldump: mysqldump: Couldn't execute 'SHOW CREATE FUNCTION `SP_PLAN_NAPLNENI_VLOZ`': FUNCTION SP_PLAN_NAPLNENI_VLOZ does not exist (1305

Pak jsem spustil MySQL a zkusil to přes řádek. Stále se hlásím s rootem.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 497 to server version: 5.0.15-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use TEST
Database changed
mysql> drop function `TEST`.`SP_PLAN_NAPLNENI_VLOZ`;
ERROR 1305 (42000): FUNCTION test.SP_PLAN_NAPLNENI_VLOZ does not exist

mysql> use test;
Database changed
mysql> drop function `test`.`SP_PLAN_NAPLNENI_VLOZ`;
ERROR 1305 (42000): FUNCTION test.SP_PLAN_NAPLNENI_VLOZ does not exist
mysql>

Funkci nelze vymazat standartním způsobem. Nevím jestli pod Windows by to nemělo být jedno ... velká/malá.

Nastavil jsem information _schema a zkusil to přes tabulku


USE information_schema;
mysql> select specific_name from routines where specific_name = 'sp_plan_naplneni_vloz';
+-----------------------+
| specific_name         |
+-----------------------+
| SP_PLAN_NAPLNENI_VLOZ |
+-----------------------+
1 row in set (0.03 sec)

mysql>

Stále tam visí.

Zkusil jsem ji vymazat jako záznam.

mysql> delete from routines where specific_name = 'sp_plan_naplneni_vloz';
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'infor
mation_schema'
mysql>

Což podle mne znamená, že MySQL si tuto část chrání a nedovolí ani administrátorovi do ní zasahovat. Což je vlastně logické. Jak se ale zbavit této chyby ... to už nevím.

Ještě jsem zkusil jsem vyexportovat (udělat si nějakou zálohu) v phpMyAdmin

-- phpMyAdmin SQL Dump
-- version 3.2.5

phpMyAdmin vyexportoval routines bez chyby. Řešení pro mě, je ručně zalohovat přes PHPMyAdmina po změnách.
Rád bych ale opravil uvedený problém, abych mohl mít stále aktuální zálohování. Tj aby proběhla plánovaná záloha přes MySQLdump.

Dík za každou radu.

Roman

Roman
MySQL › Jak smazat neexistující funk…
20. 5. 2013   #176361

Ahoj,

Delší dobu se trápím s exportem (zálohou) z programu mysqldump. Vyexportuje vše mimo uložených procedur a funkcí podle parametru.

Zpracování uložených procedury a fukcí skončí chybou. Zkoušel jsem to vyexportovat zvlášt a chyba byla funkce, která již neexistuje. Obvyklý zápis pro smazání funkce ...

DROP FUNCTION IF EXISTS function_name ... skončí chybou

, že funkce neexistuje. Díval jsem se do information_schema do
routines a je tam funkce, která již neexistuje a navíc je napsaná do databáze místo "test" je "TEST".

DROP FUNCTION IF EXISTS TEST.function_name

je rovněž nepoužitelné. Došel jsem k závěru, že je jen chyba v information_schema  tabulka routines

Předpokládám, že chybu jsem udělal napsáním procedury místo s malým "test", tak jsem zadal velkým "TEST".

Nevím proč, ale MySQL to vložil do databáze, která vlastně taky neexistuje. Ještě jsem zkoušel vytvořit databázi se stejným jménem ale velkým písmem, ale nejde to. Nemáte nějaký nápad, jak tuto funkci smazat. Pak bude fungovat mysqldump.

Roman

WIN XP + MySQL 5.0.1 + Toad for MySQL 6.3

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý