Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introducción
Partimos del manual de referencia de la versión 5.0, en formato pdf y tamaño de papel A4 que se
puede conseguir en http://downloads.mysql.com/docs/refman-5.0-es.a4.pdf, y on line en
http://mysql.rediris.es/doc/refman/5.0/es/index.html.
Ya hemos realizado la instalación de MySql en los ordenadores del aula. Repasemos cómo ha
quedado la instalación.
Mysql arranca en Windows como un servicio de arranque automático cada vez que se arranca
Windows, porque así se ha configurado. También podría haberse configurado un arranque manual
para evitar que cargue la CPU del ordenador de clase cuando no se está utilizando.
EMPEZANDO_con_MySql_r09v02.doc Página 1 de 17
DAI. DAL4GHC.
También sabemos que hay una cuenta de superadministrador que se denomina root y que se le puso
por contraseña cmadrid.
Para una instalación desde el paquete XAMPP, el resultado es el mismo pero teniendo en cuenta
que la carpeta mysql estará dentro de la carpeta xampp, y que el usuario root estará creado sin
contraseña (es muy recomendable ponérsela).
Si hacemos clic en el botón derecho sobre el servicio MySQL y luego elegimos propiedades
aparece una ventana con las propiedades del servicio.
EMPEZANDO_con_MySql_r09v02.doc Página 2 de 17
DAI. DAL4GHC.
Si leemos la información de ruta de acceso al ejecutable, veremos cual es el fichero ejecutable que
es la Instancia de MySQL:
"C:\Archivos de programa\MySQL\MySQL Server 5.2\bin\mysqld-nt" --
defaults-file="C:\Archivos de programa\MySQL\MySQL Server 5.2\my.ini"
MySQL
Es el fichero C:\Archivos de programa\MySQL\MySQL Server 5.2\bin\mysqld-nt.exe.
Para poner en marcha la instancia se ha utilizado unos parámetros de configuración que están
almacenados en el fichero C:\Archivos de programa\MySQL\MySQL Server 5.2\my.ini
Los contenidos de este fichero pueden ser cambiados a mano o también mediante programas de
administración gráficos como Mysql Administrador en las carpetas Service Control y Startup
Variables, y con MySql System Tray Monitor, la opción Configure Instante.
Si abres este fichero con el editor de textos, por favor, no cambies nada si lo haces en el ordenador
del aula.
En este fichero hay varios apartados, de los cuales ahora solo vamos a ver dos. Dejamos para más
adelante los apartados de configuración para tablas MyISAM y para tablas InnoDB.
2.1. Parámetros para la instancia del servidor
# SERVER SECTION
EMPEZANDO_con_MySql_r09v02.doc Página 3 de 17
DAI. DAL4GHC.
# --------------------------------------------------------------------
# The following options will be read by the MySQL Server. Make sure
that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]
# The default character set that will be used when a new schema or
table is created and no character set is defined
default-character-set=latin1
# The default storage engine that will be used when create new tables
when
default-storage-engine=INNODB
Vemos que la instancia ha quedado escuchando peticiones por el puerto TCP/IP 3306, luego todos
los programas clientes que se dirijan a este servidor deben hacerlo por este puerto.
Que el software del servidor y de programas clientes como mysql.exe ha quedado en
basedir="C:/Archivos de programa/MySQL/MySQL Server 5.2/",
EMPEZANDO_con_MySql_r09v02.doc Página 4 de 17
DAI. DAL4GHC.
en cuya carptea ./bin/ será donde buscaremos programas clientes de utilidad como reparadores de
tablas, backups, administradores, etc, todos en línea de comandos (modo texto).
EMPEZANDO_con_MySql_r09v02.doc Página 5 de 17
DAI. DAL4GHC.
Que los ficheros que almacenarán los datos de la/s base/s de datos estarán en
datadir="C:/Archivos de programa/MySQL/MySQL Server 5.2/Data/", directorio que
deberemos proteger para que nadie llegue hasta él y se copie los ficheros de la base de datos. En
esta carpeta hay tantas carpetas como bases de datos estén creadas en el servidor.
EMPEZANDO_con_MySql_r09v02.doc Página 6 de 17
DAI. DAL4GHC.
EMPEZANDO_con_MySql_r09v02.doc Página 7 de 17
DAI. DAL4GHC.
Los datos y los índices de las tablas creadas con ENGINE=INNODB se almacenan en un fichero
llamado ibdata1. Este fichero se denomina TABLESPACE de bases de datos. Junta a él hay otros
dos llamados ib_logfile1 y ib_logfile2 que almacenan/registran las sentencias SQL mediante las
cuales se hacen cambios de objetos o de datos en la base de datos, esta sentencias se denominan
TRANSACCIONES. Sacar dinero del cajero es una transacción económica respecto a mi cuenta
corriente en la bd del banco, pero consultar el saldo de mi cuenta corriente no es una transacción
económica. Crear una tabla, insertar filas, actualizar datos en las columnas de las filas, borrar filas,
son transacciones de bases de datos.
EMPEZANDO_con_MySql_r09v02.doc Página 8 de 17
DAI. DAL4GHC.
Para finalizar, en la carpeta que contiene los ficheros de datos del servidor están los ficheros
nombre.pid que almacena información sobre los procesos que se ejecutan en el Servidor asociados
a las conexiones de usuarios y peticiones de estos, y el fichero nombre.err que contiene el registro
de información generada durante el arranque y parada de la instancia del servidor. A continuación,
aparecen un extracto del contenido de este fichero.
/* Arranque */
090205 19:18:28 InnoDB: Started; log sequence number 0 3048912
090205 19:18:37 [ERROR] Fatal error: Can't open and lock privilege
tables: Table 'mysql.servers' doesn't exist
090205 19:18:37 [Note] C:\Archivos de programa\MySQL\MySQL Server
5.2\bin\mysqld-nt: ready for connections.
Version: '5.2.3-falcon-alpha-community-nt' socket: '' port: 3306
MySQL Community Server (GPL)
090205 19:18:38 [Note] SCHEDULER: Loaded 0 events
/* Parada */
090205 20:26:41 [Note] C:\Archivos de programa\MySQL\MySQL Server
5.2\bin\mysqld-nt: Normal shutdown
EMPEZANDO_con_MySql_r09v02.doc Página 9 de 17
DAI. DAL4GHC.
# --------------------------------------------------------------------
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
#
[client]
port=3306
[mysql]
default-character-set=latin1
En las líneas anteriores especifica que cuando ejecutemos el programa cliente mysql.exe para
conectarnos al servidor utilizará por defecto el puerto TCP/IP 3306 y la codificación de caracteres
que presente en pantalla la hará con el juego latin1.
EMPEZANDO_con_MySql_r09v02.doc Página 10 de 17
DAI. DAL4GHC.
mysql>
mysql>QUIT o EXIT [ENTER] /* PARA DESCONECTAR */
¿Cómo se sabe que usuario soy, es decir, con que nombre de usuario y de ordenador estoy
conectado?
Con la sentencias siguientes, que devuelven la combinación de
usuario@ordenador.
SELECT USER(); o
SELECT CURRENT_USER();
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
Todos los usuarios que aparezcan en la lista se pueden conectar. Pero, ¿qué pueden hacer una vez
conectados?
Este usuario, por el hecho de haber sido creado, ya tiene el permiso de conectarse con el servidor
(permiso de USAGE), pero no puede acceder a ninguna de la bases de datos del servidor.
Para crear un usuario que se pueda conectar desde cualquier ordenador al servidor mysql hay que
usar el comodín % o no poner nada como nombre de servidor. Crear el usuario mariajose con
contraseña pepa para que se pueda conectar desde cualquier ordenador.
create user mariajose@'%' identified by 'pepa';
que también es igual que
create user mariajose identified by 'pepa';
EMPEZANDO_con_MySql_r09v02.doc Página 12 de 17
DAI. DAL4GHC.
4.3. Dar u otorgar permisos a una cuenta
Si una cuenta tiene insuficientes permisos debemos ampliarle los permisos con GRANT ....
Ejemplos:
Crear el usuario paula@localhost con la contraseña 'paula2008' y concedele permisos para que sea
una superadministradora, y que pueda además conceder permisos a otros usuarios.
create user paula@localhost IDENTIFIED BY 'paula2008';
grant all privileges on *.* to paula@localhost with grant option;
with grant option es la cláusula que permite a un usuario que los permisos que le hayan sido
otorgados con ella pueda trasferirlos a un tercero (amigo).
El comando GRANT tiene la particularidad de que si un usuario no existe lo crea, por lo que la
sentencia siguiente hubiese sido suficiente:
grant all privileges on *.* to paula@localhost identified by
'paula2008' with grant option;
Conceder a 'luis'@'depto2' permisos para seleccionar filas en todas las tablas de la base de datos
inventario.
grant select on inventario.* to luis@depto2;
Dar permisos a lola@server1 para que pueda seleccionar filas, insertar filas, modificar columnas y
borrar filas en la tabla proveedores de la base de datos supermercado.
grant select, insert, update, delete on supermercado.proveedores to
lola@server1;
Dar permisos a juan@oficina_ y silvia@oficina_ para que pueda hacer selecciones y
modificaciones en las columnas telefonos, fax, email de la tabla clientes en la base de datos
supermercado.
grant select (telefonos, fax, email), update (telefonos, fax, email)
on supermercado.clientes to juan@'oficina_', silvia@'oficina_';
Dar permisos a conecta1@localhost para que pueda seleccionar todas las tablas de la base de datos
test y solo pueda tener una conexión activa.
grant select on test.* to conecta1@localhost with max_user_connections
1;
Crear un cuenta portalweb@servidor2 con contraseña 'portal' que pueda seleccionar, insertar, borrar
filas y actualizar datos en filas existentes, en las tablas de la base de datos bdWeb con un límite de
consultas de 3600.
grant select, insert, delete, update on bdWeb.* to portalweb@servidor2
identified by 'portal' with max_queries_per_hour 3600;
EMPEZANDO_con_MySql_r09v02.doc Página 13 de 17
DAI. DAL4GHC.
revoke all privileges, grant option on *.* from paula@localhost;
Ejemplos:
Estoy conectado y decido cambiar mi contraseña a 'mercurio'.
SET PASSWORD = PASSWORD('mercurio');
Soy administrador y tengo que cambiar la contraseña de luis@oficina_ a una nueva que será
'20082009'
SET PASSWORD FOR luis@'oficina_' = PASSWORD('20082009');
EMPEZANDO_con_MySql_r09v02.doc Página 14 de 17
DAI. DAL4GHC.
RENAME USER rx21@localhost TO roxana21@localhost
;
update nombreBaseDatos.nombreTabla
set columna = valor
where condicion;
delete nombreBaseDatos.nombreTabla
where condicion;
EMPEZANDO_con_MySql_r09v02.doc Página 15 de 17
DAI. DAL4GHC.
En Mysql es muy interesante saber cual es el motor de base de datos que se utiliza por defecto en el
momento de creación de una tabla. Los motores más comúnmente utilizados son MyIsam y
Innodb.
Como puede verse en el apartado 2.1, la instalación de Mysql que se estudia en este documento ha
quedado configurada para que utilice por defecto la máquina innodb, eso se ve en la entrada
default-storage-engine=INNODB
Diferencias entre los dos motores:
MyIsam: Es más rápido. Utiliza una carpeta para guardar todas las tablas de la base de datos. Cada
tabla tiene tres ficheros asociados. No responde a la cláusualas FOREIGN KEY
REFERENCES de la definición de tablas, por lo que no se aplicará la integridad referencial
que se haya definido en el modelo de base de datos. Además no es transaccional, lo que
implica que no admite empaquetar sentencias sql entre
start transaction
y…
commit o rollback
InnoDB: Es un poco más lento. Utiliza una carpeta para guardar las definiciones de las tablas de la
base de datos, pero los datos y los índices de las tablas los guarda en un fichero común para
todas las tablas de bases de datos creadas con este motor. Responde a las cláusulas
FOREIGN KEY REFERENCES de la definición de tablas, por lo que sí se aplicará la
integridad referencial que se haya definido en el modelo de base de datos. Es transaccional.
Toda sentencia de creación de tabla puede llevar después del cierre de paréntesis de definición de
columnas y constraints la cláusula engine=motor. Si no se indica se utiliza la máquina configurada
por defecto en la instalación de mysql.
Luego una creación de tabla debería tener el siguiente formato:
create table nombreTabla
(columna1 tipo datos
,columna2
, ...
)
engine={myisam|innodb}
EMPEZANDO_con_MySql_r09v02.doc Página 16 de 17
DAI. DAL4GHC.
EMPEZANDO_con_MySql_r09v02.doc Página 17 de 17