Site hosted by Angelfire.com: Build your free website today!

BASES DE DATOS EN INTERNET BAJO GNU/LINUX

En este artículo se va a presentar un sistema completo de publicación de datos en Internet, utilizando el navegador de Internet como cliente, y como servidor de bases de datos actuará el servidor de web Apache con una extensión llamada PHP.

El sistema estará compuesto por cinco elementos principales:

- GNU/Linux como sistema operativo abierto
- Apache como servidor de web
- PHP como módulo de ampliación de Apache para acceder a la base de datos
- MySQL como base de datos
- Una interfaz web a MySQL

Todos los elementos del sistema se pueden obtener sin ningún tipo de coste por lo que el montaje inicial del sistema y su uso no conllevan ninguna inversión. Es más, a excepción de MySQL, de la que hay que comprar licencias en el caso de que se quiera vender sistemas que la incluyan, todos los demás elementos tienen licencia GPL [1]

Durante el desarrollo del artículo se describirán cada una de las piezas del sistema que acompañan a GNU/Linux, haciéndose especial hincapié en como se relacionan. Es conveniente para el lector tener unas nociones básicas de bases de datos ya que al ser un tema muy amplio no se podrá tratar con detalle en el artículo, aunque se intentarán aclarar los conceptos principales a medida que vayan apareciendo.

Y quizás la parte fundamental del artículo sea el último apartado donde se intentará llevar al lector paso por paso en la instalación de todo el sistema, hasta llegar a tener el sistema completo funcionando. Con ello y junto con un software desarrollado por la empresa Desarrollo y Recursos [9] y bajo licencia GPL, se tendrá un sistema de creación, gestión y uso de bases de datos utilizando Internet que puede aportar una gran utilidad en cualquier tipo de proyectos.


INTRODUCCIÓN AL SISTEMA


Como una motivación previa y para que el lector pueda tener una visión global desde el principio, se presenta en este apartado una visión global del sistema. En el siguiente gráfico se destacan las partes fundamentales.



Los pasos que describen la interacción entre el cliente y la base de datos son:

1. El cliente carga una página HTML con un formulario, rellena los datos y los envía al servidor
2. A través de la red TCP/IP (Internet normalmente) los datos llegan al servidor, y son enviados a un programa, en este caso un programa PHP.
3. El servidor detecta que los datos se envían a una página PHP por lo que informa al módulo de PHP del programa a ejecutar y le pasa los datos del cliente
4. El módulo de PHP ejecuta el programa, el cual accederá a MySQL utilizando de nuevo una comunicación TCP/IP (en nuestro caso local)
5. MySQL procesa la petición del programa PHP y le envía de vuelta los resultados.
6. El módulo PHP recibe los resultados y a través del servidor Apache, envía una página HTML con los resultados al cliente
7. El cliente recibe la página HTML resultado de sus petición, a través de la red TCP/IP

En este primer esquema se puede ya ver que toda la interacción con la base de datos se hace a través de PHP, y como PHP tiene soporte para una amplia gama de bases de datos, el sistema descrito en este artículo es fácilmente adaptable a diferentes bases de datos con cambios mínimos en el código que se encarga de acceder a la base de datos.



APACHE


Apache es el servidor de web por excelencia. Ha sido uno de los mayores éxitos del software libre y su supremacía entre los servidores de web no se ve amenazada (ni si quiera por el servidor de web de Microsoft).

Su desarrollo en continuo y su portabilidad le han llevado plataformas como Windows NT y Windows 95, a parte de casi todos los sistemas Unix.

Una de las principales características de Apache es su extensibilidad basada en una gran modularidad de su código fuente,  lo que han facilitado la aparición de módulos de extensión como PHP el cual evitará el uso de cgi-bins por completo, facilitando enormemente la programación de aplicaciones en el lado del servidor, especialmente en el campo de acceso a bases de datos.

En el primer número de Linux Actual se dedicó un artículo completo a este servidor de web por lo que recomendamos al lector interesado su lectura. En las referencias [2], [3], [4] y [5] el lector podrá ampliar también información sobre este servidor de web.

PHP: Hypertext Preprocessor (Preprocesador de Hypertexto)


En el manual de PHP se describe a PHP como: << PHP Version 3.0  es un lenguaje de programación que se introduce dentro de las páginas HTML. La mayoría de sus sintaxis está basada en C, Java y Perl. El principal objetivo del lenguaje es permitir a los desarrolladores de aplicaciones basadas en el web escribir páginas que se generan de forma dinámica de una forma sencilla y rápida. >>

PHP [7] es un lenguaje de programación del lado del servidor. Esto es, es un lenguaje que nos permite programar aplicaciones asociadas al servidor de web, aumentando la funcionalidad de dicho servidor y convirtiéndolo en un sistema de desarrollo de aplicaciones cliente/servidor mucho más completo.

Ha sido un evolución de un lenguaje conocido como PHP/FI (Personal Home Page/ Form Input), el cual debido a su gran éxito, fue totalmente remodelado tras la versión 2.0 lo que obligó a ciertas incompatibilidades bastante molestas a la hora de actualizar el antiguo código.

El nuevo PHP, cuya versión es la 3.0 para mantener una cierta asociación con su progenitor, ha sido ampliado con aspectos tan importantes como conceptos de programación orientada a objetos, y su sintaxis es ahora mucho más cercana a la de C, por lo que cualquier programador que haya programado en C no tardará mucho tiempo en aprender a utilizar el lenguaje.

Las construcciones sintácticas de PHP son más cercanas a Perl que a C ya que en su diseño se buscó un lenguaje útil con el que se programara muy rápido, es decir, que fuera un lenguaje muy productivo al más puro estilo de Perl.

PHP está en continuo desarrollo y como detalle curioso citar que se ha votado por Internet el significado del acrónimo durante Abril de 1998, publicándose el resultado del 19 de Abril: PHP significa PHP Hypertext Preprocessor (acrónimo recursivo al estilo GNU significa GNU is Not Unix).

Lo más espectacular de PHP es su facilidad para acceder a la siguiente lista de bases de datos:

Oracle PostgreSQL
Sybase Adabas D
mSQL 1.x and 2.x FilePro
MySQL Velocis
Solid dBase
Generic ODBC Unix dbm

De hecho es bastante sencillo portar la aplicación que se describirá al final de este artículo de MySQL a cualquiera de ellas ya que las funciones de acceso que ofrece PHP son en muchos casos de sintaxis compartida.

Quizas MySQL es la que mejor soporte tiene por parte de PHP junto con PostgreSQL, debido a que ambas bases de datos son de libre distribución, con el código fuente, y con un acceso muy sencillo a través del lenguaje C.


MYSQL



MySQL es un sistema de gestión de bases de datos (SGBD) SQL que inicialmente buscó una compatibilidad con la API de mSQL. Sus principales objetivos han sido la velocidad y la robustez.

Es un SGBD sencillo y rápido que se adapta perfectamente a entornos en donde el volumen de datos sea del orden de megabytes (en la documentación se habla de su uso con bases de datos de 50 millones de registros). Evita complejidades como el sistema de transacciones, lo que la limita para su uso en grandes sistemas (gran volumen de datos, muchos accesos simultáneos y alta distribución de los datos).

En el mundo de GNU/Linux es MySQL junto a PostgresSQL [10] los principales SGBD de uso libre y con código fuente. Las grandes compañías de bases de datos como Software AG [11] están comenzando a ver en GNU/Linux un nuevo mercado y están portando sus grandes sistemas a GNU/Linux. ADABAS es un SGBD del nivel de Oracle o Illustra de Informix y está portado a Linux, lo que constituye una opción muy importante a grandes empresas donde el acceso a los datos sea crítico y donde se necesite un soporte comercial. Incluso el servidor de bases de datos de Oracle se puede ejecutar en Linux utilizando el binario de SCO Unix y el módulo de compatibilidad de binarios iBCS.



MySQL está al igual que PHP en fase de pleno desarrollo. Se están publicando de forma regular nuevas versiones del sistemas, así como herramientas que son básicas en cualquier SGBD actual:

- Dispositivo JDBC para acceder desde Java
- Dispositivo ODBC para acceder utilizando la API ODBC
- APIs de programación para C, Perl, C++, Python y TCL
- Acceso desde PHP
- Entornos visuales de gestión de la base de datos
- Control de acceso basado en una base de datos de administración


En el servidor de MySQL [12] podemos encontrar una comparación exhaustiva entre diferentes SGBD: MySQL, mSQL, PostgreSQL 6.3, Oracle, Solid y Empress.

Quizás una de las cosas que más se agradecen de MySQL es que las bases de datos las almacena creando un directorio por cada una de ellas, y dentro de dicho directorio, crea tres ficheros por tabla donde se almacenan los registros de la tabla y la definición de la tabla. El copiar una base de datos es tan fácil como copiar un directorio por lo que hacer copias de seguridad de las mismas es algo de lo más sencillo.


EL SISTEMA COMPLETO

En este apartado se quiere facilitar al lector la tarea de instalar el sistema completo desde el principio. Para ello se detallan los pasos a seguir para la compilación e instalación de los diferentes paquetes aunque la última palabra siempre la tendrán la documentación de cada paquete en particular. En algún caso la descripción que aquí se hace pudiera no ser completa y el lector tendrá que recurrir a las instrucciones de instalación de cada uno de los paquetes. Para cualquier duda se puede consultar con el escritor del presente artículo en: alvaro_del_castillo@mailcity.com.

El sistema donde ha sido probado el sistema completo es Debian 1.3.1, que se entregó con el primer número de Linux Actual. Con cualquiera otra distribución de Linux los cambios serán mínimos y perfectamente documentados dentro de la documentación de cada paquete.

La compilación del código fuente puede plantear problemas para usuarios inexpertos pero desde aquí se recomienda encarecidamente al lector que intenté compilar el sistema. En un mundo tan evolutivo como Linux el saber compilar aplicaciones llega a ser vital ya que, los programas cambian muy rápidamente y no siempre se disponen de binarios ya compilados, y los binarios ya compilados puede que no se adapten a nuestras necesidades. Y desde el punto de vista didáctico, se aprende mucho enfrentándose a este tipo de problemas.

MySQL

El primer paso es obtener MySQL, compilarlo e instalarlo. Para ello podemos obtener la última versión de [8]. En el momento de escribir este artículo dicha versión era la 3.21.29-gamma

Como se habitual lo que obtenemos es un archivo .tgz, que deberemos descomprimir para poder continuar con la instalación: tar xvfz mysql-3.21.29-gamma.tar.gz.

Entramos en el directorio mysql-3.21.29-gamma desde donde compilaremos el programa.
Antes de compilar hay que ejecutar el programa configure que se encarga de adaptar las fuentes a nuestro sistema. A este programa le podemos pasar parámetros de donde se encuentran ciertas librerías e incluso configurar ciertas opciones del programa. En Debian 1.3.1 la versión de Perl instalada es demasiado antigua para el funcionamiento de la parte de Perl de MySQL provocando problemas a la hora de compilar. Por ello la desactiveramos ya que en nuestro caso es innecesaria, algo que pudiera no ser necesario para el lector cuyo sistema tuviera una versión de Perl más actualizada. La orden a ejecutar es:
configure - -without-perl - -enable-shared.
Con la opción de - -enable-shared indicamos que queremos que se creen librerías compartidas para el acceso a MySQL.

Si no hay problemas en este paso con un simple make se creará el demonio servidor de bases de datos (mysqld), los clientes de acceso y programas de gestión junto con las librerías necesarias para poder acceder desde nuestros programas en C a la base de datos.

Tras finalizar la compilación pasamos a instalar MySQL. Para ello necesitaremos ponernos en el papel de superusuario y ejecutar: make install. Con esta orden se copian bajo /usr/local/  en los direcotorios adecuados los binarios y las librerías. En especial cabe resaltar que las bases de datos se crean dentro del directorio /usr/local/var. Para crear la primera base de datos conocida como mysql y que contiene los permisos de acceso a las bases de datos, ejecutamos desde el directorio actual la orden: scripts/mysql_install_db. Con ello se creará esta primera base de datos en /usr/local/var/mysql y se arrancará el demonio de la base de datos.

Con esto queda finalizada la compilación e instalación de MySQL. Para arrancar el demonio servidor de bases de datos hay que ejecutar /usr/local/libexec/mysqld, aunque dicho demonio está ya arrancado tras el último paso de la instalación.

Entre las herramientas que acompañan a MySQL cabe destacar mysql que se encuentra en /usr/local/bin y que permite ejecutar comandos SQL sobre la base de datos.

Ante cualquier problema hasta este momento se recomienda al lector que acuda a la documentación de MySQL y si esta no logra resolver su duda, puede contactar con el autor del artículo.



PHP y Apache

Una vez instalada MySQL pasamos a compilar PHP. De nuevo hay que obtener la última versión de [6] que el momento de escribir el artículo era la 3.0RC4. Los pasos de instalación son similares a MySQL y están documentados dentro del fichero INSTALL de la distribución de PHP. Tan solo la salvedad de que debemos tener la última versión de Apache obtenida de [2], que en el momento de escribir el artículo era la 1.2.6, descomprimida ya que a PHP hay que decirle donde puede encontrar las fuentes de Apache. En el paso 3 hay que sustituir ruta-acceso por el directorio donde el lector haya ejecutado: tar xvfz apache-1.2.6.tgz.

1. tar xvfz php-3.0RC4.tgz
2. cd php-3.0RC3
3. configure -with-apache=<ruta-acceso/apache-1.2.6/src>
4. make
5. make install

Ahora nos debemos ir al directorio apache-1.2.6/src/ y editar el fichero Configuration añadiendo como última línea: Module php3_module mod_php3.o

Asimismo y dentro de este mismo fichero añadimos a EXTRA_LIBS las opciones que aparecen tras LIBS dentro del fichero libphp3.module.

Una vez hecho esto ejecutamos make proceso que finalizará con la creación del ejecutable httpd, que es el servidor de web Apache con el soporte para PHP incluido. Ejecutamos strip httpd y copiamos dicho servidor a /usr/local/bin, para que no interfiera con el servidor de web instalado por Debian, si es que ha sido instalado.

Hay que modificar el fichero de configuración de Apache srm.conf para indicar al servidor que los ficheros con extensión .phtml deben ser tratados por el módulo de PHP. Esto se hace incluyendo en el lugar adecuado la línea: AddType application/x-httpd-php3 .phtml.

Paramos el servidor Apache incluido con Debian (/etc/init.d/apache stop), si es que lo hemos instalado y en funcionamiento, y ejecutamos /usr/local/bin/httpd como superusuario. En el caso de que no encuentre Apache los ficheros de configuración del demonio, bastará con copiar los ficheros de /etc/apache a /usr/local/etc/httpd.

Una vez llegado a este punto ya tenemos el servidor de web Apache con soporte para PHP corriendo en nuestra máquina Linux.

Probando el sistema

Para ver que todo está funcionando correctamente basta con crear un fichero prueba.phtml con el contenido:

<? phpInfo();?>

Dicho fichero ha de ser visualizado a través del servidor de Apache para que módulo de PHP lo preprocese antes de enviarlo al usuario.
Los "<?" indican el comienzo y "?>" fin del código PHP dentro de la página HTML y la función phpInfo() vuelca en HTML un informe completo del módulo PHP con información sobre la versión del servidor de Apache, la versión de PHP, los soportes de acceso a bases de datos incluidos y mucha más información.


LA INTERFAZ WEB A MYSQL

Dentro de mi trabajo para la empresa Desarrollo y Recursos S.L. (DyR) [9] tuve el problema de cómo facilitar el uso de MySQL para la gestión integral de los datos de la empresa.

Para MySQL no existía ninguna interfaz web, aunque si una para el entorno gráfico de Linux conocida como xmysql. Asimismo junto con la distribución de MySQL se incluye una interfaz de línea de comandos desde la que gestionar todo el sistema conocida como mysql.

La interfaz web permite el acceso a la base de datos desde cualquier punto de la intranet que tenga un navegador de web, por lo que los ordenadores con Windows 95, MacOS o OS/2 no tendrían ningún problema para acceder a las bases de datos, normalmente para la introducción y consulta de datos.

Por ello inicié el desarrollo de una interfaz web a la base de datos ya que esto permitiría el acceso a los datos desde cualquier punto de la intranet a través de un cliente web, así como la gestión de las diferentes bases de datos.

Dicho interfaz en la actualidad se encuentra bastante avanzado y se ha usado durante más de un año. La interfaz se divide en tres funcionalidades principales:

Gestión de bases de datos

En este apartado se puede crear, borrar y listar las bases de datos actualmente disponibles en el sistema.

Gestión de Tablas

En este apartado se pueden crear tablas, borrarlas o eliminar todos los registros que tuvieran.

La creación de tablas es sin duda el programa más complejo del sistema ya que tras indicar el número de campos y el nombre de la tabla, se ha de poder indicar el tipo de campo para cada uno de los que se van a crear, la longitud en caso de tipos variables, y si el campo es clave única o no lo es.

Esta parte del sistema necesita mejoras como aumentar el número de tipos y gestionar de forma correcta el campo de longitud, aunque la funcionalidad actual es bastante útil.

Desde el momento que se crea una tabla se puede ir a la parte a la parte de inserción de datos desde la que se podrán introducir registros nuevos para esa tabla.

Gestión de Datos

Este último apartado es el que mayor valor añadido encierra. Desde él se pueden acceder a los datos bien volcando todo su contenido o realizando una búsqueda.

También se pueden modificar registros siempre que la tabla tenga definida una clave única ya que sino no sería posible localizar a un registro en particular.

La inserción de datos nos permite introducir nuevos registros dentro de una tabla ya creada dentro de una base de datos.

Por último el borrado de datos nos permite después de una búsqueda eliminar un conjunto de registros.


En conjunto el sistema permite gestionar a través de un navegador de web un conjunto de datos repartidos en diferentes bases de datos, de una forma sencilla, cómoda y rápida. Al ser un sistema totalmente genérico es aplicable a cualquier proyecto en el que se necesite el apoyo de un SGBD para el almacenamiento y gestión de volúmenes de datos.

Los planes futuros para esta interfaz son su traducción al inglés y su adaptación a otras bases de datos, principalmente PostgreSQL y Adabas.

El software en su totalidad ha sido puesto bajo licencia GPL convirtiéndose DyR en una de las empresas que comienzan a apoyar la filosofía que acompaña a GNU/Linux, alejándose del modelo de empresa que explota GNU/Linux pero que no lo apoya ni promociona.

Todo el software puede obtener de: Open Web Database



CONCLUSIONES

GNU/Linux es un sistema operativo ideal para aplicaciones de red que requieran un funcionamiento robusto de forma continuada. Este es el caso de los servidores de bases datos, programas que permiten el acceso a los datos de una empresa, de un proyecto o de cualquier tipo de organización, datos normalmente vitales.

La robustez y eficiencia de Linux ha hecho que empresas como Software AG hayan portado bases de datos del renombre de Adabas a Linux, y a precios muy inferiores a otros entornos. Así GNU/Linux se afianza en otro nuevo campo del mundo software, un campo muy importante y que puede ayudarle a multiplicar una confianza que comienza a palparse dentro del mundo empresarial.



Referencias

- [1] http://www.gnu.org/copyleft/gpl.html
- [2] http://www.apache.org: Apache
- [3] http://www.apache-ssl.org; Apache SSL
- [4] http://www.netcraft.co.uk/Survey/: Uso de Apache en Internet
- [5] http://www.apacheweek.com/: Revista de Apache
- [6] http://www.php.net: PHP
- [8] http://www.tcx.se: MySQL
- [9] http://www.dyr.es: Desarrollo y Recursos S.L.
- [10] http://www.postgreSQL.org: PostgreSQL
- [11] http://www.sagus.com: Adabas
- [12] http://www.tcx.se/crash-me.html
- [13] http://www.dyr.es/~acs/linux-actual/bd.html

Este artículo se encuentra protegido por la licencia GPL. Puedes hacer lo que quieras con él siempre que se me refleje como autor original y no se modifique la licencia.



Document converted from word 8 by MSWordView (mswordview 0.5.1)
MSWordView written by Caolan McNamara