MySQL


En esta lección vamos a hacer un pequeño recorrido por MySQL, por su estructura y forma de trabajar. Para ello suponemos que ya hemos conseguido (por fin...) instalar MySQL en nuestra máquina.

Lo primiero que debemos hacer es arrancar MySQL (ver capitulo de instalación):

  • Linux: ./mysqld start
  • Windows: mysqld-shareware.exeWindows: mysqld-shareware.exe

Todo el sistema de permisos de acceso al servidor, a las bases de datos y sus tablas, MySQL lo almacena en una tabla llamada mysql, que como todas estará en el directorio /data, a menos que hallamos especificado otro directorio.

En Windows esta tabla se crea con la instalación, pero en Linux/Unix debemos crearla con:

/usr/local/mysql/bin/mysql_install_db

En la base de datos mysql es donde se guadaran todos los permisos y restricciones a los datos de nuestras bases de datos. La principal herramienta de MySQL es mysqladmin, la cuál como parece indicar su nombre es la encargada de la administración.

MySQL crea por defecto al usuario root con todos los perimsos posibles habilitados, podemos utilizar este usuario como administrador o crear otro, por ejemplo mysqladmi. Como el usuario root lo crea sin clave de acceso, lo primero que debemos hacer es asignarle una:

mysqladmin -u root password "miclave"

A partir de ahora cualquier operación que hagamos como root deberemos especifica la clave. Hay que destacar que enter el modificador -p y la clave no debe habeficador -p y la clave no debe haber espacios.

mysqladmin -u root -pmiclave

Pues bien, ya estamos preparado para crear una base de datos

mysqladmin -u root -pmiclave create mibasededatos

Para borrarla

mysqladmin -u root -pmiclave drop mibasededatos

La estructura de MySQL

En el directorio /benc encontraremos ejemplos de script y SQL. En el directoio /share están los mensajes de error del servidor para los distinos idiomas. Los directorios /include y /lib contiene los fichero *.h y las librerias necesarias, en /bin estan los ficheros ejecutables y en /data encontraremos como subdirectorio cada una de las bases de datos que hayamos creado.

Como hemos dicho, para cada base de datos que nostros creamos, MySQL crea un directorio con el nombre que le hemos asignado a la bade de datos. Dentro de este directorio, por cada tabla que definamos MySQL va ha crear tres archivos: mitabla.ISD, mitabla.ISM, mitabla.frm

El abla.frm

El archivo con extensión ISD, es el contine los datos de nuestra tabla, el ISM contiene información acerca de las claves y otro datos que MySQL utiliza para buscar datos en el fichero ISD. Y el archivo frm contine la estructura de la propia tabla.

Dado que las bases de datos de MySQL son simples ficheros de un directorio, para realizar copias de seguridad, podremos utilizar las herramientas de compresión que habitualmente usamos en nuestro sistema y luego copiarlo a otro lugar, o simplemente esto último.

Seguridad

Como comentamos anteriormente, todo el sistema de permisos MySQL lo guarda en una base de datos llamada mysql, la cuál se componen de cinco tablas: host, user, db, tables_priv, colums_priv

La tabla user contiene información sobre los usuarios, desde que máquinas pueden acceder a nuestro servidor MySQL, su clave y de sus diferentes permisos. La tabla host nos informa sobre que máquinas podran acceder a nuestro sistema, así como a las bases de datos que tendrán acesso y sus diferentes permisos. Finalmente, las tablas db, tables_priv, columns_priv nos proveen de un control individual de las bases de datos, tablas y columnas (campos).

Tabla user

CAMPO TIPO POR DEFECTO
Host char(60)  
User char(16)  
Password char(16)  
Select_priv enum('N','Y') N
Insert_priv enum('N','Y') N
Update_priv enum('N','Y') N
Delete_priv enum('N','Y') N
Create_priv enum('N','Y') N
Drop_priv enum('N','Y') N
Reload_priv enum('N','Y') N
Shutdown_priv enum('N','Y') N
Process_priv enum('N','Y') N
File_priv enum('N','Y') N
Grant_priv enum('N','Y') N
References_priv enum('N','Y') N
Index_priv enum('N','Y') N
Alter_priv enum('N','Y') N

 

 

Tabla host

CAMPO TIPO POR DEFECTO
Host char(60)  
Db char(32)  
Select_priv enum('N','Y') N
Insert_priv enum('N','Y') N
Update_priv enum('N','Y') N
Delete_priv enum('N','Y') N
Create_priv enum('N','Y') N
Drop_priv enum('N','Y') N
Grant_priv enum('N','Y') N
References_priv enum('N','Y') N
Index_priv enum('N','Y') N
Alter_priv enum('N','Y') N

 

Tabla db

CAMPO TIPO POR DEFECTO
Host char(60)  
Db char(32)  
User char(16)  
Select_priv enum('N','Y') N
Insert_priv enum('N','Y') N
Update_priv enum('N','Y') N
Delete_priv enum('N','Y') N
Create_priv enum('N','Y') N
Drop_priv enum('N','Y') N
References_priv enum('N','Y') N
Index_priv enum('N','Y') N
Alter_priv enum('N','Y') N

 

He aquí una breve descripción de los diferentes permisos:

  • Select_priv: Permite utilizar la sentencia SELECT
  • Insert_priv: Permite utilizar la sentencia INSERT
  • Update_priv: Permite utilizar la sentencia UPDATE
  • Delete_priv: Permite utilizar la sentencia DELETE
  • Create_priv: Permite utilizar la sentencia CREATE o crear bases de datos
  • Drop_priv: Permite utilizar la sentencia DROP o eliminar bases de datos
  • Reload_priv: Permite recargar el sistema mediante mysqladmin reload
  • Shutdown_priv: Permite parar el servidor mediante mysqladminPermite parar el servidor mediante mysqladmin shutdown
  • Process_priv: Permite manejar procesos del servidor
  • File_priv: Permite leer y escribir ficheros usando comando como SELECT INTO OUTFILE y LOAD DATA INFILE
  • Grant_priv: Permite otorgar permisos a otros usuarios
  • Index_priv: Permite crear o borrar índices
  • Alter_priv: Permite utilizar la sentencia ALTER TABLE

Si dejamos en blanco los campos user, host o db, haremos referencia a cualquier usario, servidor o base de datos. Conseguiremos el mismo efecto poniendo el símbolo % en el campo.

 

©José Antonio Rodríguez 2000.