martes, 4 de septiembre de 2012

Configurar phpMyAdmin y habilitar el "diseñador"

Una advertencia antes de que continúes: es perfectamente posible que durante la instalación de mi Xampp dijera que no a alguna opción, por lo que puede que a ti no te haga falta nada de esto. Si ya ves y puedes trabajar con el "diseñador" de phpMyAdmin, no sigas leyendo. Si ni sabes lo que es el diseñador, igual no te pasa nada por continuar.

Si tienes Xampp instalado te sonará, y si no phpMyAdmin es un programa, en PHP, fíjate, que actua como frontal de una base de datos MySQL. ¿La gracia? Pues que ya no hay que instalar más cosas. Y que es muy popular.

El escenario típico es una máquina donde, ya que hemos instalado Xampp, estará ejecutándose un servidor MySQL y un servidor PHP, por lo que invocaremos al programa con el panel de control de Xampp o invocando la URL.

http://localhost/phpMyAdmin

Ya habremos jugado con él a lo más lógico: crear una base de datos, tablas, insertar, borrar, ... Pero hay una característica, nada novedosa pero útil muchas veces, que es el "diseñador". Con tan criptico nombre nos ofrecen un entorno gráfico de diseño de bases de datos donde definir tablas y relaciones entre ellas consiguiendo un mapa de la estructura bastante mono.


Lo curioso es que parece que no está disponible per se sino que hay que trabajárselo un poco. Hay que tener en cuenta que phpMyAdmin añade unas cuantas funciones propias adicionales a lo que el servidor MySQL ofrece. Para ello necesita:

  1. un usuario de sistema
  2. una base de datos para estos datos internos de phpMyAdmin
  3. retocar el fichero de configuración config.inc.php

Advierto de que estoy hablando de un Xampp para Windows, en otros sistemas es posible que cambie algún nombrecito. Lo mismo de la versión de phpMyAdmin, que la mía es la 3.4.5.

Vamos a ello. Entramos en phpMyAdmin como root y utilizamos la pestaña SQL (en realidad, vale cualquier cliente que nos dé acceso a MySQL):


1. El usuario 'pma'@'localhost'


create user 'pma'@'localhost' identified by 'loquesea';

La contraseña de este usuario, obviamente, la que queráis. En el ejemplo es 'loquesea', lo importante es utilizar la misma en el paso 3.

2. La base de datos phpmyadmin


Este es el nombre típico, vale cualquiera que pongáis pero ya vamos a hacer referencia a un script que tenemos en la carpeta X:\xampp\phpmyadmin\scripts: es el create_tables.sql (si no cambias nada, será en la unidad C:). De hecho, lo que aquí ponemos es una adaptación del mismo, y allí usan este nombre de base de datos. Y como tú vas a copiar y pegar, pues te vale igualmente.

create database phpmyadmin;
grant select, insert, delete, update on`phpmyadmin`.* to  'pma'@localhost;

Precisamente la concesión de permisos está comentada en el script. Pero a continuación viene toda la definición de tablas que hay que crear. Lo ponemos en letra minúscula porque es un tocho, recuerda que está en X:\xampp\phpmyadmin\scripts\create_tables.sql. Bastaría con que modificaras o añadieras las órdenes anteriores.

CREATE TABLE IF NOT EXISTS `pma_bookmark` (
  `id` int(11) NOT NULL auto_increment,
  `dbase` varchar(255) NOT NULL default '',
  `user` varchar(255) NOT NULL default '',
  `label` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL default '',
  `query` text NOT NULL,
  PRIMARY KEY  (`id`)
)
  ENGINE=MyISAM COMMENT='Bookmarks'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;


CREATE TABLE IF NOT EXISTS `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) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL default '',
  `mimetype` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci 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`)
)
  ENGINE=MyISAM COMMENT='Column information for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `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 NOT NULL,
  `sqlquery` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `username` (`username`,`db`,`table`,`timevalue`)
)
  ENGINE=MyISAM COMMENT='SQL history for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `pma_pdf_pages` (
  `db_name` varchar(64) NOT NULL default '',
  `page_nr` int(10) unsigned NOT NULL auto_increment,
  `page_descr` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL default '',
  PRIMARY KEY  (`page_nr`),
  KEY `db_name` (`db_name`)
)
  ENGINE=MyISAM COMMENT='PDF relation pages for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `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`)
)
  ENGINE=MyISAM COMMENT='Relation table'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `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`)
)
  ENGINE=MyISAM COMMENT='Table coordinates for phpMyAdmin PDF output'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `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`)
)
  ENGINE=MyISAM COMMENT='Table information for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;


CREATE TABLE IF NOT EXISTS `pma_designer_coords` (
  `db_name` varchar(64) NOT NULL default '',
  `table_name` varchar(64) NOT NULL default '',
  `x` INT,
  `y` INT,
  `v` TINYINT,
  `h` TINYINT,
  PRIMARY KEY (`db_name`,`table_name`)
)
  ENGINE=MyISAM COMMENT='Table coordinates for Designer'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



CREATE TABLE IF NOT EXISTS `pma_tracking` (
  `db_name` varchar(64) collate utf8_bin NOT NULL,
  `table_name` varchar(64) collate utf8_bin NOT NULL,
  `version` int(10) unsigned NOT NULL,
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  `schema_snapshot` text collate utf8_bin NOT NULL,
  `schema_sql` text collate utf8_bin,
  `data_sql` longtext collate utf8_bin,
  `tracking` set('UPDATE','REPLACE','INSERT','DELETE','TRUNCATE','CREATE DATABASE','ALTER DATABASE','DROP DATABASE','CREATE TABLE','ALTER TABLE','RENAME TABLE','DROP TABLE','CREATE INDEX','DROP INDEX','CREATE VIEW','ALTER VIEW','DROP VIEW') collate utf8_bin default NULL,
  `tracking_active` int(1) unsigned NOT NULL default '1',
  PRIMARY KEY  (`db_name`,`table_name`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT;



CREATE TABLE IF NOT EXISTS `pma_userconfig` (
  `username` varchar(64) NOT NULL,
  `timevalue` timestamp NOT NULL,
  `config_data` text NOT NULL,
  PRIMARY KEY  (`username`)
)
  ENGINE=MyISAM COMMENT='User preferences storage for phpMyAdmin'
  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;



3. Retocar el fichero de configuración


Tienes que localizar ese fichero, y estará en X:\xampp\phpmyadmin\config.inc.php. Si no existe, haz una copia de config.sample.inc.php con el mismo nombre. En cualquier caso aseguráte de que estas líneas (el fichero es corto, no cuesta nada encontrarlas) están tal y como te mostramos:

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'loquesea';

/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';

$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['tracking_default_statements'] = 'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE';
$cfg['Servers'][$i]['tracking_version_auto_create'] = TRUE;
$cfg['Servers'][$i]['tracking_version_drop_view'] = TRUE;
$cfg['Servers'][$i]['tracking_version_drop_table'] = TRUE;
$cfg['Servers'][$i]['tracking_version_drop_database'] = TRUE;


Cierra sesión de phpMyAdmin, o sea, para no fallar, cierra el navegador y vuelve a abrirlo con la página del phpMyAdmin. Ya tienes tu diseñador.

No descubrimos nada nuevo, pero por si acaso.