Índice de contenido
Capítulo 4......................................................................................................................................................................... 3
Sistema Gestor de Base de Datos MySql........................................................................................................ 3
Introducción........................................................................................................................................................ 3
Bases de Datos......................................................................................................................................................... 4
Definición............................................................................................................................................................. 4
Sistema Gestor de Base de Datos (SGBD)................................................................................................ 4
Modelo Relacional............................................................................................................................................. 5
SQL ( Structured Query Language)............................................................................................................ 5
Gestores de Bases de Datos........................................................................................................................... 5
MySQL.......................................................................................................................................................................... 6
Características.................................................................................................................................................... 7
MySql como parte del sistema LAMP........................................................................................................ 7
MySQL como sistema Cliente / Servidor................................................................................................. 8
Integración de MySQL como lenguajes de programación................................................................9
Instalación y configuración de MySQL .................................................................................................... 9
Administración de MySQL................................................................................................................................ 11
Conectarse a una Base de Datos............................................................................................................... 12
Listar las Base de Datos............................................................................................................................... 12
Seleccionar una Base de Datos.................................................................................................................. 12
Crear una Base de Datos.............................................................................................................................. 13
Borrar una Base de Datos............................................................................................................................ 13
Usuarios y permisos en MySql.................................................................................................................. 13
Página 2 de 2 -
Capítulo 4
Sistema Gestor de Base de Datos MySql
Introducción
En éste capítulo estudiaremos aspectos referidos a las Bases de Datos y nos
centraremos principalmente en MySQL como Sistema Gestor de Bases de Datos (SGBD).
Examinaremos su instalación, su configuración y haremos breve introducción al manejo de
comandos básicos de consola, los que nos permitirán hacer un uso eficiente de la shell que
MySQL nos provee para trabajar.
Página 3 de 3 -
Bases de Datos
Definición
Podemos definir una Base de Datos como un conjunto de datos almacenados de forma
estructurada de manera tal que puedan ser accedidos para su posterior uso. Estos datos no
tienen un significado por si mismos, pero al procesarse en forma conjunta, generan
información la cual es de vital importancia en la toma de decisiones de cualquier organización.
Figura 1: Base de Datos
Para poder almacenar, organizar, mantener y acceder a dicha información, necesitamos
de una herramienta que nos brinde esas funcionalidades. Es aquí donde entra en juego el
Sistema Gestor de Base de Datos.
Sistema Gestor de Base de Datos (SGBD)
Es un programa o conjunto de programas que nos permiten definir, crear y mantener
una Base de Datos. Además, se encargan de cuestiones como el control de acceso, la
concurrencia, seguridad y la consistencia de la Base de Datos.
Página 4 de 4 -
Modelo Relacional
En la actualidad existen varios Modelos de Bases de Datos, pero es sin duda el Modelo
Relacional el más utilizado para gestionar las Bases de Datos. Este modelo utiliza el concepto
de Relación para representar al elemento básico sobre el cuál se quiere guardar información.
Figura 2: Modelo Relacional
Junto con el nacimiento del modelo relacional, se vio la necesidad de crear un lenguaje
para poder manipular los datos. Es así como cobra vida SQL.
SQL ( Structured Query Language)
Es un lenguaje declarativo (indicamos que es lo que queremos obtener y no como) el
cual nos permite interactuar con una Base de Datos Relacional y con sus datos. Hace uso del
álgebra y del cálculo relacional para realizar las operaciones.
Gestores de Bases de Datos
Los sistemas Gestores de Bases de Datos son un punto fundamental a la hora de decidir
trabajar con Bases de Datos. Hoy en día, el mercado nos ofrece una buena variedad de estos,
Página 5 de 5 -
pudiendo encontrar SGBD libres o privativos, cada uno de ellos con sus limitaciones y
características particulares.
• MySQL: desarrollado por MySQL AB una compañía creada por los desarrolladores de
MySQL. A partir de Enero del 2008 fue adquirida por Sun Microsystem. Es el SGBD
Open Source Relacional más popular en estos tiempos por su agilidad, versatilidad y
facilidad de manejo.
• PostgreSQL: es un SGBD Relacional Orientado a Objetos liberado bajo licencia BSD. Es
más avanzado que MySql pero no tan popular como este. Desarrollado y mantenido a
partir de 1986 por una comunidad denominada PGDG (PostgreSQL Global
Development Group).
• Informix / DB2: SGBD Relacional diseñado y desarrollado en la década del 70 por
Informix Software. Durante los años 990 fue el segundo SGBD del mercado, después de
Oracle. En el año 2001 fue comprado por IBM quien es hoy en día el encargado de su
mantenimiento.
• Oracle: nace alrededor de 1977 cuando Larry Ellison y Bob Miner implementan el
primer SQL basado en una base de datos Relacional para la empresa IBM. Fue la primer
empresa en hacer uso de internet para distribuir sus producto, hecho que la impulso
con el desarrollo de la www.
• SQL Server: nace como un sub – producto licenciado por Microsoft y no fabricado
directamente por ellos. Este producto se llamaba SyBase y en base a esto en 1989
aparece SQL Server 1.0. La primer versión tenia serios problemas de compatibilidad
con diversos sistemas operativos, hecho que fue solucionándose en versiones
posteriores.
MySQL
MySQL nace como alternativa a mSQL en la búsqueda de una API mucho más rápida y
flexible de acuerdo a las necesidades. Es el SGBD más popular en el ambiente del Open Source.
Figura 3: MySql
Página 6 de 6 -
Fue desarrollado en la década del 90 por MySQL AB como una API mejorada al actual
mSQL, el cual era demasiado lento y presentaba dificultades con rutinas sobre tablas ISAM.
Años después, en el 2008, la compañía MySQL AB fue comprada por SunMicrosystems, la que a
su vez fue comprada por Oracle Corporation en 2009.
Características
A continuación enumeraremos algunas características de sistema gestor de bases de
datos MySql:
• Respecto de su desarrollo e interioridad.
• Escrito en C y en C++
• Multiplataforma (Linux – Window – Mac OS X, *Nix)
• APIs disponibles para C, C++, Java, Perl, PHP, Python, Ruby, y Tcl.
• Permite el uso de multi-threaded mediante threads del kernel.
• Respecto de los datos que soporta.
• Diversos tipos de datos: enteros con/sin signo, FLOAT, DOUBLE,
CHAR,VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR,
SET, ENUM, y tipos espaciales OpenGIS.
• Datos de longitud fija y variable.
• Seguridad
• Sistema de privilegios y contraseñas muy flexible y seguro, y que permite
verficación basada en el host.
• Contraseñas encriptadas cuando se conecta con un servidor.
• Escalabilidad y límites
• Soporte a grandes bases de datos (50 millones de registros).
• Hasta 64 índices por tabla
MySql como parte del sistema LAMP
LAMP un conjunto de tecnologías que provee a los desarrolladores toda la plataforma
necesaria para brindar servicios web. Mediante LAMP describimos la integración de Linux,
Apache, MySQL y PhP/Python/Perl, Linux como sistema operativo, Apache como servidor
web, MySQL como servidor de Bases de Datos y PhP/Python/Perl como lenguajes de
programación.
En definitiva, cualquier aplicación web que haya sido escrita en alguno de estos
lenguajes (PhP/Python/Perl), que haga uso de MySQL como Sistema Gestor de Bases de Datos
Página 7 de 7 -
y que sea “servida” mediante Apache y TODO esto corriendo sobre algún sistema GNU/Linux,
puede definirse como una Aplicación LAMP.
Figura 4: Tecnología LAMP.
Existen hoy en día una infinidad de aplicaciones que hacen uso del estándar LAMP. Por
ejemplo, podemos enunciar algunos Gestores de Contenido (CMS) como Drupal – Jumla –
OpenCMS – Plone.
Por otro lado, existen Plataformas Educativas también bajo el estándar LAMP. Caso
como los de moodle – Claroline - Teleduc.
En resumen, una gran parte de las aplicaciones que hoy encontramos en la web están
desarrolladas bajo el estándar LAMP.
Mysql forma parte LAMP. Esto se debe a que MySQL, es un sistema libre, gratuito, fácil
de instalar, de configurar y con una gama de prestaciones que lo hacen muy eficiente a la hora
de trabajar procesamientos de datos de mediana o alta escala. Su estabilidad es otra de las
razones por la cual a cobrado popularidad dentro del ambiente.
MySQL como sistema Cliente / Servidor
Al ser un sistema cliente / servidor, a la hora de hacer uso de MySQL deberemos de
instalar ambos paquetes.
En Debian, particularmente, tenemos dos paquetes que hacer referencia a la última
versión, tanto del cliente como del servidor MySql. Estos paquetes se denominan mysql-
server (referencia al servidor MySQL) y mysql-client (referencia al cliente MySQL).
Al instalarlo, automáticamente se configurará el dbms, escribiendo los archivos
necesarios y quedará ya funcionando esperando peticiones. Por defecto, MySql queda
Página 8 de 8 -
escuchando en el puerto 3306 en la interfaz local, pero esto puede configurarse como
veremos más adelante.
Integración de MySQL como lenguajes de programación
Una característica muy importante que posee MySQL es que existe muchas Apis que
permiten que se integre para trabajar con diversos lenguajes de programación.
Por ejemplo si queremos que utilizar MySql con php, deberemos de instalar los módulos
necesarios para tal fin. En el ejemplo de utilización de MySQL mediante php, instalaremos el
módulo php5-mysql.
Instalación y configuración de MySQL
MySql es un SGBD que trabaja bajo el esquema cliente/servidor. De esta manera, a la
hora de instalarlo en nuestro sistema Debian, nos encontraremos con dos metapaquetes por
separado:
• mysql-client
• mysql-server
Para instalarlo entonces deberemos de ejecutar:
# apt-get install mysql-client mysql-server
De esta manera quedarán instalados y configurados de manera predeterminada tanto
el cliente como el servidor MySql.
Figura 5: Instalación MySql.
Página 9 de 9 -
Todos los archivos de configuración querrán localizados dentro del directorio
/etc/mysql. Dentro de este encontraremos los siguientes archivos:
• My.cnf: este es el archivo de configuración principal de MySQL. Desde aquí
configuramos las características generales de funcionamiento del servidor. Por defecto,
MySQL queda configurado y en funcionamiento luego de la instalación, pero si
quisiésemos obtener un beneficio extra en su funcionamiento, desde aquí podremos
hacerlo.
• debian.cnf: este archivo de configuración es generado automáticamente en la
instalación MySQL sobre Debian. Lo que encontraremos en el mismo son los
parámetros de configuración (host – usuario – contraseña y el socket) que se utilizan
para realizar las conexiones entre el cliente y el servidor en el equipo.
• Debian-start: este archivo contiene parámetros para el script bash y que se ejecuta
cada vez que el servidor es iniciado. Contiene la asociación de los valores a distintas
variables que tanto el servidor como el cliente MySQL irán leyendo para su
funcionamiento.
• conf.d/: dentro de éste directorio podremos ir ubicando distintas configuraciones
específicas de nuestras aplicaciones.
Si analizamos el contenido del archivo my.cf encontraremos distintas secciones. Entre
ellas:
Parámetros de Configuración del Cliente
En ésta sección configuramos parámetros que el programa cliente leerá al iniciar para
poder comunicarse con el servidor. Un cliente MySQL en Linux puede conectarse al servidor
mysqld de dos maneras diferentes:
• mediante TCP/IP: que se conecta a través de un número de puerto (por defecto
el 3306). Este parámetro es el que configuramos en port.
• Utilizando un archivo socket de Linux: para conectarse a través de un archivo en
el sistema de ficheros (por defecto /tmp/mysql.sock). La definición de éste
archivo la hacemos en socket.
Una conexión a través de archivo socket de Unix es más rápida que a través de TCP/IP,
pero solo puede ser utilizada cuando se conecta a un servidor en la misma máquina.
Parámetros de Configuración del Servidor
En ésta sección configuramos parámetros del servidor. Deberemos de prestar atención
en que los parámetros que configuremos y que involucran al cliente sean consistente.
Página 10 de 10 -
• user: definimos el usuario con el que correrá MySQL.
• pid-file: todo programa que se ejecuta en GNU/Linux tiene asignado un ID que
lo identifica. Este ID es el que se guarda en el archivo que configuramos en este
parámetro.
• port: puerto en el que el servidor escuchará peticiones vía TCP/IP.
• datadir: este directorio es el lugar donde MySQL guarda físicamente los
archivos de las Bases de Datos. Por defecto /var/lib/mysql/.
• language: mediante éste parámetro definimos el archivo de lenguaje que
MySQL utilizará.
• bind-address: indicamos que peticiones TCP/IP acepta el servidor.
Administración de MySQL.
A la hora de administrar MySQL, contamos con dos formas de hacerlo. La primera es
corriendo la shell que MySQL nos provee e ir modificando, mediante SQL, las tablas que
necesitemos según la operación.
La otra es utilizar el comando mysqladmin y las funciones que este nos provee. De esta
forma, podemos llamar funciones y pasar los parámetros que estas requieran.
Veamos un ejemplo: si queremos cambiar la contraseña un usuario en MySQL.
Mediante clausulas SQL:
server@debian:~$> mysql --user=root mysql
mysql> SET PASSWORD FOR 'usuario'@'localhost' = PASSWORD('contraseña');
Mediante mysqladmin:
server@debian:~$> mysql --user=root mysql
mysql> SET PASSWORD FOR 'usuario'@'localhost' = PASSWORD('contraseña');
El motor de base de datos MySQL trae un cliente que se accede desde la consola el cual
permite conectarse a las distintas bases del motor. Mediante éste podremos realizar
consultas, actualizaciones y modificaciones a las bases de datos que tengamos definidas.
Página 11 de 11 -
Conectarse a una Base de Datos
El programa cliente (también como monitor MySQL) cuenta con varios parámetros
opcionales para conectarnos con una base de datos:
# mysql contable
También podremos especificar el usuario con el cual nos conectaremos a la base de
datos. En caso de no especificarlo se tomara como nombre de usuario el de Linux:
$ mysql -u root contable
Además, se puede forzar que el cliente ingrese una contraseña para conectarse a la
base. En caso contrario se asume que es vaciá:
$ mysql -u root -p contable
Para terminar, también podremos definir el nombre del servidor de base de datos o la
dirección IP del mismo para acceder a una base remota:
$ mysql -h 192.168.0.5 -u root -p contable
Listar las Base de Datos
Una vez que hemos accedido al motor podremos listar todas las bases de datos
existentes en el mismo, con el siguiente comando:
mysql> show databases;
Notaremos que el motor cuenta con dos bases de datos creadas en la instalación,
llamadas Mysql y information_schema para funciones administrativas.
Todos los comandos del monitor deben terminar con punto y coma ha excepción del
comando use, exit o quit.
Seleccionar una Base de Datos
Para conectarnos a una base de datos tendremos que ejecutar el monitor de Mysql
utilizando parámetros, o bien, dentro del mismo con el comando use.
Página 12 de 12 -
A continuación el ejemplo de ambas formas. Primero, seleccionar la base de datos al
momento de loguearnos. Segundo dentro del motor. Para éste ejemplo utilizaremos una base
de datos de nombre gugler.
# mysql gugler
mysql> use gugler;
Crear una Base de Datos
Para crear una base de datos encontramos la sentencia create database que espera
como parámetro el nombre de la misma. Ejemplo:
mysql> create database gugler;
El comando create database puede recibir otros parámetros como por ejemplo el
conjunto de caracteres.
Borrar una Base de Datos
Para borrar una base de datos tenemos la sentencia drop database la cual espera como
parámetro el nombre de la bases. Ejemplo:
mysql> drop database gugler;
También podremos utilizar una función que nos devuelve el nombre de la base de
datos a la cual nos encontramos conectados actualmente. Ejemplo:
mysql> select database();
Usuarios y permisos en MySql
En esta etapa de la clase veremos la administración de usuarios y permisos, lo cual es
un punto fundamental a la hora de trabajar con bases de datos ya que esto nos brinda la
seguridad y las limitaciones necesarias tanto de acceso, lectura y modificación para cada una
de ellas. Tenemos los siguientes comandos:
Página 13 de 13 -
• create user: nos permite crear un nuevo en el motor de base de datos esperando como
parámetro el nombre del mismo.
• grant: otorga distintos permisos a los usuarios sobre las distintas bases de datos.
• revoke: quita permisos otorgados con el comando grant.
• drop user: permite eliminar un usuario creado con el comando create user del motor
MySQL.
Para la asignación de permisos debemos conocer los privilegios que podemos otorgar a
los usuarios, a continuación pasaremos a mencionar algunos de los privilegios que existen en
MySQL:
• ALL – permite al usuario obtener todos los privilegios, exceptuando el permiso grant
option.
• ALTER – Permite el uso de la instrucción ALTER TABLE.
• CREATE – Permite el uso de la instrucción CREATE TABLE.
• DELETE – Permite el uso de la instrucción DELETE.
• DROP – Permite el uso de la instrucción DROP TABLE.
• EXECUTE – Permite la ejecución de procedimientos almacenados, no todas las
versiones de MySQL soportan SP.
• INDEX – Permite el uso de las sentencias CREATE INDEX y DROP INDEX.
• INSERT – Permite el uso de la sentencia INSERT.
• LOCK TABLES – Permite la utilización de la instrucción LOCK TABLES.
• PROCESS – Permite el uso de la sentencia SHOW FULL PROCESSLIST.
• RELOAD – Permite el uso de la instrucción FLUSH.
• SELECT – Permite la utilización de la sentencia SELECT.
• UPDATE – Permite el uso de la sentencia UPDATE.
• USAGE – Sin privilegios. Sólo permite establecer la conexión.
• GRANT OPTION – Permite a los usuarios dar permisos o otros usuarios del motor
MySQL.
Muchos privilegios afectan directamente a las bases de datos, otros a las tablas y otros
a la administración del motor de base de datos.
La asignación de permisos en MySQL se realiza mediante el comando grant desde la
consola MySQL, pero la sentencia grant no solo permite asignar permisos sino que también
crea los usuarios que especifiquemos en la llamada del comando.
El siguiente ejemplo crea un usuario con el comando create user y luego le asigna los
permisos con el comando grant.
Página 14 de 14 -
mysql> create user 'monty'@'localhost' identified by 'password'
mysql> grant all privileges on *.* to 'monty'@localhost identified by 'password';
Podemos concluir que:
Permisos: se permiten todos los permisos.
Sobre: todas las bases de datos y sus respectivas tablas.
Para el usuario: monty
Que accede: localmente
Con la contraseña: password
Por otro lado, también veremos la manera de listar los permisos de un usuario y desde
que lugar accede. El comando que nos permite realizar dicha tarea se denomina show grants y
espera como parámetros opcionales el nombre de usuario y el lugar de acceso.
Ejemplo:
mysql> show grants for 'monty'@localhost;
Si quisiéramos obtener los permisos del usuario actual solo debemos ejecutar el
comando sin parámetros:
mysql> show grants:
Para terminar, se mostrara la manera de modificar la contraseña de un usuario del
motor, para llevar a cabo la tarea debemos ejecutar la siguiente sentencia:
mysql> set password for 'monty'@localhost = PASSWORD('nueva-contraseña');
Página 15 de 15 -