| | |

Versión 1.7.0 de WAMP5

wamp.pngHa sido lanzada la versión 1.7.0 de la aplicación WAMP (Windows Apache MySQL PHP), que añade además phpmyadmin.

Las novedades que nos ofrece son las siguientes:

  • Módulo de idiomas para el administrador de WAMP5
  • Compatibilidad con Windows Vista
  • Añadidos inicialmente 14 idiomas y adaptación de las funcionalidades y add-ons por el módulo de lenguaje
  • Apache 2.2.4
  • PHP 5.2.1
  • PHP 4.4.5 (addon PHP4)
  • phpmyadmin 2.9.2

WAMP5

Replicación en MySQL

Replicar una base de datos MySQL puede sonar a algo muy complicado, resulta más sencillo siguiendo el siguiente artículo que pasamos a comentar. Se trata de una de las base de datos (master) hacer que genere un log y otra (slave) lo lea.

Lo primero es añadir las siguientes líneas al fichero my.conf:

log-bin=<nombre-fichero-log>
binlog-do-db=<nombre-base-datos>
server-id=<numero-servidor>

El nombre de la base de datos si que debe ser el mismo en ambos servidores, los otros dos pueden ser cualesquiera, aunque el nombre del log suele ser el de host seguido de “-bin” y el id del servidor suele ser “1” para el maestro y “2” para el esclavo.

Después debes crear un usuario el cual se usará para replicarse con el esclavo:

GRANT REPLICATION SLAVE ON *.* TO '<usuario>'@'%' IDENTIFIED BY '<contraseña>';

También se puede usar el nombre del servidor esclavo en vez de %. Una vez creado el usuario, actualizamos los datos mediante FLUSH PRIVILEGES y FLUSH TABLES.

Si ejecutamos SHOW MASTER STATUS nos devuelve unos datos que son importantes para la replicación, sobre todo la columna File y la columna Position.

Una vez que el maestro ya está configurado, podemos empezar con la configuración del esclavo, eso sí, antes del inicio de la replicación ambas bases de datos deben tener la misma información. Para configurar el esclavo deberemos modificar su my.conf de la siguiente forma:

server-id=<numero-servidor>

siendo el número distinto al que usamos en el maestro, en nuestro ejemplo el maestro era “1” y el esclavo “2”. Después deberemos ejecutar la siguiente sentencia:

CHANGE MASTER TO MASTER_HOST='<servidor-maestro>', MASTER_USER='<usuario-replicacion>', MASTER_PASSWORD='<contraseña-replicacion>', MASTER_LOG_FILE='<fichero-log>', MASTER_LOG_POS=<posición-log>;

Y ya por último reiniciamos MySQl, paramos el esclavo(STOP SLAVE), cargamos los datos del maestro (LOAD DATA FROM MASTER) y arrancamos el esclavo (START SLAVE).

MySQL replication

Vía / PixelGroovy

|

MySQL nativo para PHP

mysql.pngLa gente de MySQL ha sacado a la luz unos drivers nativos de su base de datos para PHP. Una alternativa que solo funciona para PHP 6 y MySQL 4.1 o superior.

mysqlnd, que es como se llama esta librería, es una sustitución de libmysql, pero no tienen intención de dejar de dar soporte a libmysql para evitar que aplicaciones anteriores fallen. Pero ofrecen novedades a tener en cuenta:

  • La licencia es PHP license, evitando posibles problemas de licencias.
  • mysqlnd a nivel C usa muchas funciones internas estables de PHP.
  • Todas las librerías esta almacenadas en el directorio ext/mysqli, por lo que no es necesario enlazar a librerías externas. Así como no es necesario tener instalado el cliente de MySQL para compilar PHP con soporte para MySQL.
  • El rendimiento ha sido mejorado en varias zonas.

De todas formas, esta primera versión no está completa y se solo se han desarrollado las siguientes funcionalidades: conexiones persistentes, mysqli_fetch_all() y mysqli_get_cache_stats().

MySQL native driver for PHP: mysqlnd-5.0.0-alpha

Vía / Plante PHP

Crear un túnel SSH al servidor MySQL

Muy buen truco para crear un túnel SSH a un servidor MySQL y así poder usar el administrador de MySQL como si fuera en localhost, permitiendo así las opciones que añade para conexiones en local.
Para realizarlo es necesaria la aplicación PuTTY, un cliente Telnet/SSH gratuito, y el MySQL Administrator, aunque por lo que he entendido es válido para cualquier acceso a la BD.
Lo que conseguimos con el túnel SSH es acceder a una dirección, en este caso la 127.0.0.1:3306 (el puerto por defecto de MySQL en la máquina a la que accedemos), mediante un nuevo puerto (en el ejemplo el 8600). Así, cuando queramos acceder como si fuera localhost pero en un servidor remoto, tan solo deberemos acceder a 127.0.0.1:8600 desde el MySQL Administrator.
Securing the connection between MySQL and MySQL Administrator using an SSH tunnel
Vía / Digg

Optimizar MYSQL seleccionando correctamente los tipos de los campos

Algo muy importante para desarrollar una aplicación web es diseñar correctamente la base de datos MySQL, en este caso los tipos de los campos.
Algunos errores que se suelen cometer es por ejemplo usar texto para almacenar cantidades de dinero porque aparece el carácter de la moneda, cuando lo más lógico es formatear el valor obtenido en la base de datos en tus páginas.
Por ello lo primero es saber qué tipo de campo vamos a usar, numérico o texto, y luego saber qué subtipo seleccionar. Debemos tener en cuenta dos factores, cuánto espacio en disco ocupa y cuánto tiempo de proceso requiere.
Por ello, no es lo mismo seleccionar un CHAR que un VARCHAR, CHAR tiene ancho fijo, pero VARCHAR es más rápido de procesar, debemos tener en cuenta si nuestra base de datos va a ocupar poco o si necesita rapidez y actuar en consecuencia seleccionando el tipo correcto para los campos de las tablas.
Leed más, sobre todo la comparativa de tipos de campos, en el siguiente artículo.
Making your MySQL Tables More Effeciant by Using Correct Fieldtypes
Vía / dzone

Identificar queries lentas en MySQL

Algo muy importante a la hora de desarrollar un proyecto es identificar los puntos que ralentizan la devolución de la página web. Algo que suele provocar esta demora son las sentencias SQL lentas.

En el artículo al que hacemos referencia, explica paso a paso cómo encontrar las queries más lentas. Para ello primero se comprueba si se muestran los logs de sentencias lentas y si no es así, las modificaciones que hay que realizar para que se muestren. Después nos explican el significado de los logs y una utilidad para tratarlos.

Estos consejos solo son válidos para Unix, los usuarios de Windows deberán usar los logs de la aplicación para detectar el punto donde tarda en ejecutarse y luego mediante la sentencia EXPLAIN
estudiar la ejecución de las consultas.

Identifying MySQL slow queries

Vía / dzone

| |

Escritura el campos blob en MySQL y PHP

Muy buen artículo que explica cómo almacenar imágenes en campos blob usando MySQL y PHP, el post explica realmente cómo crear galerías de imágenes almacenándolas en campos blob. Yo personalmente no soy muy partidario de esta opción, cuando realmente se debería guardar la ruta de la imagen en el servidor y que el servidor web se encargue de enviar la imágen, ya que si no, lo que hacemos es hacer trabajar bastante a la BD.
De todas formas, el artículo puede sernos útil para saber como almacenar en este tipo de campos, porque aunque el ejemplo no sea del todo correcto, en alguna ocasión si que vamos a necesitar guardar datos en campos blob.
Muy bien explicado, añade conceptos básicos de protección por contraseña, actualización y borrado de imágenes, a parte de un par de consejos sobre los problemas que nos podemos encontrar con la capacidad máxima que se permite subir al servidor usando PHP.
PHP MySQL example: image gallery (blob-storage)
Vía / Good PHP Tutorials

SQLyog: administrador para MySQL

webyog.pngSiempre está bien conocer aplicaciones de administración de base de datos para MySQl. Esta vez se trata de SQLyog, la cual antes era de pago, y ahora es opensource.
Yo al menos no la conocía, pero tiene muy buena pinta. Tiene la mayoría de las características que se esperan de una aplicación de este estilo, pero si ves que se queda corta, hay una versión Enterprise que dispone de otras características añadidas.
SQLyog
Vía / Bitelia

|

Triggers en MySQL

mysql.pngLa verdad es que tenía pendiente hacer un pequeño manual de triggers (disparadores) en MySQL después de haber hablado de las novedades de MySQL 5, pero siempre falta tiempo y por eso aprovecho a comentar el artículo que he encontrado.

Los triggers son algo muy útil sobre todo si queremos actualizar datos de forma automática. Imaginemos una tabla con los datos de un usuario, que pueden ser modificados desde distintas partes de nuestra aplicación, y es necesario que cuando se actualiza algún dato del usuario, se tenga que actualizar los datos de otra tabla. Podríamos actualizar los datos de la segunda tabla mediante código en cada uno de los casos en los que se actualiza la tabla del usuario en la aplicación, o bien podríamos crearnos un trigger que cuando se actualice la tabla de usuario (aunque sea “a mano”) se actualice directamente los datos de la otra tabla.

Un ejemplo para la creación de un trigger sería el siguiente:

CREATE TRIGGER disparador
AFTER INSERT ON usuarios
FOR EACH ROW
UPDATE tabla2
SET campo = valor;

Más información

Ease database management and automate functions with triggers in MySQL

Disparadores (triggers)

Vía / dzone

| |

Zend Framework: uso básico de la base de datos

Algo que siempre se usa que realmente solo se debería crear una vez en nuestras aplicaciones web es el gestor de la base de datos. Y si seguimos con el estudio del framework de Zend, nos encontramos con unas funcionalidades sobre la BD bastante aceptables, aunque ellos mismos digan que deben añadir cosas.

La principal característica es olvidarnos de la BD en cuestión y usarla, sea cual sea, de forma genérica. Por ahora este framework admite entre otras Microsoft SQL Server, MySQL, PostgreSQL y SQLite, estando basado en PDO. Lo siguiente, es que mediante una clase, el uso que normalmente le damos a una base de datos (selección, inserción y borrado) queda perfectamente resuelto.

Read More “Zend Framework: uso básico de la base de datos”