Es un sistema robusto que es capaz de emplear algoritmos de almacenamiento y recuperación de información para poder implementar un modelo de datos de manera física garantizando que todas las transacciones que se realizan con respecto a dichos datos sean "ácidas" (Atomicity, Consistency, Isolation, Duration).
Nota: Las partes utilizadas para ejemplificar la arquitectura se refieren a Oracle
Una base de datos en ejecución consta de 3 cosas:
Instancia de una bd en Oracle
Rotación de segmentos de rollback
Rotación de bitácoras de Redo
Ejemplo del esquema de una base de datos en Oracle
Utilización del Shared Pool
Ejemplo del control de transacción
Online Transaction Processing (OLTP): compra/venta, telemarketing
Decision Support Systems (DSS): datawarehouse
Por otro lado un dbms puede ser implantado de 2 formas:
Implantación Cliente-Servidor de un DBMS
Implantación 3 Tier de un DBMS
Finalmente, también se puede considerar la opción de crear clusters de máquinas o discos para poder brindar disponibilidad y escalabilidad. Existen 2 tipos de clusters:
SharedNothing:
ShareNothing Cluster
SharedDisk:
DiskShared Cluster
MySQL (pronunciado mai-es-quiu-el), es una manejador de bases de datos relacional bastante robusto, de código abierto bajo la licencia GPL el cual se ha convertido en el más popular hoy en día.
Su origen se debió a la búsqueda por parte de los fundadores de crear un manejador de bases de datos que fuera "rápido", todavía más rapido que mSQL. Así surgió MySQL, primero como un producto de la empresa y despúes como software de dominio público.
El nombre de My se debe probablemente a que la hija del cofundador Monty Widenius recibía ese sobrenombre, aunque a ciencia cierta nunca se ha revelado el origen. Por otro lado en el año 2002 MySQL tuvo un logo más original que el simple nombre, incluyendo un delfín, el cual a través de una encuesta en la página web recibió su nombre: "Sakila", de origen africano.
Es importante resaltar que no se trata de una herramienta de juguete o aprendizaje, MySQL es un manejador que puede competir competir con sus famosas contrapartes comerciales: Oracle, DB2, Informix, Sybase.
Básicamente los motivos por los cuales se podría optar por usar MySQL en lugar de otro manejador serían:
Es gratis
Es extensible
Es robusto
Es rápido
No requiere de una gran número de recursos para funcionar (obviamente para aplicaciones a gran escala es mejor contar con una buena infraestructura)
Es fácil de administrar
MySQL posee varias versiones 3, 4 y 5 siendo la 3 la más estable y la 5 la más experimental
Los cambios en la versión 4 permiten tener mayor funcionalidad, teniendo por ejemplo queries anidados y búsquedas a texto completo.
MySQL posee 4 tipos de tablas (y en consecuencia de índices):
Index |
Versión |
MyISAM |
Standard, Max |
Heap | Standard, Max |
BerkeleyDB |
Max |
Innodb |
Max |
Tabla 3.1 Indexamiento en MySQL
MyISAM se basa en un indexamiento por bloques, Heap es una tabla que existe solo en memoria, mientras que BDB e InnoDB utilizan B-Trees.
Se puede observar que existen 2 variantes del software, la Standard y la Max; la diferencia radica en el soporte de transacciones que es posible en la versión Max gracias a los módulos de Berkeley DB e InnoDB incorporados en ella.
Es importante resaltar que aunque esta funcionalidad esta disponible no es la configuración por default, salvo que se indique lo contrario, siempre tipo de indexamiento por defecto será MyISAM.
El equipo MySQL recomienda bajar los binarios compilados por ellos para evitar cualquier tipo de problema, de manera que en la sección de "Database Server" se puede bajar el binario de la versión deseada.
Una vez descargado el software se procede a desempaquetarlo (.tgz, zip) o bien ejecutar el .exe correspondiente.
Dichos directorios contenidos en un directorio que por lo general lleva el mismo nombre 'mysql' contiene una estructura de la siguiente manera:
bin: programas ejecutables, mysql, mysqld, mysqldump, myisamchk, mysqlbinlog.
include, lib, libexec: librerías y encabezados para programar en C/C++
mysql-test, sql-bench: pruebas y benchmarks
var ó data: estructura de todas las bases y datos de las tablas tipo MyISAM y Berkeley DB.
man: páginas de manual
share: información en distintos idiomas
support-files: archivos de configuración y scripts de arranque automático
Antes de poder ejecutar el demonio (o guardián) del manejador, es conveniente realizar una configuración, para ello se tiene que editar alguno de los archivos .cnf, los cuales se encuentran ubicados en el directorio raíz de mysql o bien en el directorio support-files. El archivo elegido dependera de la configuración de la máquina (small, medium, large, huge), cada archivo provee información acerca de la memoria apropiada para cada configuración. La tabla 3.2 muestra un ejemplo de configuración para una arquitectura media.
Parte de la tarea de configuración es habilitar el soporte de InnoDB, configurando cada una de las variables de acuerdo a lo propuesto en 3.2, desde luego los aspectos más importantes serán los buffers
#Example mysql config file for medium systems. # # This is for a system with little memory (32M - 64M) where MySQL plays # a important part and systems up to 128M very MySQL is used together with # other programs (like a web server) # # You can copy this file to # /etc/mf.cnf to set global options, # mysql-data-dir/my.cnf to set server-specific options (in this # installation this directory is /centia01/develop/database/mysql/var) or # ~/.my.cnf to set user-specific options. # # One can in this file use all long options that the program supports. # If you want to know which options a program support, run the program # with --help option. # The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /tmp/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock skip-locking set-variable = key_buffer=64M set-variable = max_allowed_packet=256M set-variable = table_cache=64 set-variable = sort_buffer=512K set-variable = net_buffer_length=8K set-variable = myisam_sort_buffer_size=16M set-variable = max_connections=500 set-variable = interactive_timeout=604800 set-variable = wait_timeout=604800 log-bin server-id = 1 set-variable=default_table_type=innodb # Point the following paths to different dedicated disks tmpdir = /var/tmp/ #log-update = /mysql/var/log-catarina # Uncomment the following if you are using BDB tables set-variable = bdb_cache_size=4M set-variable = bdb_max_lock=10000 # Uncomment the following if you are using Innobase tables innodb_data_file_path = ibdata1:30G:autoextend innodb_data_home_dir = /mysql/innodb innodb_log_group_home_dir = /mysql/innodb innodb_log_arch_dir = /mysql/innodb set-variable = innodb_mirrored_log_groups=1 set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=16M innodb_flush_log_at_trx_commit=1 innodb_log_archive=0 set-variable = innodb_buffer_pool_size=256M set-variable = innodb_additional_mem_pool_size=256M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 #set-variable = innodb_force_recovery=3 [mysqldump] quick set-variable = max_allowed_packet=256M [mysql] prompt=(\u) [\d]>\_ no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [isamchk] set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_buffer=2M [myisamchk] set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_buffer=2M [mysqlhotcopy] interactive-timeout |
Tabla 3.2 Archivo de Configuración my.cnf, my.ini
Arranque del manejador
Una vez configurado se puede iniciar el demonio del dbms a través del comando "mysqld" o alguna de sus variantes "safe_mysqld", "mysqld-max"
Esto se puede hacer desde cualquier terminal y se pueden pasar como parametros algunas de las mismas variables disponibles para configuración (en caso de necesitar alguna opción particular)
Terminación del manejador
Se puede hacer de 2 maneras
La tabla 3.3 muestra la manera en que cualquier usuario puede conectarse a la base llamada 'mysql' con el usuario 'root', para ello es indispensable contar con el password correspondiente; como se presentará más adelante la cuenta del super usuario 'root' se administra de manera similar que los demás usuario.
|
Tabla 3.3 Conexión con el dbms
La tabla 3.4 muestra las tablas correspondientes a la base principal y que administra todos los usuarios, máquinas y bases permitidas en el manejador, recordando que se trata de un esquema relacional en el cual por ejemplo los usuarios se encuentran vinculados son bases de datos, de manera que no pueden existir problemas de seguridad al haber algun usuario malintencionado que pretenda modificar una base a la cual no tenga acceso.
|
Tabla 3.4 Tablas de administración del dbms
Para cada tabla se puede emplear el comando 'desc' o 'describe' para analizar la estructura de cada tabla y apreciar la relación que tiene con las demás.
Para dar de un alta un usuario, ejemplo de la tabla 3.5, se debe crear el usuario dentro de la tabla 'user', crear la base de datos y posteriormente asociar dicho usuario con la base en la tabla 'bd', todo lo anterior utilizando instrucciones de SQL tradicionales.
|
Tabla 3.5 Creación de una cuenta de usuario
SQL
MySQL cumple con el estándar SQL92. Es importante resaltar que aunque no implementa todas las funciones que otros manejadores poseen, es posible realizar cualquier consulta usando los distintos tipos de joins o inclusive a través de tablas temporales.
|
Tabla 3.6 Ejemplos de SQL
Creación de índices
La sintáxis de creación de índices no está considerada como un estándar, así que varía en cada dbms, ej.
create index index_name on table_name (atrib_1,..atrib_n);
En el caso partícular de MySQL toda llave primaria está asociada a un índice, así que no se requiere crear un índice adicional para dicho propósito.
Por otro lado si se crea un índice X que contiene a los atributos (a,b,c) ya no es necesario crear un índice para el caso de hacer una consulta que sólo involucre a (a) o (a,b) ya que se empleará el mismo índice X; para saber con certeza qué índices de están empleando en una consulta se puede recurrir a la expresión de 'explain'.
|
Tabla 3.7 Empleo de índices
Mantenimiento y monitoreo de la base
Actividad | Comando |
Revisar el estado de las tablas | show table status; |
Los procesos que están ejecutándose | show processlist; |
Variables con las que se está ejecutando la instancia |
show variables; |
Estado actual de innodb; | show innodb status; |
Respaldos
La manera usual de hacer un respaldo es usando el comando mysqldump, que posee muchas opciones que permiten duplicar todas las base, una base en particular, una tabla, solo los datos, solo la estructura, etc.
Para obtener un respaldo completo de una base
Para restaurar un respaldo completo de una base[digital@pcproal digital]$ mysqldump --opt -u carlos -p prueba > prueba.bak
[digital@pcproal digital]$ mysql -u carlos -p prueba < prueba.bak
Otra manera de hacer respaldos es através del comando "select into" y restaurar los datos con "mysqlimport" o "load data infile".