Jeden z nejlepších, pokud ne nejlepší, nástroj pro správu databáze je podle mého názoru phpMyAdmin. Od časů jednoduchého skriptu už ovšem ušel dlouhou cestu. Zatímco dříve stačilo nahrát několik souborů kamkoli na server a do konfigurace zadat heslo a jméno, nyní je již zapotřebí mnohem více, alespoň pokud chcete využít všech možností, které nový phpMyAdmin poskytuje.

Článek o instalaci phpMyAdmin už na Intervalu jednou vyšel a rozhodně neprohloupíte, pokud si ho přečtete, byť je již staršího data. V následujícím textu se omezím pouze na velmi stručný popis instalace a konfigurace tak, abyste mohli využívat všech vlastností phpMyAdmin (návod je upraven podle verze 2.6-pl2). Můžete si tento článek třeba vytisknout a jednotlivé body si po provedení zaškrtávat.

  1. Stáhněte si instalační archiv phpMyAdmin z phpmyadmin.sourceforge.net.
  2. Stažený archiv rozbalte do libovolného místa na disku
  3. Adresář, který po rozbalení vznikl, přejmenujte na phpmyadmin.
  4. Ve výše zmíněném adresáři vyhledejte soubor config.inc.php. Předpokládám, že phpMyAdmin bude umístěn na stejném serveru, na kterém běží i MySQL, a že máte práva administrátora databáze. Vyhledejte tedy na řádku 84 proměnnou $cfg['Servers'][$i]['user'] a zadejte své uživatelské jméno pro přístup k MySQL. V následujícím řádku pak musíte do $cfg['Servers'][$i]['password'] zadat odpovídající heslo.
  5. Ještě než se pokusíte připojit k databázi, musíte si zvolit, zda k tomu použijete staré nebo nové rozhraní. Pokud pracujete s PHP5, doporučuji vám používat vždy novější verzi rozhraní, kromě jiného se tak vyhnete také problémům s novějšími verzemi databáze MySQL. Chcete-li, na řádku 73 najděte proměnnou $cfg['Servers'][$i]['extension'] a změňte její hodnotu na „mysqli“.
  6. Na řádku 39 najdete proměnnou, kterou je nutno nastavit tak, aby obsahovala absolutní cestu ke kořenové složce phpMyAdmin, jinak nebude fungovat. Tuto hodnotu můžete zadat ručně, nebo ji naplnit dynamicky podle různých návodů v dokumentaci nebo na fórech. Mně se osvědčil následující zápis:

    $cfg[‚PmaAbsoluteUri‘] = (!empty($_SERVER[‚HTTPS‘]) ? ‚https‘ : ‚http‘) . ‚://‘
        . $_SERVER[‚HTTP_HOST‘]
        . (!empty($_SERVER[‚SERVER_PORT‘]) ? ‚:‘ . $_SERVER[‚SERVER_PORT‘] : “)
        . substr($_SERVER[‚PHP_SELF‘], 0, strrpos($_SERVER[‚PHP_SELF‘], ‚/‘)+1);

    Můžete také nechat tuto proměnnou prázdnou. Je možné, že phpMyAdmin automaticky absolutní URI detekuje a doplní. Pokud se tak stane, doporučuji vám vyhledat proměnnou $cfg['PmaAbsoluteUri_DisableWarning'] a nastavit její hodnotu na „TRUE“, aby vás program neobtěžoval nesmyslnými chybovými hláškami. V dalším textu ale budu předpokládat, že jste použili výše uvedenou PHP funkci.

  7. Standardním způsobem překopírujte obsah adresáře phpmyadmin do cílového adresáře na serveru.
  8. Nyní si v prohlížeči otevřete URL, na které jste phpMyAdmin umístili. Abyste mohli využít jeho zvláštních schopností, které z části suplují chybějící funkcionalitu MySQL a z části ji rozšiřují, musíte zřídit pomocnou databázi, kam si phpMyAdmin bude ukládat provozní informace. Do nového okna si otevřete formulář, na nějž vede odkaz pod ikonkou s nápisem „SQL“ v levé horní části obrazovky. Do textového pole zadejte následující příkaz:

    CREATE DATABASE pma_db

    Nová pomocná databáze se bude jmenovat pma_db. Samozřejmě můžete použít jiný název, pak ale musíte upravit následující SQL příkazy. Také vám doporučuji vyhnout se používání velkých písmen, ačkoli ve vlastní dokumentaci i v komentářích konfiguračního souboru se občas používají. Uchráníte se tak nečekaným problémům, především při migraci z Windows na Linux.
    To však nestačí, musíme ještě phpMyAdmin informovat o tom, kde pomocnou databázi najde a donutit ho používat ji. V souboru config.inc.php doplníme do proměnné na řádku 95 její jméno, tedy $cfg['Servers'][$i]['pmadb'] = 'pma_db';. Úpravu provádějte v off-line kopii, novou verzi konfiguračního souboru nahrajeme na server teprve po dokončení všech operací!
    Pozn. aut.: Pokud se vám pomocná databáze nevytvoří, zkuste alternativní postup. Z rozbalovacího menu v levém rámu si vyberte databázi „test“ (nebo libovolnou jinou, ke které máte přístup) a v pravém rámu následovně klepněte na odkaz „SQL“. Teprve do tohoto formuláře zadejte výše uvedený příkaz. Následující příkazy pak můžete zadávat do stejného okna přímo v databázi „pma_db“. Pravděpodobně jde o nějakou menší chybu v aktuální verzi phpMyAdmin, jejímž příznakem je mimo jiné otevírání SQL okna do špatného rámu.

  9. V dalším kroku vytvoříme v pomocné databázi tabulku bookmarků (uložených dotazů):

    CREATE TABLE `pma_bookmark` (
        `id` int(11) NOT NULL auto_increment,
        `dbase` varchar(255) NOT NULL default “,
        `user` varchar(255) NOT NULL default “,
        `label` varchar(255) NOT NULL default “,
        `query` text NOT NULL,
        PRIMARY KEY (`id`)
    ) TYPE=MyISAM COMMENT=’Bookmarks‘;

    Do konfiguračního souboru pak doplníme její název $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';.

  10. Jednou z užitečných vlastností relačních databází je udržování přehledu o vzájemných vztazích dat – relacích. Problém řeší phpMyAdmin prostřednictvím pomocné tabulky relací:

    CREATE TABLE `pma_relation` (
        `master_db` varchar(64) NOT NULL default “,
        `master_table` varchar(64) NOT NULL default “,
        `master_field` varchar(64) NOT NULL default “,
        `foreign_db` varchar(64) NOT NULL default “,
        `foreign_table` varchar(64) NOT NULL default “,
        `foreign_field` varchar(64) NOT NULL default “,
        PRIMARY KEY (`master_db`,`master_table`,`master_field`),
        KEY `foreign_field` (`foreign_db`,`foreign_table`)
    ) TYPE=MyISAM COMMENT=’Relation table‘;

    Opět je nutno do konfiguračního souboru doplnit název tabulky, takže $cfg['Servers'][$i]['relation'] = 'pma_relation';.

  11. Na řadu přichází tabulka, uchovávající informace (komentáře) k jednotlivým tabulkám ostatních databází:

    CREATE TABLE `pma_table_info` (
        `db_name` varchar(64) NOT NULL default “,
        `table_name` varchar(64) NOT NULL default “,
        `display_field` varchar(64) NOT NULL default “,
        PRIMARY KEY (`db_name`,`table_name`)
    ) TYPE=MyISAM COMMENT=’Table information for phpMyAdmin‘;

    Do konfiguračního souboru doplníme $cfg['Servers'][$i]['table_info'] = 'pma_table_info';.

  12. Nový phpMyAdmin umí také vytvářet PDF stránky, díky čemuž si můžete snadno vyexportovat přehlednou mapu struktury svého DB projektu. Potřebuje k tomu ovšem dvě další pomocné tabulky. První pomocná tabulka obsahuje koordináty jednotlivých tabulek pro export do PDF schémat:

    CREATE TABLE `pma_table_coords` (
        `db_name` varchar(64) NOT NULL default “,
        `table_name` varchar(64) NOT NULL default “,
        `pdf_page_number` int(11) NOT NULL default ‚0‘,
        `x` float unsigned NOT NULL default ‚0‘,
        `y` float unsigned NOT NULL default ‚0‘,
        PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`)
    ) TYPE=MyISAM COMMENT=’Table coordinates for phpMyAdmin PDF output‘;

    Druhá slouží k uchovávání konfiguračních parametrů PDF stránek:

    CREATE TABLE `pma_pdf_pages` (
        `db_name` varchar(64) NOT NULL default “,
        `page_nr` int(10) unsigned NOT NULL auto_increment,
        `page_descr` varchar(50) NOT NULL default “,
        PRIMARY KEY (`page_nr`),
        KEY `db_name` (`db_name`)
    ) TYPE=MyISAM COMMENT=’PDF relation pages for phpMyAdmin‘;

    Také tyto tabulky je nutno aktivovat patřičnou úpravou konfiguračního skriptu: $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; a $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';.

  13. Velmi užitečnou informací je popisek sloupce tabulky, zvláště u rozsáhlejších projektů, které nedokážeme „udržet v hlavě“ nebo na kterých spolupracujeme ve větším týmu. Také zde nabízí phpMyAdmin řešení v podobě pomocné tabulky:

    CREATE TABLE `pma_column_info` (
        id int(5) unsigned NOT NULL auto_increment,
        db_name varchar(64) NOT NULL default “,
        table_name varchar(64) NOT NULL default “,
        column_name varchar(64) NOT NULL default “,
        `comment` varchar(255) NOT NULL default “,
        mimetype varchar(255) NOT NULL default “,
        transformation varchar(255) NOT NULL default “,
        transformation_options varchar(255) NOT NULL default “,
        PRIMARY KEY (id),
        UNIQUE KEY db_name (db_name, table_name, column_name)
    ) TYPE=MyISAM COMMENT=’Comments for Columns‘;

    Tuto tabulku aktivujete pomocí $cfg['Servers'][$i]['column_info'] = 'pma_column_info';. Když už žádná jiná, právě tato se oplatí, neboť obsahuje informace o MIME typu dat a příkazy k jejich transformaci. Kouzla, která díky této tabulce phpMyAdmin dokáže, vydají nejméně na samostatný článek, ne-li na vícero.

  14. Určitě se vám bude hodit, když si phpMyAdmin zapamatuje několik naposledy použitých SQL dotazů, opět prostřednictvím pomocné tabulky:

    CREATE TABLE `pma_history` (
        `id` bigint(20) unsigned NOT NULL auto_increment,
        `username` varchar(64) NOT NULL default “,
        `db` varchar(64) NOT NULL default “,
        `table` varchar(64) NOT NULL default “,
        `timevalue` timestamp(14) NOT NULL,
        `sqlquery` text NOT NULL,
        PRIMARY KEY (`id`),
        KEY `username` (`username`,`db`,`table`,`timevalue`)
    ) TYPE=MyISAM COMMENT=’SQL history for phpMyAdmin‘;

    Poslední pomocná tabulka se aktivuje pomocí $cfg['Servers'][$i]['history'] = 'pma_history';.

  15. Aby mohl phpMyAdmin začít kouzlit, musíme pro něj v MySQL vytvořit speciálního uživatele:

    GRANT USAGE ON mysql.* TO ‚pma’@’localhost‘ IDENTIFIED BY ‚pmapass‘;

    Jak vidíte, v řídící databázi „mysql“ se vytvoří nový uživatel „pma“, který má povoleno k databázi přistupovat pouze ze společného serveru a je identifikován heslem „pmapass“ (doporučuji nahradit vlastním, ačkoli to není nezbytně nutné).

  16. Uživateli, kterého jsme v předchozím kroku vytvořili, musíme přidělit patřičná práva (pouze ke čtení), aby mohl získávat informace o databázích v systému. Jde vlastně o čtyři za sebou následující příkazy SQL, je však možno je zadat najednou, phpMyAdmin je interpretuje správně. Pracujete-li s MySQL 4.0.2 nebo starší, použijte následující:

    GRANT SELECT (
        Host, User, 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
        ) ON mysql.user TO ‚pma’@’localhost‘;
    GRANT SELECT ON mysql.db TO ‚pma’@’localhost‘;
    GRANT SELECT ON mysql.host TO ‚pma’@’localhost‘;
    GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
        ON mysql.tables_priv TO ‚pma’@’localhost‘;

    Pracujete-li s novější verzí MySQL, musíte použít poněkud obsáhlejší příkaz:

    GRANT SELECT (
        Host, User, 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
        ) ON mysql.user TO ‚pma’@’localhost‘;
    GRANT SELECT ON mysql.db TO ‚pma’@’localhost‘;
    GRANT SELECT ON mysql.host TO ‚pma’@’localhost‘;
    GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
        ON mysql.tables_priv TO ‚pma’@’localhost‘;

  17. Ještě musíme phpMyAdmin udělit právo spravovat svou vlastní pomocnou databázi:

    GRANT SELECT, INSERT, UPDATE, DELETE ON pma_db.* TO ‚pma’@’localhost‘;

  18. Opět se vrátíme k naší off-line verzi config.inc.php. K plné funkčnosti potřebuje phpMyAdmin zapnuté cookies, kterými přenáší některé důležité informace (v ostatních režimech bez cookies nejsou všechny funkce k dispozici). Autoři nyní cookies chrání šifrováním pomocí algoritmu BlowFish. Na řádku 60 neupravovaného souboru (nyní by to mělo být číslo 63) je proměnná, do které je nutno zadat vhodnou šifrovací frázi, rozhodně ne $cfg['blowfish_secret'] = 'blowfish_secret';.
  19. Posledním zásahem do config.inc.php bude změna režimu pro práci s databází, čímž teprve dojde k aktivaci všech tak namáhavě připravených funkcí phpMyAdmin:

    $cfg[‚Servers‘][$i][‚controluser‘] = ‚pma‘;
    $cfg[‚Servers‘][$i][‚controlpass‘] = ‚pmapass‘;
    $cfg[‚Servers‘][$i][‚auth_type‘] = ‚cookie‘;
    $cfg[‚Servers‘][$i][‚user‘] = “;
    $cfg[‚Servers‘][$i][‚password‘] = “;

  20. Nakonec nesmíme zapomenout nově upravený soubor config.inc.php nahrát na server a přepsat jím dočasnou verzi, kterou jsme použili pro přípravu pomocných tabulek a manipulaci s právy k databázím.

V této chvíli byste měli mít phpMyAdmin nakonfigurován tak, aby plně využíval všech svých předností. Měl by být mnohem bezpečnější než předchozí verze a neměl by mít problémy s ostrým nasazením na produkčních serverech, provozovaných ve víceuživatelském prostředí. Popis využití jednotlivých speciálních vlastností však dalece přesahuje rámec tohoto článku.

Problémy s novějšími verzemi MySQL

MySQL se poměrně bouřlivě vyvíjí, což sebou nese řadu problémů. Použití phpMyAdmin se týká především nová schopnost MySQL nativně podporovat různé znakové sady a jazyková prostředí. Chcete-li těžit z těchto zajímavých vlastností, doporučuji vám používat vždy nejnovější verzi MySQL 4.1.x (momentálně 4.1.6-gamma) a spouštět ji s parametry --default-character-set=utf8 a --default-collation=utf8_general_ci. Tím se zároveň vyhnete mnoha pozdějším komplikacím.

Po spuštění phpMyAdmin si jako jazyk uživatelského rozhraní zvolte „Czech (cs-utf-8)“. V pravé části pracovního rámu byste měli vidět následující konfigurační informace:

phpMyAdmin - konfigurace jazykového prostředí

Při zachování výše zmíněných podmínek můžete bez obav používat SQL příkazy, které nemusí obsahovat informace o znakové sadě a kolaci, aniž by docházelo k chybám při jejich provádění. (To mimo jiné znamená, že můžete použít příkazy z tohoto článku pro libovolnou verzi MySQL a nemusíte používat speciální typ příkazů pro MySQL 4.1.2 a vyšší, jak tvrdí autoři phpMyAdmin.) Pomocná databáze „pma_db“ i řídící databáze „mysql“ budou používat „utf8_general_ci“, zatímco pro své databáze můžete použít „utf8_czech_ci“, díky čemuž se vám například záznamy, vybrané z textových polí, správně seřadí podle české abecedy.

Pozn. red.: Tento článek vyšel poprvé 17. 9. 2003. Původní verze článku a k němu vedené diskuse jsou vám k dispozici v ZIP archivech.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět