Está en la página 1de 56

David Alejandro Cant Trevio Juan Jose Loera Prez

Qu es MySQL?
MySQL es un sistema de gestin de bases de datos relacional, multihilo y multiusuario. MySQL fue escrito en C y C++ y destaca por su gran adaptacin a diferentes entornos de desarrollo, permitiendo su interactuacin con los lenguajes de programacin ms utilizados como PHP, Perl y Java y su integracin en distintos sistemas operativos.

El servidor MySQL est diseado para entornos de produccin crticos, con alta carga de trabajo as como para integrarse en software para ser distribuido. MySQL es una marca registrada de MySQL AB.
MySQL es un sistema de gestin de bases de datos

MySQL es un sistema de gestin de bases de datos relacionales

MySQL software es Open Source

MySQL Server trabaja en entornos cliente/servidor o incrustados

MySQL es un sistema de gestin de bases de datos

Una base de datos es una coleccin estructurada de datos. Puede ser cualquier cosa, desde una simple lista de compra a una galera de pintura o las ms vastas cantidades de informacin en una red corporativa. Para aadir, acceder, y procesar los datos almacenados en una base de datos, necesita un sistema de gestin de base de datos como MySQL Server.

MySQL es un sistema de gestin de bases de datos relacionales

Una base de datos relacional almacena datos en tablas separadas en lugar de poner todos los datos en un gran almacn. Esto aade velocidad y flexibilidad.

MySQL software es Open Source.

Open Source significa que es posible para cualquiera usar y modificar el software. Cualquiera puede bajar el software MySQL desde internet y usarlo sin pagar nada. Si lo desea, puede estudiar el cdigo fuente y cambiarlo para adaptarlo a sus necesidades.

MySQL Server trabaja en entornos cliente/servidor o incrustados

El software de bases de datos MySQL es un sistema cliente/servidor que consiste en un servidor SQL multi-threaded que trabaja con diferentes bakends, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfaces de programacin para aplicaciones (APIs).

Arquitectura

Conectores

Los conectores son bibliotecas en diferentes lenguajes de programacin que permiten la conexin (remota o local) con servidores MySQL y la ejecucin de consultas.

Utilidades y herramientas

Las utilidades y herramientas de MySQL son los programas y aplicaciones que se incluyen con la distribucin del gestor, o que pueden instalarse como aplicaciones adicionales. Estas incluyen las herramientas de backup, el navegador de consultas (QueryBrowser), las aplicaciones administrativas de interfaz grfico y la herramienta de diseo MySQL Workbench, entre otras.

Gestor de conexiones

La gestin de conexiones es responsable de mantener las mltiples conexiones de los clientes. El gestor de conexiones de MySQL puede configurarse para limitar el nmero de conexiones concurrentes, y tambin implementa un pool de conexiones.

Procesador de consultas

Cada vez que una consulta llega al gestor de MySQL, se analiza sintcticamente y se produce una representacin intermedia de la misma. A partir de esa representacin, MySQL toma una serie de decisiones, que pueden incluir el determinar el orden de lectura de las tablas, el uso de ciertos ndices, o la re-escritura de la consulta en una forma ms eficiente.

Optimizador de consultas

Existe la posibilidad de utilizar ciertas clusulas en las consultas para ayudar al optimizador en su tarea. El optimizador pregunta al gestor si soporta ciertas caractersticas, y de este modo, puede decidir el tipo de optimizacin ms adecuado.

Cache de consultas

MySQL implementa un cach de consultas, donde guarda consultas y sus resultados enteros. De este modo, el procesador de consultas, antes ni siquiera de plantear la optimizacin, busca la consulta en la cach, para evitarse realizar el trabajo en el caso de que tenga suerte y encuentre la consulta en la cach.

Control de concurrencia

El control de concurrencia en un gestor de bases de datos es simplemente el mecanismo que se utiliza para evitar que lecturas o escrituras simultneas a la misma porcin de datos terminen en inconsistencias o efectos no deseados.

Gestor de transaccin y recuperaciones

La gestin de transacciones permite dotar de semntica todo o nada a una consulta o a un conjunto de consultas que se declaran como una sola transaccin. Es decir, si hay algn problema y parte de la consulta o algunas de las consultas no consiguen llevarse a cabo, el servidor anular el efecto parcial de la parte que ya haya sido ejecutada. La recuperacin permite volver hacia atrs (rollback) partes de una transaccin.

Motor de almacenamiento

El elemento ms notable de la arquitectura de MySQL es la denominada arquitectura de motores de almacenamiento reemplazables. La idea de esa arquitectura es hacer una interfaz abstracta con funciones comunes de gestin de datos en el nivel fsico. De ese modo, el servidor MySQL puede utilizar diferentes motores de almacenamiento para diferentes bases de datos o para diferentes tablas en la misma base de datos.

Los elementos que puede implementar un motor de almacenamiento son los siguientes:
Concurrencia
Es responsabilidad del motor implementar una poltica de bloqueos (o no implementar ninguna).

Soporte de transacciones

No todas las aplicaciones soporte de transacciones.

necesitan

Comprobacin de la integridad referencial

Declarada como restricciones en el DDL de SQL.

Almacenamien to fsico

Incluyendo todos los detalles de la representacin en disco de la informacin. Dado que la forma y tipo de los ndices depende mucho de los detalles del almacenamiento fsico, cada motor de almacenamiento proporciona sus propios mtodos de indexacin. La eficiencia de los cachs de datos en memoria depende mucho de cmo procesan los datos las aplicaciones. Para ayudar al rendimiento, como puede ser el uso de mltiples hilos para operaciones paralelas o mejoras de rendimiento para la insercin masiva.

Soporte de ndices

Cachs de memoria

Otros elementos

Seleccionar el motor de almacenamiento

MySQL soporta varios motores de almacenamiento que tratan con distintos tipos de tabla. Los motores de almacenamiento de MySQL incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen. La seleccin debe hacerse una vez tenemos el modelo lgico de la base de datos y conocemos los requisitos de rendimiento y no funcionales de la aplicacin o aplicaciones que vamos a construir. El comando SHOW ENGINES nos muestra la lista de motores en MySQL, incluyendo el motor por defecto y los que no estn disponibles con la configuracin actual.

Engine
MyISAM MEMORY InnoDB BerkeleyDB

Support
YES YES DEFAULT NO

Comment
Default engine as of MySQL 3.23 with great performance Hash based, stored in memory, useful for temporary tables Supports transactions, row-level locking, and foreign keys Supports transactions and page-level locking

BLACKHOLE
EXAMPLE ARCHIVE CSV ndbcluster

YES
NO YES NO NO

/dev/null storage engine (anything you write to it disappears)


Example storage engine Archive storage engine CSV storage engine Clustered, fault-tolerant, memory-based tables

FEDERATED MRG_MYISA M
ISAM

YES YES
NO

Federated MySQL storage engine Collection of identical MyISAM tables


Obsolete storage engine

De la tabla anterior solo podemos tener nociones iniciales del tipo de gestor, y dirigirnos a alguno de ellos para casos concretos, por ejemplo, ndbcluster tiene caractersticas nicas si necesitamos soporte para alta disponibilidad.

No obstante, hace falta conocer ms en profundidad las caractersticas de cada uno para tomar decisiones, y en ocasiones es necesario hacer pruebas de rendimiento con varios de ellos para compararlos y seleccionar el que mejor se ajusta a nuestras necesidades.

Administracin

MySQL proporciona la opcin mysql help la cual nos muestra las opciones que tiene el programa, algunos de ellos son:
Mysqld: El servidor MySQL. Para usar programas

clientes, este programa debe estar en ejecucin, ya que los programas ganan el acceso a la base de datos conectndose al servidor. mysqld-max : Una versin del servidor que incluye caractersticas adicionales. mysqld_safe: Un script de arranque del servidor. mysqld_safe intenta inicializar mysqld-max si existe, y mysqld en caso contrario. mysqld_multi: Un script de arranque del servidor que puede arrancar o parar varios servidores instalados en el sistema.

Conectarse

al servidor

Los programas cliente de MySQL espera por lo general que el usuario especifique los parmetros de conexin cuando quiere acceder a un servidor MySQL:
El nombre de la mquina donde se est ejecutando el

servidor MySQL El nombre de usuario El password

shell> mysql -h nombre_host -u nombre_usuario p su_clave

Anadir

nuevas cuentas a MySQL:

En primer lugar, se usa el programa mysql para

conectar al servidor como el usuario root :


shell> mysql --user=root mysql

Tras la conexin al servidor como root se pueden

aadir nuevas cuentas:


mysql> GRANT ALL PRIVILEGES ON *.* TO name'@'localhost' -> IDENTIFIED BY 'pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO name'@'%' -> IDENTIFIED BY 'pass' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; mysql> GRANT USAGE ON *.* TO dummy'@'localhost';

Eliminar cuentas de usuario


Para eliminar una cuenta se usa el comando DROP

USER: DROP USER user;


En MySQL 5.0.0 y 5.0.1, DROP USER borra slo

cuentas MySQL que no tienen permisos. Desde MySQL 5.0.2 se puede borrar una cuenta y sus permisos.

Sistema de privilegios
La funcin primaria del sistema de privilegios de MySQL es autenticar un usuario conectndose desde un equipo dado, y asociar dicho usuario con privilegios en una base de datos tales como SELECT, INSERT, UPDATE, y DELETE. Funcionalidad adicional incluye la habilidad de tener usuarios annimos y de dar privilegios para funciones especficas de MySQL tales como LOAD DATA INFILE y operaciones administrativas.

Dependiendo del tipo de usuario se determina que es lo que puede o no hacer el usuario. Valida el nombre del usuario y del equipo para diferenciarlos. El control de acceso de MySQL implica dos etapas:

Etapa 1: El servidor comprueba si debe permitirle

conectarse. Etapa 2: Asumiendo que se conecta, el servidor comprueba cada comando que ejecuta para ver si tiene suficientes permisos para hacerlo.

La informacin sobre los privilegios de las cuentas est almacenada en las tablas user, db, host, tables_priv, columns_priv, y procs_priv de la base de datos mysql.

Si se modifican las tablas grant utilizando GRANT, REVOKE, o SET PASSWORD, el servidor se da cuenta de estos cambios y recarga las tablas grant en la memoria inmediatamente. Si se modifican las tablas grant directamente utilizando sentencias como INSERT, UPDATE o DELETE, los cambios no tendrn efecto en la comprobacin de privilegios hasta que se reinicie el servidor, o bien se le comunique a ste que debe recargar las tablas. Para recargar las tablas manualmente, se ejecuta la sentencia FLUSH PRIVILEGES o los comandos mysqladmin flush-privileges o mysqladmin reload.

Sentencias
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); DELETE FROM somelog WHERE user = 'jcole' UPDATE persondata SET edad=edad+1;

Copias de seguridad de base de datos


Debido a que las tablas de MySQL se almacenan como archivos, es fcil hacer una copia de seguridad. Para hacer una copia consistente se hace un LOCK TABLES en las tablas relevantes, seguido de un FLUSH TABLES para las tablas. La sentencia FLUSH TABLES es necesaria para asegurarse de que todas las pginas de ndice activas se escriben al disco antes de que comience la copia.

Los ficheros de registro (log) de MySQL

MySQL tiene varios archivos de registro diferentes que pueden ayudar a encontrar lo que est ocurriendo en mysqld:
Archivo de registro El registro de error El registro de consultas El registro de actualizaciones The update log El registro binario El registro de lentitud Tipo de informacin registrado en el archivo Registra problemas encontrados iniciando, ejecutando, o parando mysqld. Registra las conexiones de clientes establecidas, y las sentencias ejecutadas. Registra las sentencias que cambian datos. Este registro est ya en desuso. Registra todas las sentencias que cambian datos. Tambin utilizado para replicacin. Registra todas las sentencias que tardarn ms delong_query_time segundos en ejecutarse, o no utilizaron ndices.

Si queremos saber que es lo que esta pasando en MySQL se encuentra el log --log[= host_name.log] o -l [host_name.log]. El cual nos muestra todo las sentencias que se han realizado por parte del usuario.

Seguridad
Cuando se conecta a un servidor MySQL, debera utilizar una clave. La clave no se transmite en texto llano a travs de la conexin. Si la conexin entre el cliente y el servidor pasa a travs de una red no segura, debera utilizar un tnel SSH para cifrar la comunicacin.

Toda la dems informacin se transmite como texto, y puede ser leda por cualquiera que pueda observar la conexin. Si esto es un problema , utilice el protocolo comprimido para hacer que el trfico sea mucho ms difcil de descifrar. Para hacer la conexin an ms segura, debera utilizar SSH para conseguir una conexin TCP/IP cifrada entre el servidor MySQL y el cliente MySQL.

Convertir un sistema MySQL en seguro


Utilice claves para todos los usuarios MySQL. Un programa cliente no conoce necesariamente la identidad de la persona utilizndolo. Si no lo hace, se puede usar mysql -u otro_usuario nombre_bd cuando otro_usuario no tiene clave. Si todos los usuarios tienen una clave, conectarse utilizando la cuenta de otro usuario se vuelve mucho ms difcil.

Para cambiar la clave de un usuario, utilice la sentencia SET PASSWORD. Tambin es posible alterar la tabla user en la base de datos mysql directamente. Por ejemplo, para cambiar la clave de todas las cuentas MySQL que tienen por nombre de usuario root, se hace lo siguente: shell> mysql -u root mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') -> WHERE User='root'; mysql> FLUSH PRIVILEGES;

Nunca ejecute el servidor MySQL con el usuario root de Unix. Esto es extremadamente peligroso porque cualquier usuario con el privilegio FILE es capaz de crar ficheros como root. Para prevenir esto, mysqld rechaza ejecutarse como root a menos que se utilice explcitamente la opcin --user=root. En vez de eso, mysqld puede (y debe) ser ejecutado mediante un usuario normal sin privilegios.

No permita el uso de enlaces simblicos a tablas. (Esto puede desactivarse con la opcin --skip-symbolic-links.) Esto es especialmente importante si ejecuta mysqld como root, porque cualquiera que tenga acceso de escritura al directorio de datos del servidor podra entonces borrar cualquier fichero en el sistema!.

Asegrese de que el nico usuario Unix con permisos de lectura o escritura en los directorios de la base de datos es el usuario que ejecuta mysqld.

Opciones de arranque para mysqld relacionadas con la seguridad


--allow-suspicious-udfs Esta opcin cotrola si las funciones definidas por el usuario que slo tienen un smbolo xxx para la funcin principal se pueden cargar. Por defecto, la opcin est desactivada y slo UDFs que tengan al menos un smbolo auxiliar pueden cargarse. Esto previene intentos de cargar funciones desde ficheros objeto compartidos que no contegan UDFs legtimos. Para MySQL 5.0, esta opcin se aadi en MySQL 5.0.3.

--local-infile[={0|1}] Si arranca el servidor con --localinfile=0, los clientes no pueden usar LOCAL en comandos LOAD DATA .

--old-passwords Fuerza al servidor a generar hashes de contraseas cortos (pre-4.1) para las nuevas contraseas. Esto es til para compatibilidad cuando el servidor debe soportar antiguos programas cliente.

--safe-user-create Si est activada, un usuario no puede crear nuevos usuarios con el comando GRANT a no ser que el usuario tenga el privilegio INSERT para la tabla mysql.user . Si desea que un usuario tenga la habilidad de crear nuevos usuarios con los privilegios que el usuario tiene derecho a otorgar, debe otorgar al usuario el siguiente privilegio: mysql> GRANT INSERT(user) ON mysql.user TO 'nombre_usuario'@'nombre_host'; Esto asegura que el usuario no pueda cambiar ninguna columna de privilegios directamente, pero debe usar el comando GRANT para dar privilegios a otros usuarios.

--secure-auth Desactiva autenticacin para cuentas que usen antiguas contraseas (pre-4.1)

--skip-grant-tables Esta opcin hace que el servidor no use el sistema de privilegios en absoluto. Esto da a todo el mundo acceso total a todas las bases de datos! (Puede decirle a un servidor en ejecucin que arranque usando las tablas de permisos de nuevo usando mysqladmin flush-privileges o el comando mysqladmin reload, o mediante el comando FLUSH PRIVILEGES.)

--skip-name-resolve Los nombres de equipo no se resuelven. Todo valor en la columna Host en la tabla de permisos deben ser nmeros IP o localhost.

--skip-networking No permite conexiones TCP/IP a travs de la red. Todas las conexiones a mysqld se realizan mediante ficheros socket de Unix.

--skip-show-database Con esta opcin, el comando SHOW DATABASES se permite slo a usuarios que tengan el privilegio SHOW DATABASES , y el comando muestra todos los nombres de bases de datos. Sin esta opcin , SHOW DATABASES est permitido a todos los usuarios, pero muestra cada nombre de base de datos slo si el usuario tiene el privilegio SHOW DATABASES o algn privilegio para la base de datos.

Versiones de mySql

Ventajas

MySQL software es Open Source Velocidad al realizar las operaciones, lo que le hace uno de los gestores con mejor rendimiento. Bajo costo en requerimientos para la elaboracin de bases de datos, ya que debido a su bajo consumo puede ser ejecutado en una mquina con escasos recursos sin ningn problema. Facilidad de configuracin e instalacin. Soporta gran variedad de Sistemas Operativos Baja probabilidad de corromper datos, incluso si los errores no se producen en el propio gestor, sino en el sistema en el que est. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet El software MySQL usa la licencia GPL

Desventajas
Un gran porcentaje de las utilidades de MySQL no estn documentadas. No es intuitivo, como otros programas (ACCESS).

Informacin general
Creador Fecha de la primera versin pblica ltima versin Licencia de estable software Adaptive Server Anywhere Adaptive Server Enterprise DB2 Informix InterBase SapDB Microsoft SQL Server MySQL Oracle

Sybase/iAnywhere
Sybase Inc IBM Informix Software Borland SAP AG Microsoft MySQL AB Oracle Corporation

1992
1987 1982 1985 1985 ? 1989 Noviembre de 1996 1977

10.0
15.0 9 10.0 7.5.1 7.4 2008 5.0 11g Release 2

Propietario
Propietario Propietario Propietario Propietario GPL con drivers LGPL Propietario GPL o propietario Propietario

PostgreSQL

PostgreSQL Global Junio de 1989 Development Group

9.0

Licencia BSD

Soporte del sistema operativo


Windows Mac OS X Adaptive Server Enterprise ANTs Data Server DB2 Informix InterBase SapDB Microsoft SQL Server MySQL Oracle S S S S S S S S S S S S S No No No S S Linux S S S S S S No S S BSD S S S S No No No S S Unix S S S S z/OS No ? S No No ? No Desconocido S

S (Solaris)
S No S S

PostgreSQL

No