Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• MySQL Overview
• Certificaciones MySQL
• ¿Porqué Oracle?
• MySQL completa la oferta de Productos de Oracle.
• Características Generales
• Sistema Gestor de Base de Datos Relacional
• La base de datos número uno para aplicaciones basados en internet, impulsando sitios
web líderes en todo el mundo, incluyendo Facebook, Twitter y YouTube.
Productos MySQL
• Características:
Escalabilidad de MySQL
Securización, Auditoria, Integración con otros productos Oracle
Posibilidad de monitorización y Análisis de Consultas SQL
Backup y Herramientas gráficas
Productos MySQL: Conectores y API’s
Conectores
– Proporcionan conectividad del Servidor MySQL con las aplicaciones externas
API’s
– Proporcionan acceso a bajo nivel para los protocolos y recursos de MySQL.
• Si queremos conocer todos los Sistemas Soportados por MySQL podemos consultarlos
en el siguiente enlace
http://www.mysql.com/support/supportedplatforms/database.html
Certificaciones MySQL
NOTA:
Las bases de datos world_innodb y Sakila se utilizan para hacer demostraciones y prácticas en este curso.
02.- Arquitectura
CLIENTE Descripción
mysql Emitir consultas y ver los resultados.
CLIENTE Descripción
innochecksum Comprobación de ficheros de tablas Innodb Offline
• Capa de SQL:
Procesos de consultas SQL que se envían por aplicaciones conectadas
• Capa de almacenamiento:
Maneja el almacenamiento de datos. Los datos pueden ser almacenados en diferentes formatos y estructuras
en diferentes medios físicos.
Procesos del Servidor: Connection Layer
• La capa de conexión acepta conexiones de aplicaciones mediante el uso
de varios protocolos de comunicación diferentes:
TCP / IP Soporta conexión de Red y Locales
Sockets UNIX Sólo soporta CX Locales
Shared memory Sólo soporta CX Locales
Named Pipes Sólo soporta CX Locales
• TCP/IP
• TCP/IP es el conjunto de protocolos de comunicación utilizados para conectar hosts en Internet y locales.
• Este es el mejor tipo de conexión MySQL para Windows, pero se puede utilizar para todos los sistemas operativos
compatibles.
• Unix Sockets
• Este protocolo permite que los procesos en la misma máquina para comunicarse unos con otros.
• Se basa en un archivo físico (socket), el cual es utilizado para acceder a un conjunto de funciones especiales.
• Shared Memory
• Esta es una manera eficiente de pasar los datos entre los procesos que se ejecutan en la misma máquina Windows
• Named Pipes
• Este protocolo, permite un proceso a utilizar una región de memoria para pasar información a otro proceso, en la
misma o diferente máquina
Procesos del Servidor: SQL Layer
• Una vez establecida una conexión, los siguientes procesos son
manejados por el servidor MySQL:
• Optimizador
Crea el plan de ejecución para cada consulta. Determina la mejor forma de ejecutar la consulta
• Query execution
Cumple con el plan de ejecución para cada consulta
• Query cache
Es opcional y puede ser utilizado para guardar en caché
las consultas ejecutadas y sus resultados
• Query logging
Opcional, se puede activar para realizar un seguimiento
de las consultas ejecutadas.
Procesos del Servidor: SQL Layer
• Ejecución de un sentencia SELECT
Procesos del Servidor: Storage Layer
• Los datos pueden almacenarse en el disco, en la memoria, y en los
lugares de la red.
• Disco
InnoDB
MyISAM
• Memoria
Memory
• Network
NDB
Motores de almacenamiento: Visión global
• NDB: Es usado por MySQL Cluster para proporcionar topología escalable redundante para datos de
alta disponibilidad
Motores de almacenamiento: Visión global
• Cada tabla de una base de datos puede utilizar cualquiera de los motores
de almacenamiento disponibles.
• Capacidades transaccionales:
Algunos motores de almacenamiento soporte transaccional ACID , mientras que otros no tienen soporte
transaccional.
• Tipos de Bloqueo:
Motores de almacenamiento pueden utilizar diferente granularidad de bloqueo (tales como bloqueos a nivel de
tabla, Nivel de Fila) y los mecanismos de para proporcionar coherencia con transacciones concurrentes.
• Optimización:
Diferentes implementaciones de indexación afectan a las optimizaciones.
• Características especiales:
Hay una serie de características que existen sólo en ciertos tipos de motores para incluir la búsqueda de texto
completo, integridad referencial, y la capacidad de manejar datos espaciales..
Uso del Disco con MySQL
• Directorio de Datos
Global para todo el Gestor
Directorio de Datos
• Server Log Files y Status files
Contiene los archivos de registro del servidor y los archivos de estado
Son utilizados para la resolución de problemas, el seguimiento, la replicación y
recuperación.
Triggers
Objetos de base con nombre que se asocian con
una tabla y se activan cuando se produce un evento
en particular para la mesa
• MySQL reserva memoria para atender a los clientes y dar soporte a las
estructuras de Bases de Datos y Gestor.
• Nada mas iniciar el Gestor y sin ninguna modificación adicional, solo hay
disponibles 2 cuentas de usuario:
• La cuenta de root -u root
• Una cuenta anónima
Utilización de Scripts con MySQL
NOTAS:
• El archivo debe encontrarse en el equipo cliente donde se está ejecutando el cliente
mysql.
• Un archivo script puede contener comandos SOURCE para ejecutar otros archivos.
03.- Administración del sistema
• Source:
No se garantiza que sea consistente con las actualizaciones de código comercial, ni incluyen soporte para
Oracle
Instalaciones
http://dev.mysql.com/doc/mysql/en/installing.html
Descargas
http://dev.mysql.com/downloads/mysql/.
Distribuciones Binarias
Ventajas
• Creado por el personal propio de MySQL.
• Dispone de mejoras de configuración para mejorar el rendimiento.
• Compiladores comerciales de alta calidad.
• Disponen de amplias bibliotecas.
• Incluyen correcciones de errores, parches y funcionalidades de terceros.
LINUX: WINDOWS:
RPM: Estos archivos se instalan mediante el programa Complete: Contiene todos los archivos de una instalación de
rpm, o mediante el uso de un gestor de paquetes MySQL, así como el asistente de configuración
como yum.
No-Install: Archivo .zip para el que no se utiliza ningún asistente
TAR: Para instalarlo, descomprimirlo utilizando el de instalación o configuración.
programa .tar en el directorio de instalación. Sólo tiene que descomprimirlo y moverlo a la ubicación de
instalación deseado
Distribuciones Source/Codigo
• Necesita habilitar una característica única que aparece sólo en Código fuente
(soporte de depuración completa).
Manual: http://dev.mysql.com/doc/mysql/en/source-installation.html.
Instalación de MySql
– Arranque y parada.
http://dev.mysql.com/doc/refman/5.6/en/installing.html.
Instalar MySQL Server
Community: http://dev.mysql.com/downloads
http://dev.mysql.com/downloads/windows/installer/5.6.html
Enterprise: https://edelivery.oracle.com/
Instalación en WINDOWS
• REQUISITOS
Instalación en WINDOWS.
Pasos
1. Lanzar el asistente de configuración
FINAL De LA Instalación
Estructura de archivos en Windows
Estructura de archivos en Windows
Instalación en WINDOWS
Fichero de Inicialización. my.ini
• Arranque Manual
Comando mysqld desde línea de comando con las opciones necesarias
• Servicio
Instalando el servicio MySQLServer56
C:\> mysqld –install <opciones>
• Detención de MySQL
• También podemos:
c:\> net start MySQL y net stop MySQL
DATA DIRECTORY: General
• Implicaciones:
• Los nombres de : Bases de Datos, Tablas y Triggers, pueden ser CASE-SENSITIVE
Depende del sistema Operativo ( la mayoría de los sistemas Linux)
Instalar el servidor MySQL: Linux
• Específicas
Destinado a una plataforma Linux Determinada.
Instalar el servidor MySQL: Linux
Instalar el servidor MySQL: Linux
PASOS
Ejecutar el script mysql_install_db, que crea el sistema de Base de Datos y el fichero my.cnf , configura una
contraseña aleatoria para la cuenta root, y guarda la contraseña en el directorio home del usuario de
instalación en un archivo llamado .mysql_secret
3. Ejecutar el Servidor
/etc/init.d/mysql start
http://dev.mysql.com/doc/refman/5.6/en/linux-installation-yum-repo.html
Estructura de archivos en Linux
mysql.server
– Se utiliza como un wrapper del comando mysqld_safe para sistemas como Linux y Oracle Solaris que
usan directorios de nivel de ejecución de System V
mysqld_safe
– Configura el registro de errores y luego lanza mysqld y lo supervisa.
– Si mysqld termina de forma anormal, mysqld_safe lo reinicia.
– Si el servidor no se inicia correctamente, busque en el registro de errores.
mysqld_multi Script en Perl que está destinada a la gestión de múltiples servidores en un host
Iniciar el servidor MySQL: Linux
Stop del servidor MySQL: Linux
• Los archivos de opciones son TEXTO plano que pueden ser creados
mediante un simple editor de texto.
Ficheros de configuración del servidor MySQL
[ Client ]
Opciones para todos los programas cliente.
Un uso común para especificar los parámetros de
conexión
[ mysql ] [ mysqldump ]
Opciones para los clientes MySQL determinados.
[ Server ]
Se utiliza para especificar las opciones que se aplican
tanto a los programas de servidor mysqld y mysqld_safe.
• Opciones Largas
Una palabra precedida de dos guiones medios
• Opción Corta
una sola letra precedida de un único guión medio
• Por ejemplo:
- - versión es equivalente a –V (versión)
Online
Mediante opciones añadidas al comando cuando lo invocamos
Fichero
Introduciendo las opciones en el fichero de configuración sin necesidad de incorpóralas en la
llamada del comando
Localización de los Archivos de opciones
• Los Programas de MySQL (cliente y servidor) pueden acceder a uno o varios ficheros
de opciones.
• Hay una serie de ficheros definidos donde se pueden obtener estas opciones.
• Windows
En Windows, los programas MySQL busca ficheros de opciones en el orden siguiente:
C: \Program Files\MySQL\MySQL Server <version>
C:\my.ini y C:\my.cnf
• Unix
En UNIX, los programas MySQL leen los archivos siguientes en orden:
Storage Engine
Puede especificar un motor de almacenamiento por defecto
diferente de InnoDB con la opción
default-storage-engine
Connection
Opciones de conexión con el servidor
user port password
System Variable
Personalizar tu servidor estableciendo valores de las variables
del sistema del servidor
max_connections = 200 innodb_buffer_pool_instances = 4
Shared Memory
Activar la memoria compartida usando la opción
shared-memory
Opciones disponibles
• Podemos hacer que un cliente lea un fichero determinado sin que sean
los ficheros definidos anteriormente.
- -defaults-file Especifica un archivo de opciones para usar en lugar de los archivos estándar
--defaults-extra-file Especifica un archivo de opciones a utilizar, además de los archivos estándar
--no-defaults option Se ignoran todos los archivos de opciones
Visualizando opciones de los Ficheros
• Puede ver qué opciones son utilizados por programas que leen los
grupos/secciones de los ficheros de configuración podemos utilizar la
utilidad my_print_defaults.
• El archivo puede ser leído por los programas cliente MySQL para obtener
credenciales de autenticación para conectarse al servidor MySQL.
Ruta de Acceso Conjunto de valores que indican la máquina del servidor y las
credenciales para autenticarse con el servidor.
• Eliminar un LOGIN-PATH
Variables dinámicas de servidor
• Estas variables:
• Tienen un valor predeterminado en el inicio del Servidor.
• Podemos mostrar los valores actuales mediante el comando SHOW GLOBAL variables
Variables dinámicas de servidor
• MySQL mantiene dos ámbitos que contienen las variables del sistema.
• GLOBALES
Las variables globales afectan al funcionamiento general del servidor.
• SESION
Las variables de sesión afectan las operaciones para conexiones individuales de los clientes.
• SESION
timestamp, error_count
• AMBAS
sort_buffer_size, max_join_size
Variables dinámicas de servidor
NOTAS
– Cambiar una variable de Sesión no requiere ningún tipo de privilegio.
– LOCAL y @@local son sinónimos de SESSION y @@session
– Si no se especifica GLOBAL o SESSION, se cambia variable SESION si existe sino Error.
Variables dinámicas de servidor
Server Status Variable
GLOBAL
– Es aplicada a todos lo clientes actuales o que posteriormente se conecten.
– Para poder modificarlo, necesitamos privilegios de SUPER
SESSION
– Si ejecutamos la orden SET SQL_MODE=‘valor’ ésta afecta sólo a la sesión actual.
– Cualquier cliente puede cambiar su propio valor sesión sql_mode en cualquier momento.
• Por ejemplo
Si se escribe un valor negativo en una columna UNSIGNED, MySQL lo convierte
en cero, que es el valor legal más cercano para el tipo de datos de la columna.
STRICT_TRANS_TABLES Activa el modo restrictivo para todos los motores, aborta las
operaciones y realiza un Rollback si datos no correctos
• Modos sintaxis
Algunos modos permiten cambiar la interpretación de la Sintaxis de las órdenes
• Este modo controla qué sucede cuando una sentencia como CREATE
TABLE o ALTER TABLE especifica un motor de almacenamiento que
está deshabilitado o no disponible.
• ACTIVO:
Cuando se activa, se produce un error y el comando CREATE TABLE o ALTER TABLE falla
• No ACTIVO
CREATE TABLE
– Se utiliza el motor por defecto para crear la tabla y se muestra una Advertencia ( WARNING).
ALTER TABLE
– Se produce un WARNING y la Tabla no se modifica.
Archivos de registro Logs
• También contiene los errores graves que se producen mientras el servidor está en
ejecución.
General Query Log • Contiene información general de lo que está haciendo mysqld.
• El registro de consultas general puede ser muy útil cuando se sospecha que un error
en un cliente y desea saber exactamente lo que el cliente envía a mysqld
Slow query Log • Contiene información acerca de las consultas SQL que han tardado mas de
long_query_time segundos en ser ejecutadas.
Puede habilitar estos archivos de registro al iniciar el servidor con las opciones correspondientes
(en la línea de comandos o en un fichero de opciones sin guiones ).
Registro Binario (Binary Log)
Replicación de Sistema.
– Permite almacenar todos los cambios de datos de un maestro y replicarlo en los esclavos
Registro Binario (Binary Log)
• Mixto
Una mezcla de ambos, dependiendo del cambio, así se realiza la inscripción en el Binary Log.
Dependiendo de ciertas declaraciones, y del motor de almacenamiento, el registro se cambia
automáticamente.
• Valores Soportados:
STATEMENT Consultas SQL
ROW Filas
MIXED Mixto
• Los fichero Binary Logs son ficheros binarios, por lo que no pueden
ser visualizados con los visores normales.
• Cliente mysql
Opciones con conexión
Opciones de Identificación
Opciones Especiales
• GUI
MySQL Workbench
MySQL Enterprise Monitor
• Web
PhpMyAdmin
Cliente mysql
• Online
Mediante opciones añadidas al comando cuando lo invocamos
• Opciones Largas
Una palabra precedida de dos guiones medios
• Opción Corta
una sola letra precedida de un único guión medio
• Por ejemplo:
- - versión es equivalente a –V (version)
• Esta opción le dice al cliente que el protocolo de comunicación a utilizar para conectarse al servidor.
• Sino se indica esta opción se determina el protocolo en función del host y del S.O.
En Linux socket UNIX
Cliente mysql: Conexión
• Las opciones host y port especifican la dirección y el puerto TCP del servidor.
• Host
Esta opción especifica la ubicación de la instancia del servidor MySQL.
El valor puede ser un nombre de host o una dirección IP.
El valor de host predeterminado es localhost
En Windows el valor ( . ) indica una conexión named-pipe.
• Port
Esta opción indica el número de puerto al que conectarse en el equipo servidor.
Sólo se aplica a las conexiones TCP / IP.
El número predeterminado de puerto MySQL es 3306.
Cliente mysql: Conexión
• Las siguientes opciones se utilizan en lugar de las opciones de TCP/IP, habitualmente utilizadas en
conexión Unix / Linux
• Socket o -S
En UNIX, para una conexión a localhost, un cliente se conecta al servidor mediante el uso de un archivo de
socket UNIX.
En UNIX, el valor por defecto es /tmp/mysql.sock.
En Windows, la opción --socket se utiliza para especificar una conexión named pipe
• Shared-memory-base-name
Activa conexiones mediante shared-memory con clientes locales.
Esta opción sólo está disponible en Windows.
Cliente mysql: Conexión
• Compress o -C
La compresión reduce la sobrecarga de la red entre el cliente y el servidor.
Cuando activamos esta opción, todo el tráfico entre un cliente y un servidor se comprime.
• El nombre de usuario y contraseña pertenecen a la cuenta que se utiliza para crear la nueva
conexión con el servidor, y que aplique todos los permisos y privilegios a esa conexión.
• Cada entrada en la tabla mysql.user especifica tanto el nombre de usuario y un nombre de host del
cliente.
Cliente mysql: Autenticación
• user o -u
Con esta opción indicamos el usuario que debe de estar dado de alta en la tabla mysql.users.
Con la opción –u podemos indicar el usuario separado por un espacio o todo junto
-u root
-uroot
• password o -p
Con esta opción indicamos la clave que está asociada al usuario anterior
Sino indicamos esta opción, entenderemos que dicho usuario no tiene clave asociada.
Podemos indicar sólo la opción –p para que el cliente mysql no pida la clave sin ser vista.
Debido al comportamiento especial de esta opción, no se puede poner un espacio después -p cuando
se proporciona una contraseña en la línea de comandos.
Cliente mysql: Especiales
• Opciones Especiales
• Cuando se está realizado desarrollos, es posible emitir inadvertidamente declaraciones que
modifican muchas filas en una tabla o que devuelven grandes conjuntos de resultados.
• La opción --safe-updates ayuda a prevenir estos problemas y tiene los siguientes efectos cuando la
utilizamos:
UPDATE y DELETE pueden ejecutar sólo si incluyen una cláusula WHERE o una cláusula LIMIT.
Las salida de las clausulas SELECT se limita a no más de 1.000 filas a menos que la declaración incluye una
cláusula LIMIT.
Consultas SELECT sobre múltiples tablas solo se permiten si MySQL examina no más de 1.000.000 filas para
procesar la consulta.
Archivos de opciones para clientes
• grupo [client]
Usado para especificar los parámetros de conexión de clientes en la misma máquina
Esto es usado para evitar escribir las opciones de línea que los clientes LOCALES.
Esto ahorra tiempo y errores
• grupo [server]
Usado para especificar los parámetros utilizados por defecto en el arranque del servidor.
Archivos de opciones para clientes
• Los Programas de MySQL (cliente y servidor) pueden acceder a uno o varios ficheros
de opciones.
• Hay una serie de ficheros definidos donde se pueden obtener estas opciones.
• Windows
En Windows, los programas MySQL busca ficheros de opciones en el orden siguiente:
C: \Program Files\MySQL\MySQL Server <version>
C:\my.ini y C:\my.cnf
• Unix
En UNIX, los programas MySQL leen los archivos siguientes en orden:
• Podemos hacer que un cliente lea un fichero determinado sin que sean
los ficheros definidos anteriormente.
- -defaults-file Especifica un archivo de opciones para usar en lugar de los archivos estándar
--defaults-extra-file Especifica un archivo de opciones a utilizar, además de los archivos estándar
--no-defaults option Se ignoran todos los archivos de opciones
Visualizar salidas especiales
• Por defecto, MySQL genera una salida en uno de los dos formatos,
dependiendo de si se utiliza en modo interactivo o Batch:
• INTERACTIVO
Cuando se invoca de forma interactiva, la salida de mysql salida es
en formato TABULAR líneas, columnas, etc
• BATCH
Cuando mysql se invoca con un archivo de entrada en línea de comandos, se ejecuta en
modo batch con salida de la consulta se visualiza en los caracteres de tabulación entre los
valores de los datos.
Salidas especiales: Batch / Interactivo
• Son utilizadas por los usuarios, a todos los niveles, usuarios básicos,
desarrolladores, administradores, etc.
Características de Workbench GUI
• MySQL Workbench ,es una herramienta GUI que puede ser utilizada por
usuarios de diferentes ámbitos:
Arquitectos de bases de datos
Desarrolladores
Administradores de bases administrar el servidor MySQL
Usuarios básicos.
• Modificar:
Datos
Modelos de bases de datos
De código abierto GPL (licencia pública general), disponible gratuitamente desde el sitio web de MySQL
Herramienta de Pago
Características de Workbench GUI
FUNCIONALIDADES
• MySQL Workbech GIU (SSO) tiene 5 funcionalidades básicas:
DESARROLLO DE SQL
Editar y ejecutar consultas y scripts SQL.
Crear o modificar objetos de base.
Editar datos de la tabla.
MODELADO DE DATOS
Modelo Entidad-Relación Ampliado
Diseñar, generar y gestionar bases de datos.
FUNCIONALIDADES
• MySQL Workbech GIU (SSO) tiene 3 funcionalidades básicas:
ACCESO A MYSQL
Herramientas como python, perl para trabajar con MySQL Server.
MySQL Workbench proporciona una shell para trabajar con estas herramientas.
Funcionalidades de Workbench GUI
SQL DEVELOPMENT
SQL Editor
Componer y ejecutar sentencias
SQL
Query Result
Aparecer en las pestañas en la
parte inferior del panel del editor
por defecto.
Object Browser
Información acerca de las tablas,
columnas, etc
Output
Mensajes generados por el
servidor MySQL
Funcionalidades de Workbench GUI
MODEL EDITOR
EER Diagrams
Utilizado para visualizar datos y
relaciones
Descriptor Editor
Un área de texto libre que se
utiliza para describir las
entidades en la base de datos
Types y History
La lista de tipos de datos para
las definiciones de columna e
historial de modificación del
EER.
Schemas / Databases
Muestra la BBDD activa y los
objetos que contienen:
Tablas, Indices, Rutinas, etc
Schemas Privileges
Gestión de usuarios y privilegios
Funcionalidades de Workbench GUI
Tool palettes
Nos permite:
- Visión general de Objetos
- Propiedades de los objetos
- Relaciones entre objetos
Scroll
Barra de desplazamiento tanto
vertical como horizontal
Funcionalidades de Workbench GUI
SERVER ADMINISTRACION
Management
- Arranque y parada del
servidor
- Variables del sistema y
estados.
- Registros del Servidor
Configuration
Configuración del fichero de
inicio.
Security
Gestión de usuarios y privilegios
Export / Import
Interface grafico de
mysqldump
Características de Monitor GUI MySQL Enterprise
• MEM permite:
• Realiza recomendaciones para optimización del Sistema
Eliminar las vulnerabilidades de seguridad.
Mejorara la replicación.
Optimizar el rendimiento, etc
FUNCIONALIDADES
• Panel Empresarial
Gestión de todos los servidores MySQL desde una consola consolidada.
• Monitorización
Realiza un chequeo global de un solo vistazo de sistemas clave.
• MySQL Advisors
Los Advisor asesoran de posibles mejoras practicas de rendimiento.
• Planificador
Planificador de Advisor y en que BBDD.
• Monitor de Réplica
Ver en tiempo real como va la réplica
Características de Monitor GUI MySQL Enterprise
Características de Monitor GUI MySQL Enterprise
ASESORES
• Una de las partes mas importantes de MEM son sus asesores (advisor)
Advisor Descripción
Upgrades - Comprueba versiones actualizadas y securizadas
• Programa mysqlshow
INFORMATION_SCHEMA
Binary LOG
– Describen las modificaciones de datos para su posible replicación o recuperación.
– Son utilizados a nivel GLOBAL dentro de todo el Servidor MySQL
Performance_Schema
– Eventos producidos a nivel INDEPENDIENTE de Base de Datos.
– Describen operaciones de bloqueos, sincronismo, acceso a fichero, tiempos, etc
Ejemplo:
Muestra los nombres de bases de datos disponibles
Comando SHOW: Show Tables
Ejemplo:
Muestra los nombres de todas las tablas de la BBDD actual
Comando SHOW: Show Columns From
Ejemplo:
Muestra las COLUMNAS de una Tabla determinada
Ejemplo:
Muestra el carácter disponible junto con sus colaciones por defecto:
• Sintaxis
shell> mysqlshow [options] [db_name [tbl_name [col_name ] ] ]
Al ser un programa en línea, acepta parámetros como -host , -u , -p
Programa mysqlshow
• Introducción a la transacciones
• Lecturas Consistentes
• Bloqueos
Procesamiento Transaccional
Transacciones
• Una transacción es un grupo de consultas SQL que se tratan atómicamente,
como una sola unidad de trabajo.
• El objetivo del enfoque transaccional es asegurar que todos los pasos en una
operación tienen éxito, y no aceptar operaciones incorrectas.
Procesamiento Transaccional
Transacciones
• MySQL no proporciona transacciones a nivel de Servidor, sino que lo
implementan los motores subyacentes.
• Esto significa que no se puede mezclar con fiabilidad los diferentes motores
en una sola transacción.
• Ejemplo:
Si mezclamos tablas transaccionales y no transaccionales (por ejemplo, las tablas MyISAM,
InnoDB y) en una transacción, ésta funcionará correctamente si todo va bien.
Atómica:
– Todas las declaraciones ejecutar con éxito como una unidad o se cancelan como una
unidad.
Consistente:
– Una base de datos que está en un estado válido cuando comienza una transacción
permanece en un estado válido después de la transacción.
Aislado:
– Una transacción no afecte a otra.
Durable:
– Todos los cambios realizados por transacciones que completa con éxito se registran
correctamente en la base de datos. Los cambios no se pierdan.
Procesamiento Transaccional
• COMMIT
La transacción es validada completamente
• ROLLBACK
La transacción es revocada y todo se deshace.
• SET AUTOCOMMIT
Nos permite cambiar el modo de ejecución AUTO-COMMIIT / NO-AUTOCOMMIT
• Sentencias:
Operaciones DDL : ALTER, CREATE, DROP
• READ UNCOMMITTED
Permite a una transacción ver los cambios no confirmados realizados por otras transacciones.
• READ COMMITTED
Permite una transacción para ver los cambios realizados por otras transacciones sólo si han sido Validados.
• SERIALIZABLE
Aísla completamente los efectos de todas las transacciones entre si.
Configurar Niveles de Aislamiento
• SESION
Cualquier cliente puede modificar
el nivel de aislamiento de su propia sesión,
Bloqueos
• El bloqueo permite el acceso a los datos por parte del cliente que
mantiene el bloqueo, pero limita lo que otros clientes pueden hacer con
los datos
• SHARED
Si un cliente quiere leer los datos, otros clientes que quieren leer los mismos datos no causan
un conflicto, y todos ellos pueden leer al mismo tiempo.
Sin embargo, otro cliente que quiere escribir (modificar) datos debe esperar hasta que la
lectura ha terminado.
• EXCLUSIVE
Si un cliente quiere escribir los datos, todos los demás clientes debe esperar hasta que la
escritura ha terminado antes de leer o escribir.
Bloqueos
• Usadas en sentencias SELECT, para tomar una decisión en base a su resultado, y luego ejecutar
una sentencia INSERT, garantizando que ningún otro cliente puede cambiar la fila que utilizó para
tomar su decisión antes de actuar sobre ella.
Si la sentencia SELECT procesa filas que se han modificado por otra transacción, LOCK IN SHARE
MODE bloquea la operación SELECT hasta que la transacción se confirme.
Bloqueos
• Sintaxis:
• SELECT ... FOR UPDATE;
1. Bloqueamos los datos que posteriormente vamos a modificar.
• Estas características:
Trabajo con transacciones o No permitirla
Trabajar con disco o Solo con memoria
Dispone de autocommit o NO-autocommit.
Motores de Almacenamiento
• Cuando crea una nueva tabla, puede decirle a MySQL qué tipo de tabla
crear añadiendo la opción de tabla ENGINE o TYPE al comando
CREATE TABLE :
CREATE TABLE t1 (i INT) ENGINE = INNODB;
CREATE TABLE t2 (i INT) TYPE = MEMORY;
Motores de Almacenamiento
• Puede cambiarlo:
Usando las opciones de arranque
Support = YES o NO
Disable = Si el motor está compilado pero desactivado
Motores de Almacenamiento
MOTORES DISPONIBLES
• INNODB
Es el motor principal de MySQL. Motor de almacenamiento por DEFECTO.
Sus características se verán mas en profundidad en este capitulo.
• MyISAM
Se utiliza principalmente en la web, almacenamiento de datos, y otros entornos de
aplicaciones.
• MEMORY
Crea tablas con contenidos que se almacenan en la memoria. (No transaccionales)
• ARCHIVE
Gran velocidad, almacenamiento comprimido de datos rara vez leídos, etc
Motores de Almacenamiento
OTROS MOTORES
• NDB Cluster
Para instalaciones de MySQL Cluster
• DBD
Motor Transaccional de Terceros
• MERGE
Permite una colección de tablas MyISAM idénticas ser tratadas como una simple tabla. (No
transaccionales)
• EXAMPLE
Es un motor de almacenamiento “dummy" que no hace nada. Puede crear tablas con este
motor, pero no puede almacenar datos ni recuperarlos.
Motores de Almacenamiento
• El uso de ALTER TABLE para cambiar el motor es una operación costosa, debido a
que copia todos los datos internos de un motor a otro.
• El motor InnoDB debe de estar habilitado para poder realizar dicha conversión.
• Tablespace
Es una agrupación Lógica que contiene:
– Datos
– Índices
– Metadatos
– Segmentos de Rollback internos
– Buffers de lectura y Escritura de las Tablas InnoDB.
• Tablespaces
• Tablespaces_por_tabla (*.ibd)
Por defecto los datos e índices están almacenados en un Tablespace por Tabla Fichero
• ACTIVADA
Cada nueva tabla creada en InnoDB crea 2 ficheros:
– Archivo .ibd Almacena los datos e índices de la tabla.
– Archivo .frm Contiene la estructura de la tabla.
• DESACTIVADA
Todas las tablas se almacenan en el mismo Tablespace compartido junto con toda
la información de metadatos, Segm. Rollback, etc.
• El incremento por defecto es 64 Mb, pero puede ser cambiado en la variable innodb_autoextend_increment =
Numero
mysql> set global innodb_autoextend_increment=128;
Ib_logfile
Registra las sentencias DML
sólo de tablas InnoDB
• Cuando un cliente hace una transacción, los cambios se guardan en el Log Buffer, Esta información
es guardada en disco (ib_logfile) cuando se hace COMMIT o FLUSH.
• Si se produce un CRASH, mientras que las tablas están siendo modificadas, ib_logfiles se utilizan
para la auto-recuperación.
• Cuando se reinicia el servidor MySQL, que vuelve a aplicar los cambios registrados en ib_logfile
para asegurarse de que las tablas reflejan todas las transacciones confirmadas.
InnoDB: Log Files y Buffers
• InnoDB mantiene su propio grupo de búferes para almacenar en caché los datos e índices de uso
frecuente (Buffer Pool) y los guarda en disco en su Espacio de tablas.
• Esta caché se aplica a muchos tipos de información, y acelera el procesamiento tanto, que se debe
asignar un máximo de 80% de la memoria física de los servidores de base de datos 'al buffer de
InnoDB.
InnoDB: Log Files y Buffers
10 Mb 5Mb 5Mb
Motor MyISAM
• Características adicionales:
• Las tablas MyISAM ocupan muy poco espacio.
• El formato de almacenamiento de tablas es portátil, por lo que los archivos de tabla se puede copiar
directamente a otro host y utilizada por un servidor en ese host.
• Características:
• Este motor realiza bloqueos a nivel de tabla, por lo que un deadlock no puede ocurrir.
• Podemos indicar el tamaño máximo para una tabla en memoria mediante la opción
- - max-heap-table-size
• Características:
• La estructura es definida en el fichero *.frm
• Los datos se guardan en *.ARZ
• No es compatible con los índices.
• Soporta INSERT y SELECT, pero no DELETE, REPLACE o UPDATE.
• Utiliza el bloqueo a nivel de fila.
• Permite columnas AUTO_INCREMENT
Motor BLACKHOLE
• Este motor acepta datos pero de forma automática los elimina, los tira a
la basura sin almacenarlos.
USOS
• Es útil en un entorno de replicación, para aplicar solo los cambios a algunos nodos
• Native authentication
• Plugins de autenticación
• Autorización
Niveles de privilegios de acceso para los usuarios
Tipos de privilegios
Gestión de privilegios de usuario.
Conexión de usuario y el proceso de consulta
• Autenticar
- Verifica la identidad
del usuario.
• Autorizar
- Verificar los privilegios
del usuario respecto
a los objetos de la
consulta.
• Por ejemplo:
• Si dispone o no de Contraseña -> Es visible en forma encriptada en la columna de la contraseña)
• Si dispone o no de configuración SSL o x509 (indicado por los valores en blanco en las columnas ssl_ * y *
x509_)
• Si utiliza o no algún plugin para hacer la autenticación (El nombre del plugin aparece en la columna de la
plugin.)
Conexión de usuario y el proceso de consulta
• Podríamos tener diferentes usuarios dados de alta con el mismo LOGIN y diferentes
hosts, por lo que, cada al gestor, serían diferentes usuarios.
Native Authentication
• Debe utilizar comillas simples alrededor de los nombres de usuario y nombres de host
si estos contienen caracteres especiales.
• Siempre que sea posible, evite comodines al especificar nombres de host de la cuenta.
Gestión de cuentas de usuario. Hosts
• Ejemplos
Si un host coincide con dos o más patrones, MySQL elige el patrón más específico.
Gestión de cuentas de usuario. Anónimas
• Para especificar una cuenta anónima (es decir, una cuenta que coincide con
cualquier nombre de usuario), especifique una cadena vacía para la parte de
nombre de usuario del nombre de la cuenta.
• NOTAS:
• Evitar la creación de cuentas anónimas, especialmente los que no tienen una
contraseña (como en el ejemplo anterior).
Usuarios. Cambio de Contraseña
• CREATE USER...IDENTIFIED BY
• GRANT...IDENTIFIED BY
• SET PASSWORD
• mysqladmin password
• UPDATE grant tables (no recomendado)
SET PASSWORD
• La forma más común de cambiar la contraseña de una cuenta existente sin
cambiar ninguno de sus privilegios es utilizar la sentencia SET PASSWORD.
MYSQLADMIN
• También podemos utilizar el comando mysqladmin desde línea de comandos para
cambiar la contraseña de un usuario directamente
GRANT …… IDENTIFIED BY
• Es un comando utilizado para dar privilegios a un usuario y a la vez cambiarle la
password.
Borrado de un usuario
• Mediante el comando DROP USER <usuario> podremos borrar el nombre del usuario.
• Revoca todos los privilegios para una cuenta existente y luego elimina la cuenta
• Elimina todos los registros existentes en tablas de permisos relacionados con dicha
cuenta
Plugins de autenticación
• mysql_native_password
• Mecanismo por defecto descrito anteriormente
• Implementa el formato de contraseña estándar.
• Crea contraseñas HASH con un ancho de 41-bytes
• mysql_old_password
• Mecanismo de autenticación utilizado hasta versiones MySQL4.1.1
• Formato menos seguro.
• Crea contraseñas HASH con un ancho de 16-bytes
• sha256_password
• Este plugin permite contraseñas HASH mediante SHA.
• Crea contraseñas HASH con un ancho de 256-bytes
Plugins de autenticación. BIULT-IN
• auth_socket
Permite sólo la autenticación de los usuarios de MySQL que están conectados a través de un
socket UNIX desde una cuenta de UNIX con el mismo nombre.
• authentication_pam
Le permite iniciar sesión en el uso de un mecanismo de autenticación externa.
MySQL no almacena la contraseña, sino que utiliza el mecanismo de UNIX PAM (Pluggable
Authentication Modules)
Valor Descripción
LOW - Las contraseñas deben tener una longitud mínima, según lo determinado por el
valor de la variable validate_password_length.
• Esta autorización se asegura de que los usuarios pueden realizar sólo las
operaciones para las que han sido otorgados privilegios adecuados.
Niveles de privilegios de acceso
• Usuarios Administrativos:
Privilegios Global FILE, PROCESS, SHUTDOWN y SUPER
Niveles de privilegios de acceso
Por ejemplo:
• Se puede dar a un usuario la capacidad de seleccionar de cualquier tabla en
cualquier base de datos mediante la concesión al usuario el privilegio
SELECT a nivel GLOBAL.
• Asignar control completo en una Base de Datos a una cuenta sin tener
ningún privilegio en otras Bases de Datos.
Crear tablas y otros objetos de base de datos
Seleccionar las diferentes Tablas
Añadir, eliminar o actualizar registros, etc.
http://dev.mysql.com/doc/mysql-security-excerpt/5.6/en/privilege-system.html
Privilegios Administrativos
• PROCESS:
Permite a los usuarios utilizar el comando SHOW PROCESSLIST para ver todas las consultas
que los clientes están ejecutando
• SUPER:
Permite a los usuarios controlar/matar otras conexiones de clientes o cambiar la configuración
de ejecución del servidor.
Establecer variables globales, sesión, etc.
La cuenta se puede utilizar para acceder al servidor con fines limitados, tales como la
ejecución de SHOW VARIABLES o SHOW STATUS
La cuenta no se puede utilizar para acceder a los contenidos de bases de datos tales como
tablas, rutinas, etc; aunque tales privilegios se pueden otorgar posteriormente.
• CREATE USER:
Permite la creación de usuarios.
• SHUTDOWN
Permite hacer una parada controlada del Gestor.
Comando GRANT
• GRANT keyword:
Especifica uno o más nombres de privilegios para asignar, separados por comas.
Los nombres de los privilegios no distinguen entre mayúsculas y minúsculas.
SELECT, INSERT, UPDATE, etc..
• ON clause:
Especifica el nivel de los privilegios a asignar ( Global, BBDD, Tabla, Rutina)
• TO clause:
Cuenta de usuario a la que asignar los privilegios.
Si la cuenta NO EXISTE SE CREA
• IDENTIFIED BY clause:
(Opcional) Asigna la contraseña especificada en la cuenta.
Si ya existe la cuenta, la contraseña reemplaza.
Comando GRANT
• NOTAS:
• Los comandos GRANT, REVOKE, SET PASSWORD, y RENAME USER aplicar los cambios tanto a
las tablas de permisos y las copias de la tabla en memoria.
• REVOKE keyword:
Especifica uno o más nombres de privilegios para revocar, separados por comas.
Los nombres de los privilegios no distinguen entre mayúsculas y minúsculas.
SELECT, INSERT, UPDATE, etc..
• ON clause:
Especifica el nivel de los privilegios a revocar ( Global, BBDD, Tabla, Rutina)
• FROM clause:
Especifica la cuenta de usuario al que eliminar los privilegios
13.- Mantenimiento de Tablas
• Comandos
mysqlcheck
myisamchk
Sentencias SQL para el mantenimiento de
tablas.
• Hay varias sentencias SQL para el mantenimiento de tablas:
• Esta distribución determinan qué índices utiliza MySQL para una tabla específica
dentro de una consulta.
• También podemos configurar el motor InnoDB para recopilar las estadísticas de forma
automática después de un número de ordenes DML o cuando se consulta la tabla o el
índice.
Sentencias SQL para el mantenimiento de
tablas.
ANALYZE TABLE. Características
• Durante el análisis, MySQL bloquea la tabla con un bloqueo de lectura para InnoDB y
MyISAM.
• Es utilizado para actualizar las estadísticas de tablas MyISAM y para revisar las
VISTAS con problemas..
QUICK
– Realiza una comprobación rápida de las tablas.
• Este comando lee una tabla completa fila a fila para calcular el checksum y asegurar
dicha operación
• Si el Checksum de dos tablas son diferentes, es probable que las tablas difieren de
alguna manera.
QUICK
– Es lo contrario a la opción EXTENDED, aplicado a un conjunto de filas.
– Es la opción por defecto en MYISQM
• Es recomendable utilizar este comando después de realizar una orden de DML en gran
parte de la tabla.
• En las tablas del motor ARCHIVE, este comando se utiliza también para comprimir la
tabla.
EXTENDED Crear el índice registro a registro (en lugar de crear un índice en ordenación).
• La operación de REPAIR es posible que pueda causar la pérdida de datos, por lo que
es conveniente hacer una copia de seguridad de una tabla antes de realizar la
operación.
- - safe-recover
Repara una tabla que la opción anterior no es posible. Es mas LENTO
• NOTAS
• Las tablas no tienen que estar siendo usadas. Una forma de garantizar esto es bloquear las tablas o
detener el servidor.
• La invocación de las tablas se puede hacer con el nombre relativo del fichero o completo.
• Se intentará repara la tabla con la opción - - recovery en primera instancias y sino es posible
utilizaremos la opcíon - - safe-recovery
Mantenimiento de tablas en InnoDB
2. Este tipo de arranque, hace que el motor InnoDB impida operaciones de INSERT, UPDATE o
DELETE.
[mysqld]
myisam-recover=FORCE,BACKUP
• Para ver que las filas se han liberado, deberemos utilizar el comando
SHOW TABLE STATUS y fijarnos en el campo DATA_FREE
Data_free Numero de bytes asignados pero no utilizados.
– Si es igual a 0 Todo OK
– Si es diferente de 0 Hay filas eliminadas sin utilizar
Mantenimiento de tablas en Memory
Mantenimiento de tablas en Archive
• Una de las caracteristicas del motor ARCHIVE es que las filas cuando se
insertan, se comprimen.
A tener en cuenta:
• Hacer copias de seguridad con regularidad.
• Utilizar nombres y nomenclaturas coherente y significativa para las copias
• Validar archivos de copia de seguridad.
• Podemos:
• Importar / Exportar datos desde dentro de MySQL
• Importar / Exportar datos desde línea de comando mediante clientes MySQL
Exportación de datos mediante consultas
• Sintaxis
SELECT <columnas> INTO OUTFILE <fichero> FROM tabla/s
• NO EXPORTA:
Sentencias SQL
Estructura de tabla ni Índices
Restricciones
Exportación de datos mediante consultas
NOTAS
Ejecutando la orden desde el S.O. mediante cliente MySQL podemos crear el fichero en el
Cliente.
• Este formato puede ser leído por múltiples aplicaciones externas: Excel, Adobe, Oracle,
etc
• Sintaxis
Importar datos utilizando LOAD DATA INFILE
SALTANDO LINEAS
• Podemos ignorar un conjunto de líneas iniciales en una importación de datos mediante
la opción IGNORE n LINES
• Esta opción es utilizada cuando el fichero de datos contiene INICIALMENTE datos que
no debemos importar ( cabeceras, nombres de columnas, etc)
Importar datos utilizando LOAD DATA INFILE
SUSTITUCION DE VALORES
• Load Data Infile permite sustituir valores obtenidos de un fichero y definir su valor en
función de variables de usuario.
• LOAD DATA INFILE transforma los datos obtenidos del fichero correspondiente
utilizando variables de usuario, antes de insertarlos en la tabla.
Ejemplos
Importar datos utilizando LOAD DATA INFILE
REGISTROS DUPLICADOS
• Al agregar nuevas filas a una tabla mediante INSERT o REPLACE, se puede controlar
los registros duplicados mediante las opciones:
IGNORE
ON DUPLICATE KEY UPDATE
REPLACE
– Reemplaza el registro existente por el nuevo importado.
Importar datos utilizando cliente mysqlimport
• Sintaxis
CARACTERISTICAS
• Puede importar varios archivos a la vez.
• Los archivos de entrada deben contener valores de datos solamente, no sentencias
SQL.
• Las Tablas deben existir.
OPCIONES
OPCION Descripción
- -lines-terminated-by=string - Carácter de finalización de línea ( \n )
EJEMPLOS
Exportación de datos mediante cliente mysqldump
Archivo Datos
– El servidor escribe como texto delimitado por tabuladores, una línea por cada fila de la tabla.
– Este archivo se denomina tbl_name.txt en el directorio de salida.
Archivo Creación
– El servidor también envía una sentencia CREATE TABLE para cada tabla del backup a un fichero
llamado tbl_name.sql en el directorio de salida.
Exportación de datos mediante cliente mysqldump
Formato SQL
• Es la opción mas frecuente en la utilización de mysqldump
La opción - - databases hace que todos los nombres en la línea de comandos sean
tratados como nombres de BBDD.
Sin esta opción, mysqldump trata el primer nombre como una base de datos y los
siguientes como los nombres de tablas.
Exportación de datos mediante cliente mysqldump
DROP DATABASE
CREATE DATABASE.
USE
Exportación de datos mediante cliente mysqldump
• Para poder hacer backup de una sola BBDD podemos utilizar - - databases DB u
omitir esta opción y poner el nombre de la BBDD.
DIFERENCIAS:
Sin la opción, no se escriben CREATE DATABASE ni USE
OPCIONES
• Mysqldump dispone de muchas opciones que podemos ver mediante
mysqldump - -help
OPCIONES DESCRIPCION
- - tab=Dir_Name - Exporta los datos en formato SQL o TXT
Formato Texto-Delimitado
• Si utilizamos mysqldump con la opción - -tab = dir_name, utiliza dir_name como
el directorio de salida y vuelca las tablas de forma individual en ese directorio
utilizando dos archivos para cada tabla.
Nombre_Tabla.SQL
– Contiene las sentencias CREATE TABLE para recrear la Tabla
Nombre_Tabla.TXT
– Contiene los datos de la tabla
– Una línea por cada registro de la Tabla
Formato Texto-Delimitado
• VENTAJAS
Ficheros mas compactos y fáciles de manejar para herramientas de línea.
Se puede volver a cargar los datos con la orden LOAD DATA INFILE, con las mismas
opciones que se utilizan para volcar.
Formato Texto-Delimitado
• LIMITACIONES
Quien ha lanzado el gestor MySQL debe tener permiso para escribir en el directorio de
salida.
Formato Texto-Delimitado
Opciones Descripción
- - fields-terminated-by=str Cadena de separación de columna (TAB)
o
Exportación de datos mediante cliente mysqldump
Formato Texto-Delimitado
Ejemplos
• NOTAS
Se debe de tener privilegios de FILE ( SELECT ….. INTO INFILE )
En caso de utilizar cualquiera de las opciones de formato de datos para volcar datos de
la tabla, tendrá que especificar el mismo formato cuando vuelva a cargar los archivos de
datos
Mysqldump. Casos Específicos
• Casos como:
• Hacer una copia de una base de datos en otra en el mismo servidor
No utilizar - - database db1 pues eso implica la introducción de USE db1 en el fichero de
volcado.
Servidor 2
Copiamos el fichero de volcado (dump.sql) al servidor 2 y ejecutamos
Mysqldump. Casos Específicos
• La opción - - triggers está habilitado por defecto para cuando existen volcados de
tablas.
• Mysqldump dispone de opciones para importar sólo los datos o sólo las
estructuras de los objetos
Por ejemplo para volcar los datos y las estructuras de forma separada.
• Debemos tener en cuenta que el fichero SQL, TXT debe de estar bien
creado, para poder trabajar correctamente con Bases de Datos y Tablas.
Importar datos con ficheros SQL de MySQL
• Ficheros SQL
• CALIENTE
Copias de seguridad dinámicas.
Se ejecutan cuando la BBDD está levanta y funcionando normalmente.
Con las copias de seguridad en caliente, el sistema sigue siendo accesible para las
operaciones de lectura y modificación de datos.
• FRIO
Copias de seguridad ejecutadas con Base de Datos detenida / Iniciada
Los usuarios no pueden conectarse ni trabajar con los datos.
Puede ejecutarse con Servidor Levantado Bloqueo Completo de los datos durante un
período prolongado de tiempo.
• WARM
Similar a un Backup en Caliente, pero con menor prioridad, permite hacer copia en caliente y a
su vez, permite trabajar a los usuarios con datos.
Si al hacer la copia de seguridad una tabla está usada por los usuarios, el Backup espera su
finalización.
Tipos de Backup
• DISCO
Consiste en una copia de seguridad basada en Discos Físicos.
Estas técnicas proporcionan copias de seguridad en vivo (o casi en vivo) y un medio rápido de la recuperación
de datos.
• BINARY LOGs
Un registro binario registra modificaciones de los datos.
Los registros binarios son útil para restaurar los eventos producidos desde el último backup completo.
Ventaja: Contienen un registro de todos los cambios a los datos a través del tiempo, en lugar de una
instantánea de los datos.
• Lógicos/Texto
Realizan volcados completos que contiene las sentencias SQL y operaciones para obtener el resultado actual
de los datos
MYSQLDUMP
Backups con MySQL
• COPIA LOGICA
Compuesta en un archivo de texto que contiene instrucciones SQL para reconstruir la base de
datos
• COPIA FISICA
Es una copia binaria de los archivos de base de datos MySQL
• Backup INCREMENTAL
Basada en los registros binarios de MySQL
Backups con MySQL. Copia Lógica
• Estos archivos de texto contienen sentencias SQL y, por lo tanto son muy
portable.
• El tamaño de un archivo de copia de seguridad lógica puede ser mayor que el tamaño
de la base de datos.
Backups con MySQL. Copia Física
• Requerimientos:
• Los archivos de base de datos no debe cambiar durante la copia de seguridad.
• Son más rápidas que las LOGICAS, pero no son tan portable ( dependen de la arquitectura )
2. Realizar la Recuperación: Aplicar el contenido del registro binario para aplicar todos
los cambios de datos desde que se creó la copia de seguridad.
Backups con MySQL. Incremental
mysqldump
• Herramientas de Tercero
Herramientas de Backup. mysqlbackup
• mysqldump
• La utilidad mysqldump viene con la distribución MySQL.
• mysqlhotcopy
• La utilidad mysqlhotcopy también viene con la distribución de MySQL.
• Realiza una copia de seguridad en crudo y se utiliza solo para aquellas bases de
datos que utilizan el MyISAM o ARCHIVE.
• El nombre implica que mysqlhotcopy realiza una copia de seguridad "en caliente",
lo que significa que no hay interrupción de la disponibilidad de bases de datos.
• Sin embargo, debido a que la base de datos está bloqueada por la lectura y no se
puede cambiar durante la copia de seguridad, que se describe mejor como una
copia de seguridad "warm".
• Sintaxis:
# mysqlbackup [ opciones ] [ backup | backup-and-apply-log | backup-to-image ]
4. Continua la copia de seguridad con los archivos que no sean InnoDB (como tablas MyISAM y
ficheros .frm).
• Sintaxis
http://dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html
• Dispone de múltiples opciones:
Exportación con Raw Innodb Backup
Archivos FRM
Archivos *.cfg
Ficheros de Tablespaces
Archivos de registros InnoDB
Archivo my.cnf
• Todas las tablas InnoDB en todas las bases de datos deben ser
respaldados juntos, porque InnoDB mantiene información
centralizada en tablas del sistema.
Exportación con Raw Innodb Backup
Archivos FRM
Archivos *.cfg
Ficheros de Tablespaces
Archivos de registros InnoDB
Archivo my.cnf
• Este comando realiza la preparación de las tablas para poder ser exportas sin
problemas.
• Introducción
• Configuración
Setup, Formatos, ID
Tareas Administrativas
• Implementación: Elementos
Detalle, Logging, Reglas de Filtrado
• Soluciones
Backups, Maestro/Esclavo
Tolerancia Fallos, SSL
Réplicas Semi-Asincrona, Retrasada
• Notas y Consejos
Características, Compatibilidad, Actualización
Introducción
• El esclavo recibe una copia completa de todo el Binary Logs necesario para su actualización.
• Esclavo aplica todos los eventos existentes en el log binario maestro. Si es necesario, puede
configurar el esclavo para procesar sólo los eventos que se aplican a las bases de datos o
tablas particulares.
Introducción. Servidores Esclavos
• Velocidad
Puede conseguirse un mejor tiempo de respuesta dividiendo la carga de consultas de
clientes a procesar entre los servidores maestro y esclavo.
– Operaciones de MODIFICACIONES de datos MAESTRO
– Operaciones de CONSULTAS de Datos Esclavos
• Copia de Seguridad
Otro beneficio es la posibilidad de la realización de Copias de Seguridad usando un
servidor esclavo sin molestar al maestro.
El maestro continúa procesando actualizaciones mientras se realiza la copia de
seguridad.
Topologías de Replicación
• Conocer los elementos básicos del Maestro para conectarlo con el Esclavo
Nombre de host,
Credenciales de acceso
Nombre de archivo de registro binario y la posición, etc
Configuración de la Replicación
Configuración
• En un maestro de replicación, debe activar el registro binario y establecer un ID de
servidor único.
Conectado en el MASTER
4.- Si El servidor Maestro tiene datos, es necesario copiar los datos al Esclavo.
Utilizando MysqlDump
Utilizando mysqlserverclone
Snapshot de Sistema Operativo
- -master-data
Añade automáticamente el comando CHANGE MASTER TO requerida en el esclavo para iniciar el
proceso de replicación
Después de haber realizado este procedimiento, el esclavo se conecta al maestro y replica las
actualizaciones que se han producido en el maestro desde que se tomó la instantánea.
Replicación. Formatos
• Mixto
Una mezcla de ambos, dependiendo del cambio, así se realiza la inscripción en el Binary Log.
Dependiendo de ciertas declaraciones, y del motor de almacenamiento, el registro se cambia
automáticamente.
Replicación. Formatos
Menos escritura en Binary Logs, por lo que la restauración suele ser mas rápida.
Los archivos de registro contienen todas las declaraciones que hicieron los cambios, por
lo que se pueden utilizar para auditar la base de datos.
• Desventajas
No todas las declaraciones que modifican los datos (como INSERT DELETE, UPDATE y
REPLACE) pueden ser replicados utilizando replicación basada sentencias.
– Una utilización de función (UDF) o programa almacenado que no es determinista, puede devolver
otro valor en función de otros factores además de los parámetros suministrados a la misma.
Operaciones DELETE y UPDATE con la clausula LIMIT sin ORDER BY pueden dar
problemas
Menor número de bloqueos de registro en el maestro, que así se logra una mayor
concurrencia
• Desventajas
Genera bastante mas datos en el Binary Logs ( por ejemplo: La replicación basada en filas
escribe cada fila modificada en el log binario.)
La utilización de UDF que generan valores BLOB grandes tardan más tiempo en replicar.
No se pueden examinar los Binary Logs para ver que instrucciones se están ejecutando.
Replicación. Formatos
• Valores Soportados:
STATEMENT Consultas SQL
ROW Filas
MIXED Mixto
NOTA:
• Si se cambia el formato de replicación con un replicación en curso, este cambio no se produce en los
Esclavos, hasta que se reinicie de nuevo la replicación.
Replicación. GTID
• ¿Que es GTID?
• GTID = Identificadores de Transacción Globales
• Es una opción que podemos utilizar para simplificar las tareas de replicación entre
Maestros y Esclavos.
• Ahora podemos:
1. Utilizar binary Logs + Posicionamiento
2. Utiliza GTIDs para indicar que Transacciones debemos de realizar.
Características de GTID
• Un GTID es un identificador único creado y asociado con cada transacción
validada en el servidor de origen (maestro).
Esto le dice al esclavo que la siguiente transacción que debe de hacer usando este GTID.
• Pasos:
1. Si la replicación ya se está ejecutando, sincronizar ambos servidores, haciéndolos de
sólo lectura.
2. Detener ambos servidores.
3. Reiniciar ambos servidores con GTID activado.
4. Configurar el Esclavo para que use el Master
5. Eliminar Solo Lectura.
Replicación. GTID
Slave_IO_Running
Indica que se esta copiando eventos del
Maestro al Esclavo
Slave_SQL_Running
Indica que se esta ejecutando los eventos
del Binary Relay
Last_IO_Error, Last_SQL_Error:
Ultimos eventos registrados
Seconds_Behind_Master
Numero de segundo de retraso en procesar
los Binary Logs
0 Sincronizado
NULL No se esta ejecutando
Replicación. Tareas Administrativas
• Las conexiones de los procesos Esclavos están etiquetadas como BinLog Dump
Replicación. Tareas Administrativas
START SLAVE
STOP SLAVE
• Cada esclavo que se conecta con el maestro, solicita una copia del
registro binario y aplica los cambios individualmente.
• Disponemos de 3 tipos:
• Relay Logs
Consta de los eventos leídos del log binario del maestro y escritas por el esclavo.
Este tipo de Ficheros son creados por el Hilo SQL.
• Relay Logs
• Relay Logs son un conjunto de ficheros numerados que contienen eventos con los cambios de
base de datos
• Para evitar este BUG, podemos definir el nombre de los Relay Logs al configurar la
Replicación.
• El Hilo SQL borra automáticamente cada archivo Relay Log en cuanto haya ejecutado todos
los eventos.
Relay Logs y Logs Status.
• Estos ficheros contienen información como la mostrada en la salida del comando SHOW
SLAVE STATUS
• Son creados en el directorio de datos y sus nombres pueden ser modificados mediante las
variables - -master-info-file y - -relay-log-info-file
• En el caso de catástrofe en un Servidor Esclavo, los ficheros pueden ser leídos y determinar
en qué punto se ha quedado la replicación.
• Esclavo
Determinar si las consultas recibidas se aplican o no
( - -replicate-* )
Maestro
• Opción - -binlog-do-db=BD
Los efectos de esta opción depende del formato de registro.
Formato SQL
Sólo los comandos que se ejecuten cuando se esté usando la BBDD indicada se escribirán en el Binary
Logs.
- -binlog-do-db=sales
- -binlog-do-db=sales
http://miguelangelnieto.net/?action=view&url=los-peligros-de-binlog-do-db-en-la-replicaci%C3%B3n
Formato ROW
Sólo los cambios en las tablas que pertenecen a la BBDD indicada se registran; la base de datos por
defecto no tiene efecto sobre esto.
Reglas de Filtrado
Maestro
• Opcion - -binlog-ignore-db
Los efectos de esta opción depende del formato de registro.
Formato SQL
Sólo los comandos que se ejecuten cuando se esté usando la BBDD indicada se ignorarán en el Binary
Logs.
- -binlog-ignore-db=sales
- -binlog-ignore-db=sales
Formato ROW
Sólo los cambios en las tablas que pertenecen a la BBDD indicada se ignoran; la base de datos por
defecto no tiene efecto sobre esto.
Reglas de Filtrado
Esclavo
• Las opciones - -replicate-do-db=BD y - -replicate-ignore-db=BD son
similares a las opciones de Servidor Maestro
Tabla
- -replicate-do-table
- -replicate-ignore-table
- -replicate-wild-do-table
- -replicate-wild-ignore-table
Reglas de Filtrado
Esclavo
• Opción - -replicate-do-db=BD
Los efectos de esta opción depende del formato de registro.
Formato SQL
Sólo los comandos que se ejecuten cuando se esté usando la BBDD indicada se escribirán en el Binary
Logs.
- -binlog-do-db=sales
- -binlog-do-db=sales
http://miguelangelnieto.net/?action=view&url=los-peligros-de-binlog-do-db-en-la-replicaci%C3%B3n
Formato ROW
Sólo los cambios en las tablas que pertenecen a la BBDD indicada se registran; la base de datos por
defecto no tiene efecto sobre esto.
Reglas de Filtrado
Esclavo
• Opcion - -replicate-ignore-db
Los efectos de esta opción depende del formato de registro.
Formato SQL
Sólo los comandos que se ejecuten cuando se esté usando la BBDD indicada se ignorarán en el Binary
Logs.
- -binlog-ignore-db=sales
- -binlog-ignore-db=sales
Formato ROW
Sólo los cambios en las tablas que pertenecen a la BBDD indicada se ignoran; la base de datos por
defecto no tiene efecto sobre esto.
Soluciones
• El esclavo se puede detener sin afectar al maestro, por lo que puede producir una
copia correcta.
Sistema Operativo
Soluciones
• COMO?
Si utilizó mysqldump para crear el backup en el maestro, se podía editar el texto del archivo de volcado
para cambiar el tipo de motor utilizado en cada tabla.
Otra alternativa para mysqldump es desactivar los tipos de motores que usted no desea utilizar en el
esclavo antes de utilizar el volcado para construir los datos sobre el esclavo.
añadir la opción --skip-innodb en su esclavo para desactivar el motor InnoDB y
añadir la opción - -default-storage-engine=MyISAM
Soluciones
Escalabilidad
• Puede usar la replicación como una solución de escalabilidad horizontal;
Diferentes esclavos
• Puede haber situaciones en las que tiene un solo maestro y desea replicar
diferentes bases de datos a diferentes esclavos.
Rendimiento de la Replicación
• Servidores de Replicación con muchos Esclavos de replicación pueden reducir el
rendimiento del mismo.
Rendimiento de la Replicación
Master 1
- Es el maestro primario. El registro binario debe estar habilitado en esta máquina.
Master 2
- Es del esclavo al Master 1 que hace la replicación para el resto de los esclavos.
- Es la única máquina que se conecta con Master 1.
- Debe de tener habilitado el Binary Log, y la opción - -log-slave-updates
Esclavos
- Actúan como esclavos al Master 2, y replican la información de Master 2
Soluciones
Conexiones SSL
• Se puede utilizar conexiones SSL para la transmisión del Binary Logs entre
Maestro y Esclavos.
• SSL debe de ser habilitado en ambos extremos. (Si cualquiera de los host no admite
conexiones SSL, la replicación a través de SSL no es posible)
Esclavo
Especificamos la información SSL
En el comando CHANGE MASTER TO:
Soluciones
Réplica semi-síncrona
• A partir de MySQL 5.7 se soporta la replicación asíncrona incorporada,
implementada a través de plugins.
ASINCRONA
Replicación de MySQL por defecto es asíncrona.
El maestro escribe eventos en su log binario, pero no sabe si o cuando un esclavo los ha y los ha
procesado.
SEMI-SINCRONA
Cuando un Esclavo, con replica SEMI-SINCRONA se conecta al Maestro, le indica esta posibilidad.
Si la replicación SEMI-SINCRONA está habilitada, un hilo envía las transacciones Validadas y espera a
que el Cliente SEMI-SINCRONO mande un OK de recepción.
El esclavo acusa recibo de los eventos de una transacción sólo después de los eventos se han escrito a
su Relay Logs y volcados a Disco.
Soluciones
Réplica semi-síncrona http://www.rubenortiz.es/2012/08/25/mysql-5-5-replicacion-semi-sincrona/
Soluciones
Réplica atrasada
• MySQL 5.7 soporta Réplicas retrasadas.
• Propósitos
Para protegerse contra errores de usuario en el maestro.
Para probar cómo se comporta el sistema /aplicación cuando hay un retraso.
Para simular el lag sin tener que simular la carga.
Notas y Consejos: Características y Problemas
• Por ejemplo:
• La Replicación basada SQL depende de la compatibilidad a nivel de SQL entre el maestro y el esclavo.
• Si el servidor maestro está trabajando con MySQL 5.7 (o posterior), no se puede replicar a un esclavo que
utiliza MySQL 5.6 (o anterior).
• Si utilizamos la función SLEEP () (MySQL 5.0.12 o superior), no se puede replicar en esclavo que utilice
MySQL 5.0.11 o anterior.
Auto_incrementales
• Replicación basada en SQL de AUTO_INCREMENT, LAST_INSERT_ID (), y los
valores TIMESTAMP se hacen de forma correcta, excepto:
Character Set
• Si el maestro tiene un conjunto de caracteres diferente ( character_set_server ),
al del Esclavo, se deben diseñar sus sentencias CREATE TABLE para que no se
basen implícitamente en el conjunto de caracteres base de datos
predeterminada.
Current_user()
• Cuando se utilice la función CURRENT_USER o alguna que implique el uso
implícito de ella (grant, revoke, etc…), MySQL «amplia» la información antes de
ser registrada en el Binary Logs.
Una tabla en el maestro puede tener más o menos columnas que copia del esclavo de la
tabla.
Las columnas de las tablas en el maestro y el esclavo pueden utilizar diferentes tipos de
datos, sujeto a ciertas condiciones.
• Los nombres de bases de datos y tablas deben ser los mismos tanto en el
maestro y el esclavo.
• Se puede replicar una tabla desde el maestro al esclavo de tal manera que la
copias en el esclavos tengan diferentes números de columnas, sujetas a varias
condiciones:
http://dev.mysql.com/doc/refman/5.7/en/replication-features-differing-tables.html
Notas y Consejos: Características y Problemas
Replication y TimeZones
• De forma predeterminada, los servidores maestro y esclavo asumen que están en
la misma zona horaria.
• Funciones como NOW() introduce en el Binary Log una marca concreta de tiempo.
Esto significa que el valor devuelto por la llamada a esta función en el maestro se replica
en el esclavo.
Notas y Consejos: Compatibilidad Versiones
• Posibles incompatibilidades:
• Podemos encontrar problemas si el Maestro utiliza sentencias SQL ya no
soportadas por el Esclavo.
• Hay que tener cuidado con la replicación en cadena y versiones diferentes entre
ellas: MySQL 5.7.1 MySQL 5.7.2 MySQL 5.7.4
• Servidores Esclavos
Deberemos: Apagarlos – Actualizarlo – Reiniciarlo – Reiniciar la Replicación
Los Relay Logs creados después de la actualización estarán en formato 5.7
• Servidores Maestros
Deberemos: Apagar – Actualizarlo – Reiniciarlo
Si hemos realizado un cambio a formato ROW, volver a cambiarlo a su valor Original
Los Binary Logs creados después de la actualización estarán en formato 5.7
• Procedimientos:
• Comprobación del registro de errores para que ver que sucede.
- -log-error=nombre o host_name.err
• Verifique que el maestro tiene el registro binario activado SHOW MASTER STATUS.
• Verifique que el maestro y el esclavo tanto se iniciaron con la opción - -server-id y que el
valor de ID es único en cada servidor.
• Procedimientos:
• Verificar los privilegios del usuario que se utiliza para la replicación.
• Compruebe que el nombre de host del maestro es correcto y que está utilizando el puerto
correcto para conectar con el maestro. (el valor predeterminado es 3306)
• Compruebe la conectividad tanto de Maestro como Esclavo. Revise Firewall para abrir los
puertos correspondiente
http://dev.mysql.com/doc/refman/5.7/en/bug-reports.html
• No reproducible a voluntad
http://dev.mysql.com/doc/refman/5.7/en/replication-bugs.html