1. Code
  2. Coding Fundamentals
  3. Databases & SQL

Instalando y Usando PHPMyAdmin para Desarrollo Web

PHPMyAdmin (PMA) es un excelente cliente basado en base de datos gratuito y de código abierto el cuál puede ser usado para interactuar más fácilmente con MySQL y bases de datos de aplicación. Describiré cómo instalarlo, asegurarlo y algunos escenarios comunes con los que te puede asistir en tu administración de base de datos. Aquí hay una demostración en línea de PMA para que explores.
Scroll to top

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

PHPMyAdmin (PMA) es un excelente cliente basado en base de datos gratuito y de código abierto el cuál puede ser usado para interactuar más fácilmente con MySQL y bases de datos de aplicación. Describiré cómo instalarlo, asegurarlo y algunos escenarios comunes con los que te puede asistir en tu administración de base de datos. Aquí hay una demostración en línea de PMA para que explores.

Además de ofrecer una GUI visual para operaciones de bases de datos, también aprecio el poder ejecutar operaciones SQL de línea de comando vía mi navegador sin tener que iniciar sesión en el servidor vía SSH. Por ejemplo, algunas conexiones WiFi y puntos de conexión móviles regularmente terminan sesiones SSH persistentes, haciendo problemáticas las tareas de bases de datos.

Instalando PHPMyAdmin

Comenzar con PMA es bastante sencillo en Linux. Describiré cómo hacerlo con Ubuntu 14.x en Digital Ocean. Inicia sesión a tu servidor vía SSH.

1
apt-get install phpmyadmin

Puedes usar los ajustes por defecto durante la instalación o personalizarlos a tu gusto.

Una vez que limitas acceso MySQL a solo localhost (lo que deberías), no hay ningún puerto remoto a MySQL para que un hacker intente acceder. Podrían intentar entrar vía SSH o intentar ataques de inyección SQL contra tus aplicaciones, pero no pueden atacar directamente la base de datos. Una vez que instalas PMA, cualquier puede ejecutar ataques basados en web contra este para obtener control de tu base de datos, así se necesita cuidado.

Hay algunas cuantas precauciones que recomiendo al configurar PMA.

1. Usa contraseñas muy fuertes para todas tus cuentas MySQL, especialmente la cuenta root. ej. 25 caracteres para la contraseña root.

2. Usa diferentes cuentas MySQL y privilegios para cada aplicación/sitio ejecutándose en un solo servidor. De este modo si una contraseña está comprometida, solo la base de datos de un sitio está comprometida.

3. Cambia la URL usada por PMA por defecto. De esta manera la gente no puede visitar http://tublog.com/phpmyadmin. Mientras que esta seguridad por oscuridad no es una técnica muy efectiva, agrega algo de protección.

Agrega un alias al archivo apache.conf:

1
nano /etc/phpmyadmin/apache.conf
1
Alias /myobscuredpma /usr/share/phpmyadmin

Recarga apache:

1
service apache2 reload

Después, para acceder a PMA, visita http://tublog.com/mipmaoscurecido

Si necesitas modificar tu contraseña de PHPMyAdmin, puedes editar el config-db.php aquí:

nano /etc/phpmyadmin/config-db.php

4. Configura Autenticación Web para el Sitio PMA. Esto requerirá que ingreses una contraseña adicional para obtener acceso a PMA, además de la contraseña de tu base de datos, como esto:

Apache User Access RestrictionsApache User Access RestrictionsApache User Access Restrictions

Para configurar restricciones de usuario Apache, sigue estos pasos:

Instala htpasswd como parte de apache2-utils:

1
apt-get install apache2-utils

Haz un directorio para almacenar tus contraseñas:

1
mkdir /etc/htpasswd

Agrega soporte htaccess para PMA:

nano /etc/phpmyadmin/apache.conf

Agrega AllowOverride All debajo

1
<Directory /usr/share/phpmyadmin>
2
        Options FollowSymLinks
3
        DirectoryIndex index.php
4
        AllowOverride All

Configura tu autenticación de usuario para PMA:

nano /usr/share/phpmyadmin/.htaccess

1
AuthType Basic
2
AuthName "Login Required for Access"
3
AuthUserFile /etc/htpasswd/.htpasswd
4
Require valid-user

Establece tu contraseña:

htpasswd -c /etc/htpasswd/.htpasswd username

Y, reinicia Apache:

service apache2 restart

Navega a tu sitio PMA y se te pedirá tu nombre de usuario y contraseña como se muestra arriba.

Usando PHPMyAdmin Durante Desarrollo Web

1. Creando y Desechando Bases de Datos

Encuentro PMA especialmente útil durante las fases de desarrollo y pruebas en donde podría querer reiniciar la base de datos u operaciones de respaldo de manera repetida.

Sin PMA, iniciaría sesión en mi servidor vía SSH. Iniciaría sesión en MySQL, y después ejecutaría:

1
create database myapp;
2
 grant all privileges on myapp_database.* TO "your-mysql-username"@"localhost" identified by "your-mysql-password";
3
 flush privileges;

Con PMA, puedes ejecutar cualquier consulta de línea de comando con la interfaz visual. Da clic en la pestaña SQL y pega las instrucciones de base de datos MySQL de arriba. Después da clic en Ir para crear la base de datos.

Create a new database with the manual query boxCreate a new database with the manual query boxCreate a new database with the manual query box

O, puedes usar la interfaz visual directamente:

Create a databaseCreate a databaseCreate a database

También puedes agregar usuarios y definir privilegios de esta manera. Da clic en la pestaña privilegios:

Add new user in the privileges tabAdd new user in the privileges tabAdd new user in the privileges tab

Da clic en agregar usuario, y define los privilegios para la base de datos que desees:

Add new user and privilegesAdd new user and privilegesAdd new user and privileges

Para tu cuenta típica de base de datos de aplicación, querrás marcar las cajas en los cuadros Datos y Estructura.

Para desechar una basa de datos, visita el menú Bases de Datos. Da clic en la base de datos que quieres desechar y da clic en Desechar:

Drop database with PHPMyAdminDrop database with PHPMyAdminDrop database with PHPMyAdmin

2. Respaldando Tu Base de Datos

Es una muy buena idea respaldar la base de datos de tu aplicación antes de realizar cualquier operación extendida en la base de datos o actualizaciones de código. Si algo sale mal, podrás restaurar tu sitio desde el respaldo.

Usando la interfaz web de PMA, da clic sobre tu base de datos, da clic en la pestaña Exportar y selecciona Personalizado.

Export your databaseExport your databaseExport your database

Habilita la declaración "Agregar Quitar Tabla / Vista / Procedimiento / Función / Evento" 

Add drop table commandsAdd drop table commandsAdd drop table commands

Cuando des clic en Ir, PMA descargará un respaldo de tu base de datos entera. Si tus ajustes de tiempo muerto PHP Apache no están configuradas de manera apropiada, algunas descargas largas de archivos podrían caducar y fallar. Puedes ajustar esto en PHP.ini como describo en mi sitio.

3. Probando Consultas

PMA es fantástico para probar tus consultas SQL durante el desarrollo. Cuando creé Geogram (ver también mi próximo tutorial MapApp en Tuts+), necesité aprender y probar un número de consultas complejas de geolocalización para shapefiles neighborhood ej. encontrar los vecindarios más cercanos a mi dirección. PMA hizo esto mucho más sencillo.

Selecciona tu base de datos, da clic en Consulta. Pega o edita tus consultas complejas y pruébalas directamente desde PMA:

Test complex queries with manual SQLTest complex queries with manual SQLTest complex queries with manual SQL

Una vez que tuve mis consultas funcionando, pude escribir código ActiveRecord programático más fácilmente. Solo como un ejemplo:

1
$criteria = new CDbCriteria;
2
$criteria->together=true;
3
$criteria->having= "distance < 100";
4
$criteria->order = "distance ASC";
5
$criteria->with = array('place_geometry'=>array('select'=>'place_id,center,'.new CDbExpression('(3959 * acos( cos( radians('.$lat.') ) * cos( radians( X(center) ) ) * cos( radians( Y(center) ) - radians('.$lon.') ) + sin( radians('.$lat.') ) * sin( radians( X(center) ) ) )) as distance'))); 
6
$dataProvider = new CActiveDataProvider(Place::model()->active()->includesMember($id), 
7
                        array('criteria' => $criteria,
8
                        'pagination' => array(
9
                            'pageSize' => 10,
10
                        ),
11
                    ));

4. Raparando Entradas de Base de Datos

Si eres un desarrollador, probablemente un bug en una aplicación que corrompió tu base de datos. Ya sé, ¿verdad?

Por ejemplo, algunas de mis aplicaciones de administración de correo electrónico algunas veces se atascarán en mensajes inusuales que llegan; estos bugs son difíciles de encontrar en pruebas regulares. Cuando esto sucede, he encontrado útil modificar la base de datos directamente con PMA para despegar mis tareas y tener el sitio funcionando de nuevo. En algunos casos, solo poder navegar fácilmente tablas puede ayudarte a diagnosticar lo que no funciona.

En PMA, abre la base de datos y selecciona tu tabla. Da doble clic sobre una columna para editarla directamente en lugar. Haz el cambio que necesitas y presiona Enter.

Edit data directly in the databaseEdit data directly in the databaseEdit data directly in the database

5. Reiniciando la Base de Datos para Migraciones

Si usas un framework (como Yii), podrías estar usando migraciones programáticas de bases de datos. Las migraciones de bases de datos hacen más sencillo iterar el desarrollo y actualizar tus aplicaciones. Sin embargo, probarlas puede romper cosas en tu base de datos local.

Más comúnmente, me encontraré con errores de migración y no puedo migrar hacia arriba o abajo debido a índices, llaves foráneas o tablas no desechadas. En este caso, puedo usar PMA para borrar una tabla y borrar archivos índice no requeridos.

En PMA, selecciona tu base de datos, da clic sobre la pestaña SQL e ingresa el SQL para desechar tu llave foránea o índice. Aquí hay un par de ejemplos:

Drop foreign key and indexDrop foreign key and indexDrop foreign key and index

Espero que hayas encontrado esto útil. Por favor publica cualquier comentario, correcciones o ideas adicionales abajo. Puedes navegar mis otros tutoriales Tuts+ en mi página de autor o seguirme en Twitter @reifman.