Adminer 2.2.1

Školení, která pořádám

Nová verze nástroje pro správu databáze MySQL přináší jen drobná vylepšení:

Zlepšení konkurenčnosti

Adminer používá k ukládání dat (např. přihlašovacích údajů) session proměnné. PHP zamyká soubory, do kterých se data ukládají, aby si je skripty vzájemně nepřepisovaly. To vede k tomu, že když se spustí nějaká dlouhotrvající operace (např. ALTER TABLE velké tabulky), tak se nedá s aplikací pracovat ani v jiném okně prohlížeče. Tedy až do verze 2.2.1… Session soubor se už dříve zavíral funkcí session_write_close, když už do session proměnných nebylo potřeba nic zapisovat. Nově se zavírá soubor prakticky ihned a když je to potřeba, tak se zase otevře. To ovšem není tak jednoduché, protože otevření provádí funkce session_start, která se zároveň snaží poslat i hlavičky. To je potřeba jí zakázat:

<?php
session_cache_limiter("");
if (ini_set("session.use_cookies", false) !== false) {
    session_write_close();
}
?>
Jakub Vrána, Adminer, 27.11.2009, diskuse: 17 (nové: 0)

Diskuse

ikona v6ak:

Na matoucí struktura tabulky/pozměnit tabulku to někdy pomůže (logicky nejdu ze stránky A na stránku A), ale není to úplné řešení.
Co takhle místo "Struktura tabulky" napsat "Zobrazit strukturu"?

ikona Jakub Vrána OpenID:

OK, změnil jsem to v SVN na Zobrazit strukturu (Show structure). Vypsat tabulku jsem navíc změnil na Vypsat data (Select data).

ikona v6ak:

Děkuji za tuto drobnost.

Michal:

Měl bych dotaz ohledně exportu dat. Exportuju tabulku bez jejich dat. V SQL se u tabulky nastaví "AUTO_INCREMENT=xxx". Lze upravit adminer, aby tento parametr do dumpu nedával pokud nedumpuju i data ?

ikona Jakub Vrána OpenID:

Při exportu se používá prostě SHOW CREATE TABLE, někomu se AUTO_INCREMENT navíc může hodit i v tomto případě, takže to tak asi nechám.

kozotoč:

Zdravím.
(ne)Rád bych reportoval chybu (nebo spíš spuštění chybové hlášky - to je asi přesnější) v Admineru.
Nevím, jestli s tím Adminer coby pouhý skript něco zmůže, nebo tu chybu hodí PHP tak jako tak.
Myslím, že se chyba dá nasimulovat tak, že si spustím nějaký dotaz přes SQL okno, pak smažu historii spuštěných SQL příkazů a poté začnu v prohlížeči přecházet zpět na minulé stránky.
Nevím, jak ostatním, ale mě v takovém případě Adminer hodí na přihlášení s hláškami:

Warning: session_start() [function.session-start]: open(C:\DOCUME~1\USER~1\LOCALS~1\Temp\\sess_7su79n2l42c87sklcpjqlvp692, O_RDWR) failed: Permission denied (13) in C:\path\adminer\index.php on line

Warning: Unknown: open(C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\\sess_7su79n2l42c87sklcpjqlvp692, O_RDWR) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0

(mám PHP 5.3.0,Apache 2.2.11,MySQL 5.1.35,Win)
Kdyžtak zkus, Jakube.

ikona Jakub Vrána OpenID:

Problém se mi nedaří reprodukovat. Podle chybové hlášky to spíš vypadá na obecný problém s místem zápisu session proměnných.

Michal:

Zdravím.
Provedl jsem MySQL příkazy z SQL souboru pro vytvoření DB a naplnění dat. Konkrétně pro DataGrid Romana Sklenáře http://addons.nettephp.com/cs/datagrid

Po provedení se však vytvořená DB nezařadila do seznamu a ani při přechodu na jinou stránku v něm nebyla.
Zařadila se až pokud jsem ji zadal do 'db' v poli GET.

Pokud jsem to reprodukoval znova už se tak nestalo.

Je to nějaká náhodná chyba nebo jen projev velkého množství dat ?

ikona Jakub Vrána OpenID:

Při ručním spuštěním SQL příkazu se hledá příkaz CREATE DATABASE nebo DROP DATABASE v prvním 1 MB dat. Tady je, takže by to mělo fungovat a také se mi to nepodařilo reprodukovat.

pojízdná kočka:

Opakuje Adminer při exportu řádků příkaz INSERT INTO ... ?
Teď jsem importovala jím vyexportovaný soubor (který měl asi 8000 položek a přes 1 MB) a nešlo to - zobrazila se jen chybová hláška o překročení nějakého paměťového limitu (pardon, že si ji nepamatuju přesně). Musela jsem ten výstup ručně editovat a přidávat INSERT INTO každých několik řádků (což je na nic :-( ).
Snad by stálo za zvážení přidání jednoho jednoduchého políčka do formuláře pro export, po kolik řádcích zopakovat INSERT INTO. Implementace také nebude těžká a pro tebe, Jakube, to nebude žádný problém, ne?
Pochopila jsem, že Adminer nechceš mít zbytečně komplikovaný, ale tadyto imho patří mezi ty důležitější věci.

ikona Jakub Vrána OpenID:

Počet záznamů je nedůležitý, zásadní je jejich velikost. Příkazy se automaticky rozdělují po 1 MB, což je výchozí hodnota direktivy max_allowed_packet, která to ovlivňuje.

pojízdná kočka:

Chceš říct, že při exportu počítáš, kolik data v příkazu zabírají a podle toho dělíš opakovanými INSERTy?

ikona Jakub Vrána OpenID:

Přesně tak.

pojízdná kočka:

Tak to je fajnové. To myslím ani phpMyAdmin nemá.

Můžu se ještě zeptat, jak to proběhne, když i jeden takový záznam má data přes 1 MB (například nějaký soubor, uložený v databázi)?

ikona Jakub Vrána OpenID:

V tom případě se maximální povolená velikost překročí. V minulosti se Adminer pokoušel velikost max_allowed_packet v exportu změnit, to se ale bohužel nepovede. Nic moc jiného se s tím dělat nedá (INSERT a následný UPDATE už by bylo příliš).

pojízdná kočka:

Jediné, co mě napadá, je INSERT a jako další příkaz UPDATE (nebo UPDATy), které hodnotu sloupce doplní pomocí CONCAT. Uznávám, že to je už dost komplikované. (na druhou stranu by se Adminer docela "blýsknul" tím, že by to jako jediný uměl ;-))
P.S. A jestli bych se ještě mohla zeptat, ten 1 MB je na data samotná nebo na SQL příkaz se všim všudy?

ikona Jakub Vrána OpenID:

Přesně tak. Ale zdá se mi to mnohem krkolomnější než uživateli říct, ať si zvýší max_allowed_packet.

1 MB je na SQL celkem.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.