INICIO | 3D/ANIMACION
Tecnología: Servidores: BDD
Enlaces de interés:

http://www.mysql.com
http://www.oracle.com
SQL Server Home
http://www.tamino.com

La bases de datos (BBDD) de las cuales vamos a hablar, las tres primeras; MySQL, ORACLE y SQLServer, son BBDD relacionales mientras que Tamino es una BDD que almacena los datos en XML nativo. Es una BDD un poco peculiar que merece un capitulo aparte.

A continuación vamos a hablar un poco de MySQL.
MySQL es un servidor de base de datos SQL multithread, multiusuario y robusta.
MySQL es software libre, es decir, gratis. Su licencia está bajo la GNU Licencia General Pública (http://www.gnu.org)
Aquí vamos a explicar la instalación estandar de MySQL sobre Linux, concretamente sobre RedHat 7.1. Lo ideal es que la instales al instalar RedHat. Elijes instalación personalizada y seleccionas "Elegir paquetes individuales" y después seleccionas la BDD MySQL. Si no es así, puedes bajarte aquí mismo el manual de MySQL obtenido de la página oficial de MySQL.
La versión que vamos a instalar es la 3.23, pero primero hay que instalar el cliente debido a las dependencias que existen entre los paquetes de mysql: el fichero es mysqlclient9-3.23.22-4.i386.rpm que es el paquete con los binarios ya compilados con las opciones más "típicas".
A continuación MySQL-shared-3.23.42-1.i386.rpm que contiene la librería dinámica libmysqlclient.so.10.
Luego mysql-3.23.36-1.i386.rpm.
Y por fin el servidor: mysql-server-3.23.36-1.i386.rpm.
En principio, esto nos vale para empezar a conocer esta BDD. Más adelante, cuando seamos usuarios avanzados podremos bajarnos los fuentes y compilarlos "a medida".
Para instalar los paquetes necesarios de MySQL no hay más que hacer lo de siempre: rpm -i Nombre_del_pkt.rpm. Automáticamente se instalará MySQL y se arrancará el demonio. Para comprobar que se ha instalado correctamente, como root utilizo el comando ntsysv y veremos la línea correspondiente al arranque automático de la BDD que podremos activar o desactivar desde esta misma herramienta. Por tanto, para que la siguiente vez que arranquemos la máquina se arranque MySQL, como root
El servidor MySQL se instala en /var/lib/mysql.
En /usr/bin están los ejecutables de MySQL.
En /usr/sbin está el archivo mysqld que ejecuta el demonio de la BDD.
ntsysv y marcamos la opción mysqld.
Ahora hay que realizar una serie de operaciones necesarias para el correcto funcionamiento de la BDD:
- En /usr/bin, ejecutar: mysql_install_db. Esto instala una serie de tablas de permisos que necesita mysql.
- Ejecutar safe_mysqld --user=mysql &. Esto arrancará la base de datos. Esta manera de arrancarse es la recomendada por el fabricante.
Lo primero es establecer una contraseña para el usuario root de la BDD: /usr/bin/mysqladmin -u root -h nombre_host -p password 'clave'. Si recibe un error, entonces será mejor cambiarla a mano:

Paramos la BDD: mysqladmin shutdown
La arrancamos sin permisos: safe_mysqld --user=mysql --skip-grant-tables &
Ejecutamos mysql -u root mysql
Estaremos en mysql>. Ejecutamos: update user set password=PASSWORD('clave') where User='root';
Paramos la BDD: mysqladmin shutdown
La arrancamos en modo normal: safe_mysqld --user=mysql &

¡¡Cuidado!! Las instalaciones por defecto vienen con un usuario anónimo que, por seguridad, conviene eliminarlo. Está creado, como no, en la tabla user en el tablespace mysql. Simplemente entrando al mysql como root (mysql -u root) y haciendo: DELETE FROM user where user = ''; es suficiente.

Y ahora vamos a empezar a trabajar de verdad con la BDD:
Nos conectamos a la BDD: mysql -h nombre_host -u root -p. Nos pide la contraseña. Ponemos la que pusimos antes en el UPDATE.
Nos tiene que salir un mesaje como:

		"Welcome to the MySQL monitor.  Commands end with ; or \g.
		Your MySQL connection id is 4 to server version: 3.23.36
		Type 'help;' or '\h' for help. Type '\c' to clear the buffer"
		
Usamos ahora el comando SHOW para ver que bases de datos existen en el servidor:
		mysql> SHOW DATABASES;
		+----------+
		| Database |
		+----------+
		| mysql    |
		| test     |
		+----------+
		
La base de datos mysql es requerida porque describe los privilegios de acceso de los usuarios. La base de datos test viene incluida como espacio de trabajo (workspace) para que los usuarios realicen pruebas.
Intentamos acceder a test:
		mysql> USE test
		Database changed
		
Con esto hemos visto como cambiar de base de datos. Pero ahora, vamos a crearnos una base de datos para poder empezar a crear nuestras tablas en el sitio apropiado.
Creamos una base de datos:
		mysql> CREATE DATABASE prueba;
		Query OK, 1 row affected (0.00 sec)
		mysql> USE prueba
		Database changed
		
La siguiente vez que nos conectemos a mysql tendremos que especificar la base de datos a la que queremos conectarnos:
		shell> mysql -h nombre_host -u root -p prueba
		Enter password: ********
		
Comprobamos que no tenemos tablas en prueba:
		mysql> SHOW TABLES;
		Empty set (0.00 sec)
		
Vamos a crear ahora nuestra primera tabla para poder empezar a realizar pruebas:
		mysql> CREATE TABLE tabla_1 (nombre VARCHAR(20), apellidos VARCHAR(40),
		    -> email VARCHAR(20), fecha_alta DATE, fecha_baja DATE);
		
Si utilizamos el comando SHOW tables, podremos ver que la tabla se ha creado. Además, para ver cómo es (que campos tiene)
		DESCRIBE tabla_1;
		+------------+-------------+------+-----+---------+-------+
		| Field      | Type        | Null | Key | Default | Extra |
		+------------+-------------+------+-----+---------+-------+
		| nombre     | varchar(20) | YES  |     | NULL    |       |
		| apellidos  | varchar(40) | YES  |     | NULL    |       |
		| email      | varchar(20) | YES  |     | NULL    |       |
		| fecha_alta | date        | YES  |     | NULL    |       |
		| fecha_baja | date        | YES  |     | NULL    |       |
		+------------+-------------+------+-----+---------+-------+
		5 rows in set (0.02 sec)
		
Como la tabla está vacía existe la opción de cargar datos iniciales desde un fichero de texto, con los valores de los campos separados por tabulador. Pero aquí solo vamos a explicar como introducir una primera línea o registro con el comando SQL: INSERT.
		mysql> INSERT INTO tabla_1
    			-> VALUES ('Pepito','Gómez García','soporte@almik.com','2001-09-30',NULL);
    		
Para comprobar que se ha insertado correctamente:
    		mysql> select * from tabla_1;
		+--------+--------------+-------------------+------------+------------+
		| nombre | apellidos    | email             | fecha_alta | fecha_baja |
		+--------+--------------+-------------------+------------+------------+
		| Pepito | Gómez García | soporte@almik.com | 2001-09-30 | NULL       |
		+--------+--------------+-------------------+------------+------------+
		1 row in set (0.02 sec)
		
¡¡Ya tenemos nuestra BDD funcionando!!
¿Y ahora qué? Nosotros proponemos utilizar PHP para desarrollar una pequeña aplicación que nos permita, a través de un formulario HTML, realizar operaciones de inserción, borrado y actualización de las tablas de la BDD.

Trucos/ideas:
  • Crear un usuario para una base de datos: Esto es lo más normal y lo mejor por temas de seguridad. Que cada base de datos tenga sus propios usuarios. El comando sería:
    		GRANT ALL PRIVILEGES
    ON base_de_datos.*
    TO usuario@localhost
    IDENTIFIED BY 'contraseña';
    Esto crearía un usuario llamado "usuario" con acceso a todo en la base de datos "base_de_datos" solo desde localhost y con la contraseña especificada.
    Nota: Conviene, para no tener problemas que también se le asignen permisos al usuario si se conecta desde la propia máquina. Es decir,
    		GRANT ALL PRIVILEGES
    ON base_de_datos.*
    TO usuario@nombre_maquina
    IDENTIFIED BY 'contraseña';
  • Conectarte a mysql como un usuario determinado: "mysql -u usuario -p base_de_datos"
  • Ejecutar un fichero SQL: Esto evita engorros como el crearse una tabla a mano (como en el ejmplo de arriba). Desde línea de comandos, como mysql: "mysql -u usuario_con_permisos -p base_de_datos < nombre_fichero"
  • Importar datos a una tabla desde un fichero: Lo primero que necesito es un fichero con los datos a meter en la tabla separados por tabuladores. Cada columna, aún si es nula debe ser "escrita", es decir, si quiero que una columna sea nula, simplemente pongo dos tabuladores sequidos en la posición de la columna.
    Y ahora, como usuario mysql, "mysqlimport -u usuario -p base_de_datos --local fichero_separado_por_tabulador_nombre_tabla"
    Nota: Es importante el --local o no sabrá desde donde te estás conectando y te dará un error de permisos.
    Nota: El fichero debe llamarse igual que la tabla a llenar y luego punto lo que se quiera. Ej: nombre_tabla.Datos_de_prueba