Tabla de Contenidos

Administración de MySQL

Estructura interna

Toda la información que maneja el servidor se encuentra en un mismo directorio de datos. En Windows esta ubicación suele ser C:\mysql\data.
Si no es así, hay dos formas de encontrarlo:

Dentro el directorio de datos, la información se encuentra organizada en una estructura jerárquica de árbol. Existe una carpeta correspondiente a cada base de datos (con su mismo nombre), y dentro de cada una, se encuentran los archivos correspondientes de cada tabla.

Arquitecturas de almacenamiento de tablas

Las tablas pueden estar almacenadas de diferentes formas, incluso dentro de una misma base de datos. Cada tipo de tabla, afecta en el espacio que consumen en memoria y disco, y en la velocidad de ejecución de las sentencias MySQL.

Para pasar tablas de un tipo a otro, se puede hacer sin problema (siempre que se tengan los privilegios adecuados), a través de la sentencia:

ALTER TABLE NombreTabla TYPE=TipoTabla;

A continuación se detallan los diferentes tipos de tablas:

MyISAM

Versión mejorada de estructura ISAM. Cada tabla de la base de datos existe como tres archivos:

Cuando se ejecuta una sentencia CREATE, se crean los tres archivos, aunque algunos estén vacíos.
Existen diferentes opciones de almacenamiento para tablas ISAM:

OPTIMIZE TABLE NombreTabla;

O a través de la utilidad myisamchk, que se encuentra como programa ejecutable, dentro de la carpeta /bin.

Ejemplo de uso:

  C:\mysql\bin>myisampack ..\data\NombreBaseDatos\NombreTabla # Para crear la tabla
  C:\mysql\bin>myisamchk -u ..\data\NombreBaseDatos\NombreTabla # Para crear la tabla # Para obtener la tabla original, en formato lectura-escritura

MERGE

Estas tablas no tienen datos por si mismas, sino que hacen referencia a dos o más tablas tipo MyISAM a través de la cláusula UNION. Podemos realizar las diferentes acciones, bien a través de la tambla tipo MERGE, o de las tablas originales. Generan dos ficheros: uno con extensión .frm y otro con extensión .MRG.\\Las tablas de este tipo, deben ser idénticas en estructura. Borrar una tabla tipo MERGE, no afecta a las tablas que la conforman.

MEMORY (HEAP)

Se caracterizan por almacenar todos los datos en memoria. Si se reinicia el servidor, todos los datos se pierden (no así su estructura). Estas tablas son extremadamente rápidas, y son muy útiles para crear tablas temporales. Sólo guardan un fichero con extensión .frm que almacena la estructura de la tabla.

InnoDB

Es un motor de bases de datos muy completo que ha sido embebido dentro de MySQL. Sus principales características son:

InnoDB, a diferencia que MyISAM, almacena todos los datos e índices de todas las tablas de todas las bases de datos en un mismo tablespace, que consiste en un número reducido de archivos del sistema operativo formado por ficheros de datos (data files) y ficheros de log (log files).

Por defecto, InnoDB crea un archivo de datos llamado ibdata1 de 10MB autoextensible y dos archivos de log llamados ib_logfile0 y ib_logfile1, todos ellos en el directorio de datos de MySQL. Por ello InnoDB sólo crea por cada tabla un fichero de descripción de la tabla con extensión .frm. Los datos e índices quedan en el tablespace definido.

Configuración

Los programas que componen MySQL (mysqld, mysqladmin, etc) pueden ser configurados, por orden de mayor a menor preferencia:

  1. Línea de comandos.
  2. Ficheros de opciones.
  3. Valores de variables de entorno.

Configuración por línea de comandos

Deben seguir las siguientes reglas:

  c:\mysql\bin>mysql --help  # Forma larga
  c:\mysql\bin>mysql -?      # Forma corta
  c:\mysql\bin>mysql --set-variable=max_allowed_packet=16M

Se recomienda visitar el Manual de Referencia de MySQL para localizar toda la información necesaria.

Configuración por ficheros de configuración

Los ficheros de configuración sirven para que los programas carguen la misma configuración al arrancar.
Listado de programas que aguantan ficheros de configuración: myisamchk, myisampack, mysql, mysql.server, mysqladmin, mysqlbinlog, mysqlcc, mysqlcheck, mysql_safe, mysqldump, mysqld, mysqlhotcopy, mysqlimport, mysqlshow.

Los programas MySQL pueden consultar más de un fichero de configuración.
Bajo Windows, por orden de mayor a menor preferencia:

  1. WINDIR\my.ini Opciones globales (WINDIR es la ruta del sistema Windows, típicamente C:\Windows).
  2. C:\my.cnf Opciones globales.

Bajo Linux, por orden de mayor a menor preferencia:

  1. /etc/my.cnf Opciones globales.
  2. DATADIR/my.cnf Opciones específicas del servidor (DATADIR hace referencia al directorio de datos de MySQL).
  3. ~/.my.cnf Opciones específicas del usuario.

Ha tener en cuenta:

Administración de usuarios

El administrador del Sistema MySQL, puede especificar:

El “diccionario de datos” de MySQL se encuentra en el “directorio de datos” en una base de datos llamada mysql. En esta base de datos aparecen cuatro tablas que disponen de toda la información necesaria acerca de los usuarios y sus privilegios. Las tablas son las siguientes:

Aunque se puden manejar los privilegios con la manipulación de estas cuatro tablas, es más cómodo usar las sentencias GRANT (crear usuarios y especificar privilegios) y REVOKE (eliminar privilegios).

Crear usuarios y especificar privilegios

Sintaxis de la sentencia GRANT:

  GRANT privilegios (columnas)
  ON nivelPrivilegio
  TO usuario@host IDENTIFIED BY "contraseña"
  [WITH GRANT OPTION];

Vamos a ver qué significa cada cláusula de esta sentencia:

Privilegio Descripción
ALTER Permite alterar tablas e índices
CREATE Permite crear bases de datos y tablas
CREATE TEMPORARY TABLES Permite crear tablas temporales (CREATE TEMPORARY TABLE)
DELETE Permite borrar registros de tablas existentes
DROP Permite eliminar bases de datos y tablas
INDEX Permite crear y eliminar índices asociados a tablas
INSERT Permite insertar nuevos registros en tablas
SELECT Permite consultar información en tablas
UPDATE Permite modificar el contenido de registros existentes
Privilegio Descripción
FILE Permite leer y escribir archivos en el servidor (SELECT … INTO OUTFILE y LOAD DATA INFILE)
PROCESS Permite ver información sobre los procesos abiertos en el servidor (SHOW FULL PROCESSLIST)
RELOAD Permite solicitar al servidor que cargue de nuevo en memoria las tablas del diccionario de datos(FLUSH)
REPLICATION CLIENT Permite al usuario preguntar dónde está el servidor esclavo o maestro
REPLICATION SLAVE Permiso necesario para que el usuario pueda acceder al fichero binary log del maestro desde el esclavo
SHUTDOWN Permite cerrar el servidor (mysqladmin shutdown)
Privilegio Descripción
ALL [PRIVILEGES] Permite agrupar todos los privilegios en uno solo
USAGE Es un privilegio especial que significa “ausencia de privilegios”

Eliminar privilegios

Sintaxis de la sentencia REVOKE:

  REVOKE privilegios (columnas)
  ON nivelPrivilegio
  FROM usuario@host

Los privilegios no tienen porqué coincidir con todos los que tiene el usuario, ya que es posible eliminar sólo la parte que interese.
Son los mismos privilegios y nivel de privilegio que se especificaron en el apartado anterior.

Para eliminar de golpe todos los privilegios de uno o varios usuarios, se puede usar la forma:

  REVOKE ALL PRIVILEGES, GRANT OPTION FROM usuario@host [,usuario@host ...]

Eliminar todos los privilegios no supone eliminar al usuario, ya que éste aún permanece en un registro de la tabla mysql.user, lo que significa que aún puede establecer conexión con el servidor.

Eliminar una cuenta de usuario

  DROP USER 'usuario'@'host' [,'usuario'@'host' ...]

Para poder eliminar a un usuario, anteriormente le han tenido que haber eliminado todos los privilegios.

Ver privilegios

Pueden verse los privilegios de un usuario con la sentencia SHOW GRANTS:

  SHOW GRANTS FOR 'usuario'@'host' [,'usuario'@'host' ...]

Índices

Copias de seguridad

Ficheros Logs

Replicación