Está en la página 1de 421

Objetivos

Al finalizar este curso, usted debería estar capacitado para:

• Describir la arquitectura de MySQL


• Instalar MySQL 5.6 y Realizar operaciones de inicio y apagado de MySQL
• Configurar las opciones del servidor MySQL en tiempo de ejecución
• Realizar tareas de DBA comunes mediante el uso de programas MySQL
• Acceso a los metadatos mediante INFORMATION_SCHEMA
• Conocer los bloqueos existentes en MySQL
• Conocer los diferentes motores de almacenamiento disponible en MySQL
• Conocer las copias de seguridad y restauración
• Conocer la Replicación en MySQL
Timing del Curso (30h) ( 5 horas/día) (6días)

Día Contenido Día Contenido


1 01.- Introducción a MySQL 4 09.- Motores de almacenamiento

02.- Arquitectura 11.- Gestión de Usuarios

03.- Administración del sistema

2 04.- Configuración del Servidor 5 13.- Mantenimiento de Tablas

05.- Cliente y Herramientas 14.- Exportando e Importando Datos

3 06.- Tipos de Datos 6 16.- Backup y Recuperación

07.- Obtención de Metadatos 17.- Introducción a la Replicación

08.- Transacciones y bloqueos


1.- Introducción

• MySQL Overview

• Productos, Servicios y Herramientas MySQL

• Sistemas operativos Soportados

• Certificaciones MySQL

• Entendiendo un poco MySQL


MySQL Overview

• MySQL es la Base de datos de código abierto más popular del mundo.

• Actualmente las estimaciones realizadas indican que hay mas de 15


millones de instalaciones activas.

• Cuando utilizamos LAMP, WAMP, XAMPP es la M


 Linux-Apache-Mysql-PHP
 Windows-Apache-Mysql-PHP
 Cualquiera--Apache-Mysql-PHP-Perl

• Incorporado por más de 3.000 ISVs (Vendedores independientes de SW) y OEMs


(original equipment manufacturer)

• Muy populares en las redes sociales (Facebook, Twitter, etc.)


MySQL Overview

• MySQL es un sistema de gestión de Base de Datos Relacional de código


abierto.

• Es desarrollado, distribuido y apoyado por Oracle.

• ¿Porqué Oracle?
• MySQL completa la oferta de Productos de Oracle.

• MySQL representa una solución de BBDD mejor de su clase para aplicaciones


basadas en la web.

• MySQL está preparada para web de próxima generación, móviles y aplicaciones


embebidas.

• Disponible en la Nube (iCloud)


MySQL Overview

• Características Generales
• Sistema Gestor de Base de Datos Relacional

• Sistema Open Source (Licencia GPL)


 Cualquier persona puede descargarlo desde Internet sin pagar nada
 El Software puede ser usado y modificado

• SGBDR rápido, fiable, escalable y fácil de usar.

• MySQL Server trabaja en entornos cliente / servidor o sistemas embebidos

• 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

• MySQL dispone de varios productos para cubrir todas las necesidades


del mercado.

MySQL Community Edition


• Versión GRATUITA MySQL Classic Edition
• Está disponible bajo licencia GPL Versión DE PAGO
Ideal para ser incluida en ISV y OEM
MySQL Cluster Community Edition
• Versión GRATUITA
• Está disponible bajo licencia GPL MySQL Standard Edition
• Cluster Versión DE PAGO
Aplicaciones de Lectura y OLTP

MySQL Enterprise Edition


Versión DE PAGO
Aplicaciones de Lectura y OLTP. HA , Backup

MySQL Cluster Carrier Grade edición


Versión DE PAGO
Alta disponibilidad, Tolerancia a Fallos
Cluster de alto Rendimiento
http://www.mysql.com/products/
Productos MySQL: MySQL Enterprise Edition

• MySQL Enterprise Edition es la versión más avanzada de MySQL.

• Incluye el conjunto más completo de características avanzadas junto con


un conjunto de herramientas de gestión y apoyo técnico.

• 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

• Como cualquier Base de Datos, no está aislada del sistema y dispone de


una serie de Conectores y API’s que lo facilitan:

 Conectores
– Proporcionan conectividad del Servidor MySQL con las aplicaciones externas
 API’s
– Proporcionan acceso a bajo nivel para los protocolos y recursos de MySQL.

• Conectores soportados por Mysql:


• PHP
• Perl
• Python
• Ruby
• C++ Wrapper

• Para introducir mysql dentro de aplicaciones utilizamos la biblioteca del


servidor libmysqld
Servicios MySQL

• MySQL proporciona diferentes tipos de servicios como son:


 Formación, Certificación, Consultoría, Lifetime Support
Servicios MySQL: Community Support

• Además de los anteriores servicios, MySQL dispone de foros que son un


importante recurso para la Comunidad.

• Nos permite interactuar con usuarios para comentar, discutir,


implementar soluciones relacionadas con el mundo MuSQL

• Estos foros están agrupados en agrupados en múltiples categorías:


 Listas de correo (http://lists.mysql.com/)
 Foros (http://forums.mysql.com)
 Artículos de la Comunidad (http://dev.mysql.com/tech-resources/articles)
 Blogs (http://planet.mysql.com/)
 Twitter (http://twitter.com/mysql_community )
 Eventos físicos y virtuales: (http://www.mysql.com/news-and-events)
– Developer Days
– Tech Tour
– Webinars
 Bug Tracking (http://bugs.mysql.com)
MySQL: Sistemas Operativos

• MySQL está disponible en multitud de Sistemas Operativos.

• En todas las plataformas se proporciona control y flexibilidad para


realizar las instalaciones, gestiones y mantenimiento.

• Los Sistemas Operativos mas habituales son:


 Windows (x86, x86_64)
 Linux (x86, x86_64)
 Oracle Solaris (SPARC, x86_64, x86)
 Mac OS X (x86, x86_64)

• 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

• Oracle dispone de diferentes cursos de MySQL orientados a las


posteriores certificaciones:

ILT Instructor-Led Training


LVC  Live Virtual Class
TOD  Training On Demand
Certificaciones MySQL

• Oracle dispone de diferentes certificaciones para MySQL

• Oracle Certified Associate (OCA)


 Numero examen : 1Z0-870
 Requisitos: Ninguno

• Oracle Certified Professional Developer 5.6 (OCDEV)


 Numero examen : 1Z0-882
 Requisitos : Ninguno

• Oracle Certified Professional Administrator 5.6 (OCADM)


 Numero examen : 1Z0-883
 Requisitos : Ninguno

• Oracle Certified Expert (OCE) http://education.oracle.com/certification.


 Numero examen : 1Z0-875
 Requisitos : OCP
Certificaciones MySQL

• MySQL pone a nuestra disposición una serie de Base de Datos de


Ejemplos y de Testing.

• Están disponibles para su descarga desde el sitio web de MySQL Developer


Zone:
http://dev.mysql.com/doc/indexother.html

NOTA:
Las bases de datos world_innodb y Sakila se utilizan para hacer demostraciones y prácticas en este curso.
02.- Arquitectura

• Describir el modelo de cliente / servidor


 Protocolos de comunicaciones
 MySQL memoria y espacio en disco
 Visión General de Motores de almacenamiento

• Uso de Disco y Memoria con MySQL

• Iniciar el cliente de MySQL

• Utilización de Scripts con MySQL


Describir el modelo de cliente / servidor

• MySQL opera en un entorno de red usando una arquitectura de


cliente/servidor.

• Disponemos de un programa central que actúa como servidor y varios


programas cliente conectarse al servidor para hacer peticiones.

• Una instalación de MySQL tiene los siguientes componentes


arquitectónicos necesarios
 Servidor MySQL
 Programas de cliente
 Programas que no son clientes de MySQL. (App, etc)
Describir el modelo de cliente / servidor

• La comunicación cliente/servidor MySQL no se limita a entornos


homogéneos (en los que todos los equipos ejecutan el mismo sistema operativo).

• Los programas cliente pueden conectarse al servidor que ejecuta en el


mismo o un host diferente.

• Los clientes MySQL permiten realizar gestiones como:


• recuperar, modificar, añadir o eliminar datos.

CLIENTE Descripción
mysql Emitir consultas y ver los resultados.

mysqladmin Administrar el servidor.

mysqlcheck Compruebe la integridad de las tablas de bases de datos

mysqldump Crear copias de seguridad lógicas

mysqlimport Importar archivos de texto

mysqlshow Mostrar base de datos, tablas y columnas

mysqlslap Emular múltiples conexiones de cliente para las pruebas de carga


MySQL Programas de Utilidad

• MySQL dispone de programas que son utilizados para evitar la pérdida o


corrupción de datos.

• Estas utilidades son ejecutadas desde línea de comando y algunas de


ellas requieren apagar el servidor para su correcto funcionamiento.

CLIENTE Descripción
innochecksum Comprobación de ficheros de tablas Innodb Offline

mysqlbinlog Procesos de ficheros Binary Logs

mysqlaccess Comprobación de privilegios de acceso

mysqldumpslow Resumen de los registros de Consultas Lentas

mysql_config_editor Credenciales de autenticación tienda en un archivo


cifrado en el cliente.
Servidor: mysqld

• La otra parte interviniente en la arquitectura C/S es el Servidor.

• Distinción entre Servidor y Host:


 Servidor:
– Un programa de software (mysqld) con un número de versión y una lista de
características
 Host:
– La máquina física en el que se ejecuta el programa de servidor

• El servidor gestiona el acceso a una colección de datos que residen


físicamente en el disco y en la memoria. (Colección de datos = Base de Datos)

• En el contexto de MySQL, la base de datos y el esquema son términos


que se pueden utilizar indistintamente.
Servidor: mysqld

Características del Servidor : mysqld

• Es un proceso único multi-hilo

• Gestiona el acceso a los datos en Disco y en Memoria.

• Soporta conexiones simultáneas de clientes

• Soporta múltiples motores de almacenamiento

• Soporta Tablas transaccionales y no transaccionales

• Utiliza la memoria en forma de:


 El almacenamiento en caché
 Buffering para tratamiento de operaciones
Procesos del Servidor
• La instancia del servidor MySQL es un programa llamado mysqld que se
compone de tres capas:
• Capa de Conexión:
 Maneja conexiones existe esta capa en todo el software de servidor web (conexiones de servidores web, de
correo, y LDAP.).

• 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

• Esta capa mantiene un threads por conexión, que se encarga de la


ejecución de consultas.

• Antes de que una conexión puede comenzar a enviar consultas SQL, la


conexión se autentica mediante la verificación del nombre de usuario,
contraseña y el cliente.
Procesos del Servidor: Connection Layer

• 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:

• Autorización y analizador (Parse)


 El analizador valida la sintaxis correcta, y la autorización a continuación, verifica que se permite que el usuario
conectado para ejecutar una consulta particular.

• 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.

• El almacenamiento en disco es barato y persistente, mientras que la


memoria es mucho más rápido.

• La manera exacta en la que se almacenan los datos depende del motor


de almacenamiento:

• Disco
 InnoDB
 MyISAM

• Memoria
 Memory

• Network
 NDB
Motores de almacenamiento: Visión global

• Un motor de almacenamiento es un componente de servidor utilizado


para almacenar y gestionar datos.

• Los Motores de almacenamiento se utilizan para:


• Almacenar los Datos
• Recuperar los datos
• Buscar y encontrar datos usando índices

• Los Motores de almacenamiento más comunes son:


• InnoDB: Motor transaccional de MySQL. Motor por DEFECTO a partir de MySQL 5.0

• MyISAM: Motor de almacenamiento NO Transaccional. Ideal para App OLTP

• Memoria: Almacena todos los datos de la memoria

• NDB: Es usado por MySQL Cluster para proporcionar topología escalable redundante para datos de
alta disponibilidad
Motores de almacenamiento: Visión global

• Cada motor de almacenamiento utiliza diferentes mecanismos de:


• Almacenamiento
• Indexación
• Niveles de bloqueos

• Cada tabla de una base de datos puede utilizar cualquiera de los motores
de almacenamiento disponibles.

• InnoDB es el motor de almacenamiento por defecto en MySQL y es ideal


para la mayoría de las situaciones.

• El motor MyISAM es utilizado para trabajar con tablas utilizadas en


operaciones OLTP Web ( Velocidad, No transaccionalidad, simplicidad)
Motores de almacenamiento: Visión global

• Las siguientes propiedades son dependientes en el motor de


almacenamiento:
• Soporte de almacenamiento:
 Un motor de almacenamiento puede almacenar los datos en un medio diferente, como disco, la memoria, o la
red.

• 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.

• Copia de seguridad y recuperación:


 Operaciones de Backup y Recuperación son diferentes dependiendo del Motor

• 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

• El servidor MySQL comprende una serie de programas ejecutables,


Archivos y Directorios creados en la instalación del Servidor MySQL.

• Se distinguen 2 tipos de Directorios Creados:

• Directorio de Datos
Global para todo el Gestor

• Directorio de Base de Datos


Uno por Base de Datos
Dentro del Directorio de DATOS

• Estos directorios dan forma a la


gestión del Servidor y deben de estar
protegidos para evitar su acceso
desde el Sistema Operativo.
Uso del Disco con MySQL

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.

• InnoDB Log files


Contiene todos los registros de Binary Logs para todas las Bases de Datos

• InnoDB System Tablespaces


Contiene el diccionario de datos, deshacer registro, y buffers de las tablas InnoDB..
Uso del Disco con MySQL

Directorio de Base de Datos


• Cada base de datos tiene un único directorio bajo el directorio de datos.

• Los directorios de bases de datos almacenan la siguiente:


 Los archivos de datos:
Los archivos de datos que son específicos para el motor de almacenamiento.
Estos archivos pueden incluir también metadatos o la información de índice, dependiendo del motor de
almacenamiento utilizado.

 Los archivos de formato (.frm):


Contiene una descripción de cada tabla o vista de la estructura, que se encuentra en el directorio de la
base de datos correspondiente

 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 almacena en la BBDD mysql información de:


• Usuarios, Privilegios, eventos
• husos horarios y rutinas almacenadas.
Uso de Memoria con MySQL

• MySQL reserva memoria para atender a los clientes y dar soporte a las
estructuras de Bases de Datos y Gestor.

• La reserva se hace en dos direcciones:

• Nivel Global (memoria por Instancia Servidor)


 Asignado una vez, cuando se inicia el servidor y se libera cuando se apaga el servidor.
 Esta memoria se comparte entre todas las sesiones.
 Usada para Buffers y caches
 Cuando toda la memoria física se ha agotado, el sistema operativo realiza Swap.

• Nivel Sesión (memoria por Sesión Cliente)


 Dinámicamente asignada por sesión.
 La memoria es liberada cuando la sesión termina o ya no es necesaria
 Es usada para la manipulación de resultados de la consulta.
 La variable sort_bufferr_size determina el tamaño para cada sesión
Iniciar el cliente de MySQL

• Para conectar con el Servidor utilizaremos el cliente por defecto de


MySQL llamado mysql
 Es un cliente en línea que permite ejecutar consultas y obtener resultados.

• También disponemos de otros clientes como:


• Workbench
• Navicat
• Sequel Pro
• SQLyog
• TOAD
Iniciar el cliente de MySQL

• Después de invocar el cliente mysql nos aparece algo bastante


interesante:
• Identificación de la conexión y la versión del servidor
• El comando de ayuda

• 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

• Cuando se utiliza de forma interactiva, mysql lee consultas que se


realizan en el teclado.

• El cliente mysql también puede aceptar la entrada de un archivo que


contiene sentencias de SQL.

• Este fichero se ejecutará como archivo por lotes de SQL y lo


ejecutaremos mediante la orden
Mysql> SOURCE [ nombre_completo_fichero]

• Archivo por Lotes


• Es un archivo de texto plano que contiene declaraciones en el mismo formato que se utiliza para introducir las
declaraciones de forma interactiva (SQL)
• Cada sentencia debe terminar con un terminador.
Utilización de Scripts con MySQL

NOTAS:
• El archivo debe encontrarse en el equipo cliente donde se está ejecutando el cliente
mysql.

• El nombre del archivo debemos indicarle con ruta absoluta.

• La ejecución del comando SOURCE NO finaliza en punto y coma ( ; )

• Si el fichero provocará un error, el resto del fichero se ignora.

• Para ejecutar el archivo completo, independientemente de si se producen errores,


invocar mysql con el - -force o la opción -f.

• Un archivo script puede contener comandos SOURCE para ejecutar otros archivos.
03.- Administración del sistema

• Distribuciones de Software de servidor MySQL

• Instalar el servidor MySQL


 Linux
 Windows

• Estructura de archivos en la instalación del servidor MySQL

• Iniciar y detener el servidor MySQL

• Múltiples Instancias de MySQL en un único host


Distribuciones de Software de MySQL

• El Servidor de MySQL está disponibles en varios sistemas Operativos,


entre ellos:
 Linux, Windows, Max OS, Oracle Solaris

• También está disponible en dos formatos: Binarios , Source/Codigo


• Binarias:
 Son distribuciones PRECOMPILADAS, listas para ser ejecutadas y están disponibles para las versiones
Enterprise y MySQL Community Server.

 Estos binarios son las versiones oficiales probadas de Oracle.

• 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

• Este tipo de distribuciones se utiliza cuando:


• No existe un binario para su plataforma

• Necesita habilitar una característica única que aparece sólo en Código fuente
 (soporte de depuración completa).

• Es necesario desactivar una característica que no se necesita y no es posible quitarla en binarios.


 Para que utilice menos memoria en la ejecución  Motores de almacenamiento Opcionales

• Es necesario para acceder al código fuente más reciente

• Este tipo de distribuciones se pueden instalar en cualquier ubicación


deseada.
 Por defecto en Linux /usr/local/mysql.

• Deberemos de realizar la compilar para su utilización.

Manual: http://dev.mysql.com/doc/mysql/en/source-installation.html.
Instalación de MySql

– Cuestiones generales sobre la instalación

– Instalación de MySql en Windows

– Instalación de MySql en Unix/Solaris

– Puesta en marcha y comprobación.

– Arranque y parada.

http://dev.mysql.com/doc/refman/5.6/en/installing.html.
Instalar MySQL Server

Cuestiones generales sobre la Instalación

1.- Antes de instalar MySQL, se debería hacer lo siguiente:

 Determinarse si la plataforma donde se desea hacer la instalación está


soportada.

 Si queremos hacer una instalación de TESTING, DESARROLLO,


PRODUCCION.
– No todas las plataformas son igualmente aptas para ejecutar MySQL.
Instalar MySQL Server

Cuestiones generales sobre la Instalación

2.- Elegirse la distribución que se instalará. Se debe elegir entre:


- Una distribución binaria
- Una de código fuente.

• Probablemente la elección más frecuente sea la distribución binaria.

• Hay distribuciones binarias disponibles en formato nativo para muchas


plataformas
 Ficheros RPM para Linux
 Paquetes de instalación DMG para Mac OS X,
 Ficheros comprimidos Zip y tar.
Instalar MySQL Server
Cuestiones generales sobre la Instalación

3.- Para obtener las diferentes distribuciones y versiones mas actuales


deberemos conectarnos a los siguientes enlaces

 Community: http://dev.mysql.com/downloads
http://dev.mysql.com/downloads/windows/installer/5.6.html
 Enterprise: https://edelivery.oracle.com/

• En este curso se utiliza Windows como Sistema Operativo, pero


indicaremos la instalación en Sistemas Unix/Linux

• MySQL Installer instala los siguientes productos de MySQL:


 MySQL Server
 Todos los conectores compatibles
 Workbench y ejemplos
 Bases de datos de ejemplo
 Documentación
Instalar MySQL Server

Cuestiones generales sobre la Instalación

4.- Comprobación de integridad

 Antes de instalar deberíamos comprobar la integridad de lo descargado.

 Actualmente casi todas las forma de instalación de MySql dispone de su


comprobación de Integridad (MD5, Firmas Criptograficas, RPM)
Instalar el servidor MySQL: Windows
Instalación en WINDOWS
• El instalador para la versión Windows de MySQL 5.X, contiene:
 Interfaz gráfica de Instalación
 Instalación automáticamente MySQL Server
 Todos los conectores compatibles
 Workbench y ejemplos
 Bases de datos de ejemplo
 Documentación
 Creación del fichero de opciones
 Inicialización del servidor

• Está disponible en 2 formatos:


- Distribución binaria.
x86-32bits, x86-64bits

- Distribución con el código fuente.


Instalar el servidor MySQL: Windows

Instalación en WINDOWS
• REQUISITOS

 Sistema Operativo 32 bits / 64 bits

 Soporte protocolo TPC/IP

 Copia distribución binaria de MySQL

 Descompresor de ficheros ZIP

 Espacio mínimo de disco 500 Mb

 Sistema de ficheros NTFS


Instalar el servidor MySQL: Windows

Instalación en WINDOWS.
Pasos
1. Lanzar el asistente de configuración

2. Escoger el tipo de instalación. (personalizada)

3. Posibilidad de cambio de directorio y elección o no de componentes a


instalar.

4. Botón de Instalar. (Posibilidad de creación de cuenta soporte MySQL)

5. Wizard de Configuración de Servidor MySQL.

6. Selección del tipo de configuración del servidor ( Detallada / Estandar )

7. Elección del tipo de Servidor ( Desarrollo / Servidor / Dedicado )


Instalar el servidor MySQL: Windows
Instalación en WINDOWS
Pasos
8. Tipo de BBDD a utilizar ( Multifuncional / Transaccional / No transacción )

9. Ubicación de los ficheros InnDB

10. Configuración de conexiones concurrentes ( DSS, OLTP, Manual)

11. Configuración de Redes ( puerto: 3306 )

12. Elección del Conjunto de Caracteres ( Latin1, UTF8, Manual )

13. Creación del Servicio en Windows.

14. Seguridad de Root y usuario Anónimo. EJECUTAR

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

• El asistente de configuración MySQL coloca el fichero my.ini en el directorio de


instalación del servidor MySQL.

• Puede ser editado por cualquier editor básico.

• Los programas cliente y las utilidades de MySQL ( mysql y mysqldump ) podrá


localizar el fichero siempre que esté introducido el directorio en la variable
PATH del sistema.
Iniciar / Detener el servidor MySQL: Windows

• El arranque del Servidor MySQL en Windows puede ser configurado


mediante:

• 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

• Detener el servidor mediante


c:\> mysqladmin shutdown.

• También podemos:
c:\> net start MySQL y net stop MySQL
DATA DIRECTORY: General

• La estructura general del directorio de datos (independientemente del sistema


operativo) es el siguiente:

• Las estructuras dentro de los directorios dependen del motor de


almacenamiento.

• Cada tabla tiene un archivo * .frm con su estructura, independientemente


del motor de almacenamiento que se utiliza.
DATA DIRECTORY: General

• El servidor MySQL cambia su directorio de trabajo actual a su directorio


de datos cuando se comienza a ejecutar.

• El Servidor MySQL debe de tener privilegios para poder crear y gestionar


archivos el directorio de datos.

• El servidor MySQL mapea


• Base de datos  Directorio
• Tabla  Fichero
• Trigger  Fichero

• 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

• La forma recomendada de instalar MySQL en una distribución de Linux


basada en RPM es mediante el uso de los paquetes RPM.

• Los archivos RPM están disponibles para muchas plataformas, como:


 Oracle Linux, SuSE y otras versiones de Linux.

• Existen mas distribuciones disponibles para otros tipos de sistemas,


incluyendo Oracle Solaris, FreeBSD y Mac OS X.

• Oracle ofrece dos tipos de paquetes RPM de MySQL:


• Independientes
 Estos RPMs, deben de ser compatibles con todas las versiones de Linux
que soportan los paquetes RPM y el uso de glibc 2.3

• Específicas
 Destinado a una plataforma Linux Determinada.
Instalar el servidor MySQL: Linux
Instalar el servidor MySQL: Linux

PASOS

0. Creación del usuario mysql

1. Descargar el fichero TAR, RPM correcto

2. Instalar el paquete mediante el comando : $ rpm –i nombre_fichero


 Se extraen los ficheros en las ubicaciones predefinidas

 Crea SCRIPD de inicio llamado mysql en el directorio /etc/init.d

 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

• Cuando se descomprimen los archivos RPM, los archivos se extraen y se


colocan en diferentes lugares de forma automática.
Iniciar el servidor MySQL: Linux

• El servidor puede iniciarse en Linux utilizando varios métodos, aunque el


más habitual es el siguiente:

Otras formas de arranque ( /usr/local/mysql/… )

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 Invoca el servidor MySQL de forma manual

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

• Podemos detener el Servidor de MySQL mediante los siguientes


comandos

Otras formas de parada son:


mysqladmin shutdown
mysql.server stop
mysqld_multi stop
Seguridad del servidor MySQL:Linux

• Al instalar MySQL desde un paquete RPM, se crear una contraseña


aleatoria para el root y se guarda en el archivo .mysql_secret en el
directorio home del usuario de instalación.

• Para el resto de las instalaciones, las contraseñas iniciales están en


blanco.

• Como resultado, se deben establecer contraseñas tan pronto como se


haya iniciado el servidor.

• Mediante la invocación del comando mysql_secure_installation, que le


pide a determinar qué acciones realizar. (Solo Unix y Linux )
04.- Configuración del Servidor

• Ficheros de configuración del servidor MySQL

• Variables dinámicas de servidor

• Modos de SQL en el servidor MySQL

• Archivos de registro Logs

• Archivos de Registro Binario


Ficheros de configuración del servidor MySQL

• Cuando ejecutamos un Servidor MySQL, podemos especificar las


opciones de inicio de diferentes formas:
 Desde la línea de comandos al ejecutar el servidor
 O desde un fichero de opciones creado

• Los programas clientes que se conectan a MySQL también pueden


utilizar los mismos métodos:
• Opciones incorporadas en el cliente o
• Ficheros de opciones configurados

• El servidor dispone de una serie de valores precompilados para sus


variables de configuración si no se le pasa un valor concreto.
Ficheros de configuración del servidor MySQL

• La prevalencia de valores es la siguiente:


Predeterminadas  Fichero Configuración  Opciones en Línea
 Las opciones de línea prevalecen sobre las del fichero de configuración
 Las opciones del fichero prevalecen sobre las predeterminadas

• Añadir opciones de línea son utilizadas para:


• Modificar ubicación de directorios y archivos importantes.

• Control ficheros LOG’S

• Re-escritura de valores incorporados, por defecto, del servidor.

• Activación / Desactivación de los motores de almacenamiento


Ficheros de configuración del servidor MySQL

• Oracle recomienda el uso de ficheros de configuración por los siguientes


motivos:
 No hay necesidad de especificar las opciones cada vez que se inicia el servidor
 Menor posibilidad de error cuando introduces opciones
 La oportunidad de revisar rápidamente un solo archivo para ver la configuración del servidor

• Dentro de estos ficheros podemos especificar SECCIONES


diferenciadoras.

• Estas secciones son buscadas por los diferentes programas MySQL


(Clientes y Servidor) para obtener una configuración determinada.

• Los archivos de opciones son TEXTO plano que pueden ser creados
mediante un simple editor de texto.
Ficheros de configuración del servidor MySQL

• Los ficheros de opciones se organizan en Grupos/Secciones.

• Cada Grupo/Sección va precedido por una cabecera que da nombre al


grupo/seccion [nombre del grupo].
• Por lo general, el nombre del grupo es la categoría o nombre del programa al que se aplica el grupo
de opciones.

[ 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.

[ mysqld ], [ mysqld-5.6 ], y [ mysqld_safe ]


Se utiliza para especificar opciones para diferentes
versiones de servidor o métodos de inicio
Ficheros de configuración del servidor MySQL

• En MySQL podemos pasar parámetros en varios formatos:

• 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)

Las opciones Largas se indican en minúsculas


Las opciones Cortas se indican en MAYUSCULAS y minúsculas
Ficheros de configuración del servidor MySQL

• Para escribir una opción en un fichero de opciones, utilizaremos el


formato largo, igual que en línea de comandos pero sin guiones.
opción = valor

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

Localización de los ficheros 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.

• Usted puede ver estos lugares con la opción --help.


Localización de los Archivos de opciones

Localización de los ficheros de opciones

• Windows
 En Windows, los programas MySQL busca ficheros de opciones en el orden siguiente:
C: \Program Files\MySQL\MySQL Server <version>

my.ini y my.cnf en el directorio de Windows

C:\my.ini y C:\my.cnf

• Unix
 En UNIX, los programas MySQL leen los archivos siguientes en orden:

Opciones GLOBALES /etc/my.cnf /etc/mysql/my.cnf

Opciones especificas usuarios /usr/etc/my.cnf

Opciones Locales Usuario conexión .my.cnf


Opciones disponibles

• Las opciones disponibles se pueden agrupar en varias categorías


LOGGING
Posibilidad de habilitar los LOGS del Sistema
general_log - log-bin - slow_query_log

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.

• Esto lo hacemos por tener definidas diferentes configuraciones de


arranque tanto en Servidor como en cliente.

- -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.

• La salida consiste en una opción por cada línea de salida

Ejemplo de los Grupos mysql client


Ofuscación de Autenticación

• No es una buena práctica especificar la contraseña en línea de


comandos.

• Tampoco incorporarla a una fichero de texto plano, sin encriptación ni


nada, pues es fácilmente visible a cualquier persona con acceso de
lectura al fichero de opciones.

• La utilidad mysql_config_editor le permite almacenar las credenciales de


autenticación en un archivo de inicio de sesión codificado llamado
.mylogin.cnf.

• La ubicación del archivo es


 UNIX  Directorio personal del usuario actual en Linux y UNIX
 WINDOWS  En el Directorio %APPDATA%\MySQL
Ofuscación de Autenticación

• El archivo puede ser leído por los programas cliente MySQL para obtener
credenciales de autenticación para conectarse al servidor MySQL.

• El método de cifrado es reversible.

• El fichero .mylogin.cnf está compuesto por «login paths» similar a los


grupos de opciones

 Cada "ruta de acceso", sólo permite un conjunto limitado de opciones:


– USUARIO, CLAVE, Opciones del HOST y opciones ESPECIFICAS

 Ruta de Acceso  Conjunto de valores que indican la máquina del servidor y las
credenciales para autenticarse con el servidor.

 Los clientes deben de indicar el login-path


Ofuscación de Autenticación

Como crear un LOGIN-PATH


• Deberemos invocar la orden mysql_config_editor utilizando / o no / la opción
- - login-path

• Sino utilizamos la opción anterior, se utiliza el login-path [client] por defecto.

• La anterior invocación se creara dentro del grupo [ client ]


Ofuscación de Autenticación

• Para ver un LOGIN-PATH en texto claro

• Para ver todos los LOGIN-PATH en texto claro

• Eliminar un LOGIN-PATH
Variables dinámicas de servidor

• El servidor MySQL mantiene muchas variables de sistema que indican


cual es el estado del Servidor MySQL.

• Estas variables:
• Tienen un valor predeterminado en el inicio del Servidor.

• Pueden ser definidas/redefinidas mediante:


 Utilización de línea de comandos.
 Utilizar un fichero de opciones.

• Estas variables pueden ser referenciadas dentro del Sistema en expresiones.

• 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.

• Pueden existir variables que contengan valores a nivel Global o Sesión o


en ambas.
• GLOBALES
 key_buffer_size, query_cache_size

• SESION
 timestamp, error_count

• AMBAS
 sort_buffer_size, max_join_size
Variables dinámicas de servidor

• Podemos modificar la mayoría de las variables dinámicamente mientras el


servidor se está ejecutando, modificando el funcionamiento del mismo sin
reiniciarlo.

 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

• MySQL también ofrece información de acerca del estado actual del


Servidor. (STATUS).

Podemos utilizar este comando


sin ningún tipo de privilegio,
sólo deberemos poder
conectarnos al servidor.

• De forma similar a las variables dinámicas, disponemos de variables de


estado: Globales y Sesión
Modos de SQL en el servidor MySQL

• Una de las cosas que permite MySQL es la posibilidad de personalizar el


servidor para que se comporte de formas diferentes.
 Qué sintaxis de SQL permite el servidor.
 Permitir o no truncamiento de valores de forma automática.
 Case-Sensitive o Non-Case-Sensitive
 Ser permisible con operaciones de Transacciones o no, etc

• Los modos SQL existentes en MySQL rigen dichos comportamientos.

• Estos modos pueden ser activados de diferentes forma y diferente


ámbito:
• Arranque del Gestor
 Se puede establecer el modo SQL por defecto arrancando mysqld con la opción
- - sql-mode = ‘ valor ‘

• Modificando la variable [ GLOBAL / SESSION ] sql_mode


Modos de SQL en el servidor MySQL

• Modificando la variable sql_mode

 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.

• Para mostrar el valor de las variables anteriores


Modos de SQL en el servidor MySQL

• El valor de la variable sql_mode puede ser


• Una cadena vacía
• Nombre de un modo SQL, o
• Un conjunto de nombres de modo SQL separadas por comas.

• Si el valor está vacío o contiene más de un nombre de modo, debe ser


entre comillas.

• Si el valor contiene un solo nombre de modo, las comillas son


opcionales.

• Los valores del modo SQL no distinguen entre mayúsculas y minúsculas.


Modos de SQL en el servidor MySQL

• MySQL es, normalmente, más permisivo en el manejo de datos que


muchos sistemas de bases de datos tradicionales.

• 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.

 Podemos utilizar modos estrictos en tablas InnoDB, STRICT_TRANS_TABLES y


STRICT_ALL_TABLES
– Valores FUERA DE RANGO
– Falta de VALORES en columnas NO NULL
– Valores INCOMPATIBLES

Causa un error en lugar de una advertencia.

Esto termina la declaración, y provoca un rollback para las tablas transaccionales.


Modos de SQL en el servidor MySQL

• Podemos distinguir 3 tipos de sql_modes:


• Modos Single
 Son aquellos que sólo cambian un comportamiento determinado

 NO_ZERO_DATE No se permiten fechas tales como '0000-00-00‘

 ERROR_FOR_DIVISION_BY_ZERO No permite la división por cero  Error

 STRICT_TRANS_TABLES Activa el modo restrictivo para todos los motores, aborta las
operaciones y realiza un Rollback si datos no correctos

 STRICT_ALL_TABLES Permite la inserción, pero dejarán de insertar o actualizar tan pronto


como haya una fila no válida

• Modos sintaxis
 Algunos modos permiten cambiar la interpretación de la Sintaxis de las órdenes

 IGNORE_SPACE Permite espacios entre el nombre de la función y el carácter "("

 ANSI_QUOTES Permite usar (`) o (") indistintamente

 PIPES_AS_CONCAT Permite utilizar el carácter ( | ) para concatener valores


Modos de SQL en el servidor MySQL

• Podemos distinguir 3 tipos de sql_modes:


• Modos combinados
 Son aquellos que permiten múltiples modos.

Modo Definición Contiene


ANSI Cambiar la sintaxis y el comportamiento para REAL_AS_FLOAT, PIPES_AS_CONCAT,
ajustarse mejor al SQL estándar. ANSI_QUOTES, IGNORE_SPACE, TRADITIONAL

TRADITIONAL Hace que MySQL se comporte como un STRICT_TRANS_TABLES,


sistema de base de datos SQL STRICT_ALL_TABLES, NO_ZERO_IN_DATE,
"tradicional". NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION
MYSQL323 Mejoran compatibilidad con versiones
MYSQL40 anteriores o con otro Sistemas de Base de
MSSQL Datos
ORACLE
POSTGRESQL
Modos de SQL en el servidor MySQL
MODO: NO_ENGINE_SUBSTITUTION

• En versiones de MySQL Server 5.6.6 y posteriores, el modo SQL por


defecto es NO_ENGINE_SUBSTITUTION.

• 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

• MySQL dispone de diferentes ficheros LOGS para obtener y guardar


información de las actividades del Servidor.

• El servidor crea todos los archivos de registro (LOGS) en el directorio de


datos, por defecto.

• Puede utilizar estos registros para:


• Evaluar el estado de funcionamiento del servidor
• Recuperación de datos después de un accidente, con fines de replicación
• Ayudar a determinar qué consultas se ejecutan lentamente
• Seguridad y cumplimiento de normativa, etc

• Ninguno de estos registros está activado por defecto (excepto el registro de


errores en Windows).

• Podemos habilitarlos indicando la opción correspondiente al iniciar el


servidor.
Archivos de registro Logs
Fichero LOG Descripción
Error Log • Contiene información que indica cuándo se inicia y se detiene mysqld

• 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 servidor escribe información en este registro cuando los clientes se conectan o


desconexión, y registra cada sentencia SQL recibido de los clientes.

• 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.

• Las consultas Administrativas NO se registran.


Binary Log • contiene los "eventos" que describen los cambios de base de datos,
• Creación de tablas o Modificaciones en los datos de la tabla, etc.

• Es utiliza en operaciones de Replicación y Recuperación


Audit Log • Aparece como un pluggin en Enterprise Manager
• Es utiliza para realizar auditoria de eventos en el Sistema
Archivos de registro Logs

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)

• El registro binario contiene los "eventos" que describen los cambios de


base de datos, tales como:
 Creación de tablas
 Modificaciones de datos de la tabla.
 Duración de cada instrucción, etc

• El registro binario tiene dos propósitos importantes:


 Recuperación de Datos
– Recuperación de copia de Seguridad y aplicación de Registros Binarios

 Replicación de Sistema.
– Permite almacenar todos los cambios de datos de un maestro y replicarlo en los esclavos
Registro Binario (Binary Log)

• El registro binario no contiene operaciones de tipo SELECT, SHOW, etc,


que no contenga modificaciones de datos.

• Rotación de binary Log


• Entendemos por rotación de Binary Log el proceso de cierre de un fichero anterior y
creación de uno nuevo.

• Los ficheros Binarios son ROTADOS cuando:


• El servidor MySQL es reiniciado.
• Se alcanza el tamaño máximo permitido (max_binlog_size).
• Un comando FLUSH LOGS SQL es ejecutado.

• Binary Log es independiente del motor de almacenamiento.


Registro Binario (Binary Log). Formatos

• Los eventos producidos en el sistema, se pueden registrar en los


Binary Log’s con diferentes formatos:

• Basado en Sentencias SQL (SBR Statement-Based-Replication) Defecto en 5.7


 El Gestor escribe Sentencias SQL en el Binary Logs.
 MySQL versión 5.1.4 y anteriores.

• Basado en Filas (RBR Row-Based-Replication)


 El Gestor escribe eventos que indican cómo se cambian las filas de tabla individuales.
 No se guardan la sentencia SQL a ejecutar sino cambios individuales

• 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.

Tanto un formato como otro, tiene sus PRO’s y sus CONTRA


Registro Binario (Binary Log). Formatos

• Para definir un determinado formato, debemos modificar la variable


- -binlog-format=format

• Valores Soportados:
 STATEMENT  Consultas SQL
 ROW  Filas
 MIXED  Mixto

• El formato de los fichero Binary Logs pueden ser cambiado en tiempo


de ejecución a nivel de Gestor o a nivel de Sesión, mediante la
modificación de la variable binlog_format
Registro Binario (Binary Log). Formatos

• Para conocer el formato actual variable binlog_format


Binary Log. Contenido

• Los fichero Binary Logs son ficheros binarios, por lo que no pueden
ser visualizados con los visores normales.

• MySQL dispone de la utilidad mysqlbinlog para convertir los ficheros


Binary Logs en formato texto.

• El programa mysqlbinlog se ejecuta desde la línea de comandos,


especificando como parámetros los ficheros LOG’s que deseamos
ver.
Binary Log. Borrado

• Los fichero Binary Logs son mantenidos en el Sistema Operativo y no


son borrados de forma predeterminada.

• Para eliminar automáticamente los registros binarios anteriores


deberemos indicar un número específico de días duración
(expiración).

• Podemos borrar los Binary logs:


• Definiendo un tiempo de expiración

SET GLOBAL expire_logs_days = 7;

• Utilizando el comando PURGE

PURGE BINARY LOGS BEFORE now();


PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO 'mysql-bin.000010';
05.- Clientes MySQL

• Programas cliente en MySQL

• Cliente mysql
 Opciones con conexión
 Opciones de Identificación
 Opciones Especiales

• Archivos de opciones para configurar clientes

• Describir MySQL Utilidades


Programas clientes en MySQL

• MySQL dispone de multitud de posibilidades para la conexión a su


Servidor de Base de Datos.

• Podemos utilizar programas cliente desde la línea de comandos, desde


una interfaz gráfica de usuario, o a través de la web.

• Línea de comandos (sh Unix / cmd Windows)


 Mysqldump Para realizar copias de seguridad de datos
 Mysqlimport Para la importación de copias de seguridad
 mysqladmin: Para administrar un servidor MySQL
 mysqlslap: Para la simulación de múltiples clientes que acceden al servidor MySQL

• GUI
 MySQL Workbench
 MySQL Enterprise Monitor

• Web
 PhpMyAdmin
Cliente mysql

• El programa, de línea de comandos, mas utilizado es mysql.

• Este cliente se puede modificar de varias formas dependiendo de si esas


modificaciones son permanente o temporales.

• Online
 Mediante opciones añadidas al comando cuando lo invocamos

• Fichero (my.ini o my.cnf)


 Introduciendo las opciones en el fichero de configuración sin necesidad de incorpóralas en la
llamada del comando
Cliente mysql

• Las opciones en línea, pueden ser introducidas de 2 formas:

• 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)

Las opciones Largas se indican en minúsculas


Las opciones Cortas se indican en MAYUSCULAS y minusculas
Cliente mysql: Conexión

• Opciones de Conexión con el Servidor

• Para conectarse a un servidor necesitamos conocer, protocolo, host, puerto, etc.


Cliente mysql: Conexión

• Opciones de Conexión con el Servidor

• 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

• Opciones de Conexión con el Servidor

• 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

• Opciones de Conexión con el Servidor

• 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

• Opciones de Conexión con el Servidor

• 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.

 MySQL utiliza el algoritmo de gzip para la compresión.


Cliente mysql: Autenticación

• Opciones de Autenticación de usuarios


• Para conectarse a MySQL, debemos identificarnos con un nombre de usuario y una contraseña.

• 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.

• El usuario debe de estar dado de alta en el Sistema en la tabla mysql.user.

• Cada entrada en la tabla mysql.user especifica tanto el nombre de usuario y un nombre de host del
cliente.
Cliente mysql: Autenticación

• Opciones de Autenticación de usuarios

• 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

• Cuando ejecutamos un cliente de conexión a MySQL las opciones las


podemos indicar en línea o se pueden leer de los archivos de
configuración.

• Ambas fórmulas (opciones en linea y fichero de comandos) pueden ser combinadas.


 Si se especifica la misma opción con un valor diferente tanto en la línea de comandos y en un
archivo de opciones, el cliente utiliza el valor de la opción de línea de comandos.

• Los ficheros de configuración están divididos en secciones [ sección ].


 Cada Grupo o Sección comienza con el nombre del cliente entre corchetes.
 Cuando un Cliente lee el fichero, se aplican las opciones de ese grupo o sección.
 Por ejemplo, el grupo [mysql] contiene opciones utilizadas por el programa cliente mysql.

• Cuando utilicemos un nuevo programa podríamos crear una nueva


sección e introducir ahí las opciones para ese nuevo cliente
Archivos de opciones para clientes

• Los grupos especiales [client] y [servidor] se utilizan para especificar las


opciones que todo programa cliente y servidor deben utilizar.

• 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

Localización de los ficheros 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.

• Usted puede ver estos lugares con la opción --help.


Archivos de opciones para clientes

Localización de los ficheros de opciones

• Windows
 En Windows, los programas MySQL busca ficheros de opciones en el orden siguiente:
C: \Program Files\MySQL\MySQL Server <version>

my.ini y my.cnf en el directorio de Windows

C:\my.ini y C:\my.cnf

• Unix
 En UNIX, los programas MySQL leen los archivos siguientes en orden:

Opciones GLOBALES /etc/my.cnf /etc/mysql/my.cnf

Opciones especificas usuarios /usr/etc/my.cnf

Opciones Locales Usuario conexion .my.cnf


Archivos de opciones para clientes

• Podemos hacer que un cliente lea un fichero determinado sin que sean
los ficheros definidos anteriormente.

• Esto lo hacemos por tener definidas diferentes configuraciones de


arranque tanto en Servidor como en cliente.

- -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

• MySQL dispone de la visualización de resultado anteriormente


presentada, pero también podemos verlo con formato FORMULARIO

• Utilizaremos la terminación \G para que se produzca dicha salida sin


poner la finalización ;
 Se recomienda utilizar esta anotación cuando el número de columnas no sea muy elevado,
pues la lectura de resultados puede ser dificultosa.

También puede ser utiliza en


clausulas que no sean SELECT
Salidas especiales: Batch / Interactivo

• 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

• Podemos indicar otros formatos de salida de datos


Herramientas MySQL GUI’s

• Entre las herramientas gráficas, nos encontramos con:

MySQL Workbench y MySQL Enterprise Monitor.

• 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.

• MySQL Workbench se utiliza para múltiples tareas:


• Escribir y ejecutar:
 Consultas y Scripts SQL

• Modificar:
 Datos
 Modelos de bases de datos

• Administrar el servidor MySQL

• Ayudar a la migración de datos.


Características de Workbench GUI

• MySQL Workbench está disponible en dos versiones:

• Community Edition (OSS):


 Es la base de todas las ediciones Workbench

 Con todas las características disponibles para versiones gratuitas.

 De código abierto GPL (licencia pública general), disponible gratuitamente desde el sitio web de MySQL

• Standard Edition (SE):


 Ampliación Comercial de la versión OSS.

 Dispone de Características avanzadas:


– Validación de esquemas, modelos, herramientas de documentación DBDoc.

 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.

ADMINISTRADOR DEL SERVIDOR


 Iniciar y detener el servidor.
 Editar la configuración del servidor de base de datos.
 Administrar usuarios.
 Importar y exportar datos.
Características de Workbench GUI

FUNCIONALIDADES
• MySQL Workbech GIU (SSO) tiene 3 funcionalidades básicas:

MIGRACION DE BASE DE DATOS


 Migración de tablas y objetos de otras RDBMs a MySQL.
 Convertir las aplicaciones existentes para migración entre plataformas.
 Actualizar a versiones posteriores de MySQL.

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.

SQL Code Snipper


Puede utilizar fragmentos
existentes para el desarrollo
rápido.

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

Data Modeling EER


EER Diagram
Diagrama EER actual

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

• MySQL Enterprise Monitor (MEM) es un sistema de monitorización


basado en la web y para mejorar la productividad.

• MEM permite:
• Realiza recomendaciones para optimización del Sistema
 Eliminar las vulnerabilidades de seguridad.
 Mejorara la replicación.
 Optimizar el rendimiento, etc

• Puede incorporarse totalmente dentro de un Firewall sin ningún problema.

• Buscar y corregir problemas con sus aplicaciones de bases de datos MySQL

• MEM está disponible con las siguientes versiones:


• MySQL Enterprise Edition
• MySQL Cluster Carrier Grade Edition.
Características de Monitor GUI MySQL Enterprise

FUNCIONALIDADES
• Panel Empresarial
 Gestión de todos los servidores MySQL desde una consola consolidada.

• Gestión de servidor / grupo


 Soporta auto-detección, agrupación, y el seguimiento de replicación.

• 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)

• Nos permiten analizar, informar y recibir recomendaciones de diferentes aspectos del


Sistema de Forma automática.

Advisor Descripción
Upgrades - Comprueba versiones actualizadas y securizadas

Administración - Adm general de la BBDD, recuperaciones y valores de configuración

Backup - Copias de seguridad, estados y servidores sin backup

Seguridad - Ajuste de vulnerabilidades de seguridad de Servidor

Replicación - Monitoriza problemas de la replicación Maestro /Esclavo

Memoria - Uso de memoria, medidas del Servidor, cachés, etc

Rendimiento - Métricas de servidores, ajustes y variables a modificar

Esquema - Cambios no planificados en Esquemas / Bases de datos


07.- Obtención de Metadatos

• Métodos de acceso a los metadatos

• Base de Datos INFORMATION_SCHEMA

• Visualizar los metadatos

• Comandos SHOW y tablas INFORMATION_SCHEMA


METADATOS

• Una de las partes importantes de cualquier RDBMS son los metadatos.

• METADATOS son "datos sobre datos"


 Información de administración sobre el servidor MySQLy todas sus características.
 Mediante ellos, se obtiene una gestión eficaz y rápida de elementos como:
– Nombre de una base de datos o tabla
– Tipo de datos de una columna
– Privilegios de acceso, etc

• Hay varias maneras de obtener metadatos:


• Mediante el comando SHOW
 Proporcionar información sobre las bases de datos, tablas y columnas, así como el estado del servidor.

• Mediante consulta de la Base de Datos INFORMATION_SCHEMA


 Esta BBDD almacena los metadatos de todo el Gestor MySQL
 Es una BBDD idéntica a las anteriores y su consulta se realiza con la clausula SELECT

• Programa mysqlshow
INFORMATION_SCHEMA

• La base de datos INFORMATION_SCHEMA contiene tablas que


contienen información sobre:

 Las tablas de Bases de Datos


– sus nombres
– Tamaños
– Número de filas de cada tabla
– Tablas usadas

 Las columnas de tablas en Bases de Datos


– Tipo de datos de cada columna.
– Restricciones de Columnas

• En terminología de Bases de Datos es denominada CATALOGO de la


Base de Datos
 CATALOGO = Conjunto de metadatos donde es posible extraer información de
gestión mantenimiento de las Bases de Datos.
INFORMATION_SCHEMA

• Dentro de INFORMATION_SCHEMA hay varias tablas que son sólo de


lectura (vistas), por lo que no hay ficheros asociadas a ellas.

• Al ser INFORMATION_SCHEMA una BBDD especial, el Servidor NO


crea un directorio para ella.

• Podemos utilizar esta Base de Datos para obtener información de sus


tablas, pero no podemos hacer ninguna otra operación:
 No se permite operaciones DML
( insertar, actualizar o eliminar registros ).

• Accediendo a estas tablas podemos obtener información y guardarla


como si fuese un acceso normal a tablas MySQL.
INFORMATION_SCHEMA

Muestra todas las tablas que componen la Base de Datos INFORMATION_SCHEMA


INFORMATION_SCHEMA

Muestra todas las tablas que componen la Base de Datos WORLD_INNODB


y sus MOTORES de almacenamiento utilizado para su creación
INFORMATION_SCHEMA
• SCHEMATA es una Tabla que contiene METADATOS de las BBDD actuales

• Podemos obtener información global de Configuración de la BBDD indicada

Muestra los metadatos asignados a la Base de Datos WORLD_INNODB


PERFORMANCE_SCHEMA

• La Base de Datos de PERFORMANCE_SCHEMA almacena información


sobre el rendimiento del servidor.

• Esta información es obtenida mediante la captura de eventos producidos


en el Gestor.
 Un evento de servidor es cualquier tarea que el servidor realiza y lleve tiempo de ejecución.
 Un evento puede ser:
– Una llamada a una función.
– Una espera del sistema operativo
– Una única sentencia SQL, un grupo de sentencias,

• Mediante estos eventos podemos obtener información sobre


 Sincronizaciones de I/O entre archivos y Tablas
 Bloqueos de tabla
 Utilización de motores de almacenamiento, etc
PERFORMANCE_SCHEMA

• Los eventos de PERFORMANCE_SCHEMA son diferentes a los escritos


en el Binary-Log.

 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

• A nivel administrativo, podemos añadir Punto de Instrumentalización,


para que PERFORMANCE_SCHEMA obtenga los difentes eventos y los
guarde.
 Punto de instrumentalización
– Definición de una o varias características a nivel de Gestor para ser monitorizado a partir de ese
momento.
PERFORMANCE_SCHEMA

Mostrar todas las tablas que contiene PERFORMANCE_SCHEMA


Comando SHOW

• Mediante este comando, podremos obtener información extraída de los


medatados de MySQL

• Habitualmente se obtiene información que no está disponible en la BBDD


INFORMATION_SCHEMA o es complicada de extraer.

 SHOW DATABASES: Bases de Datos existentes en el MySQL Server


 SHOW TABLES: Muestras las tabla existentes en el BBDD en uso
 SHOW TABLE STATUS: Igual que la anterior pero mostrando el estado de la tabla
 SHOW COLUMNS: Información acerca de columnas de una tabla
 SHOW INDEX: Información relacionada con índices de la tabla
 SHOW CREATE TABLE Muestra el comando de creación de la tabla
 SHOW CHARACTER Muestra información relacionada con el conjunto de caracteres

• Los resultados de esta consulta NO se pueden almacenar para su uso


posterior
Comando SHOW: Show Databases

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

Con la Clausula FULL muestra información adicional, incluyendo la Colación,


privilegios y comentarios:
Comando SHOW: Character y Collation

Ejemplo:
Muestra el carácter disponible junto con sus colaciones por defecto:

Muestra la Colación de cada Character SET


Programa mysqlshow

• mysqlshow es un programa en línea que proporciona similar información


a la sentencia SHOW pero desde línea de comando.

• Puede ser utilizado para:


 Obtener una lista de los nombres de las bases de datos.
 Enumerar las tablas dentro de una base de datos.
 Mostrar información sobre columnas de tablas o índices.

• 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

• Si indicamos 2 argumentos, mysqlshow los interpreta como BBDD.Tabla


y muestra una salida como SHOW FULL COLUMNS de la tabla.

• Si hay tres argumentos, mysqlshow los interpreta como


BBDD+Tabla+Columna.
• El resultado es similar a SHOW FULL COLUMNS de una columna

• La opción - - keys muestra la estructura del índice y da un resultado similar a la


de SHOW INDEX para esa tabla.
8.- Transacciones y Bloqueos

• Introducción a la transacciones

• Ejecutar múltiples sentencias SQL simultáneamente

• Reglas de transacción ACID

• Lecturas Consistentes

• Bloqueos
Procesamiento Transaccional

• MySQL dispone de diferentes motores de ejecución y puede tener


diferentes operativas:
Transaccionales y NO Transaccionales

• Un enfoque NO-Transaccional, con cada sentencia que se ejecuta, se


graban los datos.

• Un enfoque Transaccional, las sentencias, que están agrupadas, deben


de grabarse conjuntamente
Procesamiento Transaccional

Transacciones
• Una transacción es un grupo de consultas SQL que se tratan atómicamente,
como una sola unidad de trabajo.

• El motor de base de datos debe de se capaz de aplicarlo a todo el grupo de


consultas.

• 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.

 Sin embargo, si se requiere una reversión, los cambios en la tabla no transaccional no se


pueden deshacer..

• Es muy importante elegir el motor de almacenamiento adecuado para cada


tabla. MySQL no avisa
Procesamiento Transaccional: ACID

• Los motores transaccionales proporcionan esta integridad de datos


mediante ACID

 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

Transacciones. Registro de Transacciones


• En los motores Transaccionales, las tablas no se actualizan en disco
cada vez que se produce un cambio, se realiza una modificación in-
memory.

• El motor de almacenamiento escribe un registro de los cambios en el


registro de la transacción, que está en el disco.

• Posteriormente, un proceso actualiza los datos físicamente en la tabla.

• Si hay un Crash del sistema, los motores Transaccionales son capaces


de regenerar la información en las tablas desde el registro de
Transacciones.
Procesamiento Transaccional. Control Sentencias

• Por defecto, MySQL se ejecuta con el modo AUTO-COMMIT


• Esto significa que tan pronto como se ejecuta una sentencia que modifica una
tabla, MySQL almacena la actualización en el disco.

• En el modo AUTO-COMMIT, cada sentencia individual es


considerada como una transacción.

• MySQL por defecto AUTOCOMMIT

 mysql> SHOW VARIABLES LIKE 'AUTOCOMMIT';

 mysql> SET AUTOCOMMIT = 0; 1 – ON; 0 - Off


Procesamiento Transaccional. Control Sentencias

• Disponemos de un conjunto de sentencias para cambiar este


funcionamiento:
• START TRANSACTION ( BEGIN )
 Comienza una nueva transacción y continua hasta cerrarla expresamente con:
 COMMIT, ROLLBACK o cualquier operación que implique DVL

• 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

• Si estamos en modo NO-AUTOCOMMIT, los cambios en tablas


transaccionales (como InnoDB) no se hacen permanentes hasta
ejecutar COMMIT.
Sentencias que causan COMMIT implicitamente

• Algunas sentencias realizan COMMIT de forma implícita.

• Al realizar ese commit, se realiza una finalización de la transacción en la


que se está.

• Estas sentencias son, en sí mismas, no transaccional, lo que significa


que no puede realizar un ROLLBACK si tienen éxito.

• Sentencias:
 Operaciones DDL : ALTER, CREATE, DROP

 Operaciones DCL: GRANT, REVOKE, SET PASSWORD

 Operaciones de Bloqueos: LOCK TABLES, UNLOCK TABLES

 Operaciones BULK: TRUNCATE TABLE, LOAD DATA INFILE


Lecturas Consistentes

• MySQL implementa 4 niveles de aislamiento para controlar los cambios


realizados por transacciones y como afectan a otras transacciones
concurrentes.

• 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.

• REPEATABLE READ (default)


 Garantiza que si una transacción emite el mismo SELECT dos veces, obtiene el mismo resultado en ambas
ocasiones.

• SERIALIZABLE
 Aísla completamente los efectos de todas las transacciones entre si.
Configurar Niveles de Aislamiento

• El nivel de aislamiento por defecto en MySQL es REPEATABLE READ.


• Garantiza que si una transacción emite el mismo SELECT dos veces, obtiene el mismo resultado en
ambas ocasiones.

• Para conocer el nivel de aislamiento actual variable tx_isolation

• Podemos cambiar el nivel de aislamiento a nivel:


• GLOBAL
 Es aplicado a todas las nuevas conexiones.
 Necesitamos privilegio de SUPER para cambiarlo

• SESION
 Cualquier cliente puede modificar
el nivel de aislamiento de su propia sesión,
Bloqueos

• Los bloqueos aparecen en MySQL para impedir problemas que pueden


ocurrir cuando dos o más clientes accedan a los mismos datos al mismo
tiempo.

• 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

• Cuando varios clientes quieren modificar los datos, deben esperar su


turno.
Bloqueos

• MySQL es compatible con dos tipos de bloqueo:

• 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

• Podemos modificar nuestras sentencias SELECT para que actúen de


forma diferente a lo anteriormente indicado.

• Con el nivel de aislamiento READ REPEATABLE, puede utilizar SELECT


... LOCK IN SHARE MODE para obligar a otras transacciones que esperar
a que esta operaciones sea completada.

• Esto es similar a operar en nivel de aislamiento SERIALIZABLE.

• 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

• SELECT ... LOCK IN SHARE MODE

• Seleccionamos el valor y lo bloquemos para que no lo modifiquen

• Realizamos la inserción de los valores.

• Realizamos la validación de los datos


Bloqueos

• Tambien disponemos de la clausula FOR UPDATE en sentencias


SELECT.

• Esta clausula es utilizada para asegurarnos que nuestros datos no son


modificamos mientras los hemos leído y estamos trabajando con ellos.

• Sintaxis:
• SELECT ... FOR UPDATE;
1. Bloqueamos los datos que posteriormente vamos a modificar.

2. Los modificamos con tranquilidad y validamos


09.- Motores de Almacenamiento

• Motores de almacenamiento en MySQL

• Motores disponibles en MySQL

• Motor de almacenamiento InnoDB


 Configuración por defecto.
 Almacenamiento de tablas en InnoDB
 Espacio de Tablas
 Memcached

• Otros motores de almacenamiento disponibles


Motores de Almacenamiento

• Una de las características de MySQL es que dispone de múltiples


motores de almacenamiento.

• Al crear tablas con MySQL, se puede especificar el motor de


almacenamiento que se utilizará para cada tabla.

• Dependiendo del motor elegido, el almacenamiento será diferente y sus


características y propiedades también.

• 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

¿Qué motor utilizar?


• Esta elección de va a depender de múltiples elementos a tratar:
– Transacciones, Bloqueos, Concurrencia, etc

• Los motores mas utilizados son: InnoDB y MyISAM

• El motor por defecto de MySQL es InnoDB.

• 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

• Si al crear alguna tabla se omite la opción TYPE o ENGINE, se utiliza el


motor de almacenamiento por defecto.

• Puede cambiarlo:
 Usando las opciones de arranque

 Modificando las variables de Entorno

• Podemos modificar las tablas creadas mediante:


Motores de Almacenamiento

• Podemos conocer los motores de almacenamiento que están compilados


mediante el comando SHOW ENGINES.

 Support = YES o NO
 Disable = Si el motor está compilado pero desactivado
Motores de Almacenamiento

• Cuando una tabla está creada, podemos obtener información de su


creación y del motor que está usando (show create table Tabla)
Motores disponibles en MySQL

• MySQL proporciona y mantiene


varios motores de almacenamiento.

• El servidor MySQL también es


compatible con muchos motores de
almacenamiento de terceros.

• InnoDB y NDBCLUSTER son los


dos únicos motores transaccionales
de MySQL
Motores disponibles en MySQL

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.

 Trata tablas no transaccionales. Proporciona almacenamiento y recuperación de datos rápida,


así como posibilidad de búsquedas fulltext.

• 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

Tablas transaccionales frente a No Transaccionales


(TST frente a NTST)
• Las tablas Transaccionales (TST) tienen ciertas ventajas sobre las no
transaccionales:
 Más seguras. MySQL puede recuperar los datos, mediante recuperación automática o
desde una copia de seguridad más el log de transacciones.

 Puede combinar varios comandos en la misma transacción, validándolos todos al


mismo tiempo o deshaciéndolos todos.

 Si alguna actualización falla todos los cambios se deshacen.

 Proporciona mejor concurrencia para tablas que tienen varias actualizaciones


concurrentes con lecturas.
Motores de Almacenamiento

Tablas No-Transaccionales Frente A Transaccionales


(NTST frente a TST)

• Las tablas No Transaccionales (NTST) tienen ciertas ventajas sobre las


transaccionales:

 Son bastante más rápidas.

 Requieren mucho menor espacio en todos los aspectos.

 Menor cantidad de memoria para UPDATES.


Motor de almacenamiento InnoDB

• InnoDB es el motor de almacenamiento por defecto para MySQL.

• Dispone de las siguientes ventajas:


• Es extremadamente fiable
• Excelente rendimiento con grandes volúmenes de datos
• Seguro con transacciones (ACID)
• Control de Concurrencia (MVCC)
• Compatible con restricciones de FK para la integridad de datos
• Se puede mezclar con tablas utilizando diferentes motores de almacenamiento
• Auto-recuperación rápida después de un accidente
• Almacenamiento en caché de datos y índices en memoria
Motor de almacenamiento InnoDB
Motor de almacenamiento InnoDB

• Podemos conocer el motor de almacenamiento por defecto mediante la


variable @@default_storage_engine

• Para conocer el motor que utiliza una tabla determinada


Definición de Motor de almacenamiento

• Definir el motor de almacenamiento por defecto se puede realizar de


diferentes maneras

1. Como parte del archivo de configuración de inicio

2. Mediante la modificación de la variable @@storage_engine

3. Especificando la clausula ENGINE en la creación de la tabla


Convirtiendo Tablas Existentes a InnoDB

• Las tablas que actualmente utilizan otros motores de almacenamiento se


pueden cambiar para tablas InnoDB.

• El cambio al nuevo motor se realiza a través del comando ALTER TABLE

• 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.

• Podemos cambiar cualquier tabla excepto las tablas de la BBDD mysql,


pues las tablas del sistema utilizan el motor MyISAM.
Convirtiendo Tablas Existentes a InnoDB

• Cuando realicemos una conversión de tablas grandes a tablas InnoDB


deberemos tener en cuenta:

• Aumentar el tamaño del buffer de InnoDB para reducir E/S de disco.


 innodb_buffer_pool_size

• Aumentar el tamaño de los InnoDB Log Files.


 innodb_log_file_size

• El motor InnoDB debe de estar habilitado para poder realizar dicha conversión.

• No es conveniente hacer conversiones con el Servidor en modo mysqld_safe


Estructura Motor InnoDB

• El motor InnoDB trabaja


Tablespaces en InnoDB

• El motor InnoDB trabaja con 2 recursos básicos en Disco:


• Logs Files (ib_logfile0 y ib_logfile1 )
 Ficheros que contiene toda la actividad DML para la realización de operaciones de ROLLBACK
y/o RECUPERACIONES en tablas InnoDB

• 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

• Tablespace compartido (diccionario de datos)


 Es utilizado para guardar Metadatos, Segmentos Rollback internos y buffers  ( ibdata )
Tablespaces en InnoDB

• Cuando se crean tablas en InnoDB, las tablas se pueden crear dentro de


un Tablespace Compartido o Tablespace por tabla

• Todo depende de la opción innodb_file_per_table

• 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.

 La Accesibilidad de las tablas InnoDB que ya se han creado anteriormente no se


ve afectada.
Tablespaces en InnoDB. Tablespaces Multiples
Tablespaces en InnoDB. Tablespaces Multiples

• Si definimos innodb_file_per_table y reiniciamos el servidor, cualquier


tabla nueva creada se guardará en su fichero nombre_tabla.ibd, sino lo
definimos, todas las tablas en el mismo fichero.ibd.

• No se puede mover libremente ficheros .ibd entre directorios de bases de


datos por la implementación propia de InnoDB (Diccionario de datos y
Logs)

• Si quisiéramos mover los ficheros de .ibd de una tabla dentro de una BD


a otra BD tenemos que utilizar la sentencia RENAME TABLE

RENAME TABLE nombre_bd_anterior.nombre_tabla TO nombre_bd_nuevo.nombre_tabla;


Tablespaces en InnoDB

Tablespaces por Tabla. Ventajas


• Compresión de Tabla

• Recuperación de espacio (con TRUNCATE)

• Formato de filas dinámico


 Posibilidad de update de valores dentro del mismo bloque e indice

Tablespaces Compartidos. Ventajas

• Menos sobrecarga del sistema en operaciones grandes como DROP TABLE o


TRUNCATE TABLE

• Minimizar el número de ficheros de datos.


Gestión de Espacio en InnoDB.

• La gestión de espacios está referida a como actuar cuando el espacio de


tablas InnoDB se queda sin espacio o cuando se desea cambiar el
tamaño de los ficheros de registro (log).

• La manera más sencilla de incrementar el tamaño del espacio de tablas


InnoDB es configurarlo desde un principio para que sea autoextensible.

• Deberemos especificar el atributo autoextend para el último archivo de datos en la definición.


• Sólo el último fichero es auto-extensible.

• 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;

Crear un espacio de tablas con un 50 MB (fijo) archivo de datos denominado


ibdata1 y un 50 MB archivo de datos denominado ibdata2 auto-extendido
InnoDB: Log Files y Buffers
Binary Log
Registra todas las
sentencias DML de cualquier
tabla y motor.

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.

• Podemos habilitar múltiples Buffer Pools para minimizar la contención.

• 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

• Por defecto, el motor InnoDB crea la siguiente configuración:


• Fichero ibdata1
 Tamaño 10 MB
 Autoextensible

• Archivos ib_logfile0 y ib_logfile1


 Tamaño 5Mb, ubicados en el directorio de datos de MySQL.

• Podemos elegir un número diferente de archivos de registro de InnoDB


mediante la opción innodb_log_files_in_group.
• El valor predeterminado (y recomendado) valor es 2, lo que resulta en los dos archivos llamados
ib_logfile0 y ib_logfile1.

10 Mb 5Mb 5Mb
Motor MyISAM

• MyISAM es el motor de almacenamiento por defecto de MySQL hasta la


versión del servidor MySQL 5.5.5.

• Cada tabla MyISAM está representado por tres archivos:


 *.FRM: Almacena la definición de la estructura de la tabla
 *.MYD: Almacena los datos que contiene las filas de la tabla.
 *.MYI Almacena todos los índices de la tabla

• 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.

• MyISAM soporta extensiones geometric spatial

• MyISAM puede mejorar el rendimiento mediante la limitación de tamaño de la tabla a un cierto


número de filas.
Motor Memory

• El motor de almacenamiento MEMORY crea tablas con contenidos que


se almacenan en la memoria.

• Las tablas sólo tienen representación en disco mediante el fichero *.frm,


por lo que su contenido e índices no son persistentes  estructura si.

• Características:
• Este motor realiza bloqueos a nivel de tabla, por lo que un deadlock no puede ocurrir.

• Rendimiento muy bueno.

• Podemos indicar el tamaño máximo para una tabla en memoria mediante la opción
- - max-heap-table-size

• No puede contener columnas TEXT o BLOB.


Motor ARCHIVE

• El motor de almacenamiento ARCHIVE se usa para guardar grandes


cantidades de datos en un formato comprimido.

• 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

• El motor de almacenamiento BLACKHOLE actúa como un "agujero


negro".

• Este motor acepta datos pero de forma automática los elimina, los tira a
la basura sin almacenarlos.

• Consultas sobre tablas siempre devuelve NULL.


Motor BLACKHOLE

USOS
• Es útil en un entorno de replicación, para aplicar solo los cambios a algunos nodos

• Verificación de la sintaxis del archivo de volcado.

• Hacer comprobaciones de crecimiento del registro binario, mediante la comparación de


rendimiento utilizando BLACKHOLE con y sin registro binario activado.

• BLACKHOLE es esencialmente un motor de almacenamiento "no-op" (no operativo) por


lo que podría ser utilizado para encontrar los cuellos de botella de rendimiento no
relacionados con el motor de almacenamiento en sí.
11.- Gestión de Usuarios

• Conexión de usuario y el proceso de consulta

• Native authentication

• Gestión de cuentas de usuario

• 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

• Una parte fundamental de la administración de un gestor de Base de


Datos es la parte de Usuarios.

• Los administradores deben de ser capaces de controlar lo que los


usuarios pueden y no pueden hacer.

• También son los encargados de dar / quitar privilegios a dichos usuarios


para pueden hacer sólo lo indicado en su función.

• Funciones del Administrador:


• Evitar que se utilice la cuenta de root
• Restringir aplicaciones comprometidas
• Garantizar integridad de datos mediante la asignación correcta de privilegios.
• Asignación correcta de permisos a usuarios.
• Evitar accesos no autorizados a datos no permitidos.
Conexión de usuario y el proceso de consulta

• Cuando un usuario lanza una Query, se debe de autenticar y autorizar

• Autenticar
- Verifica la identidad
del usuario.

- Se autentica una vez


por sesión

• Autorizar
- Verificar los privilegios
del usuario respecto
a los objetos de la
consulta.

- Se hace para cada


consulta lanzada
Conexión de usuario y el proceso de consulta

• Si miramos en la tabla mysql.user, podremos conocer los privilegios de


los usuarios.

• El valor de Y en un campo _priv * indica que el privilegio está habilitado.

• La cuenta de root tiene acceso completo. Todas sus columnas de


privilegios tienen el valor Y.
Conexión de usuario y el proceso de consulta

• Además de los privilegios, la tabla de usuario contiene otra información


que es útil en el proceso de autenticación.

• Por ejemplo:
• Si dispone o no de Contraseña -> Es visible en forma encriptada en la columna de la contraseña)

• Si la contraseña está o no caducada (indicada por el N en la columna password_expired)

• 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

• Dentro de MySQL, la Base de Datos mysql contiene la información de


todas las cuentas de usuario existentes en el servidor.

• Mediante sentencias SQL SELECT podemos conocer dichas cuentas.

La columna password es sustituida a partir de la versión 5.7 por la columna authentication_string


Conexión de usuario y el proceso de consulta

• Una de las cosas que llama la atención, es que el usuario está


autenticado por 3 campos:
 User (usuario)
 Host (máquina de conexión)
 Password (clave)

• 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

• MySQL puede operar con diferentes mecanismos de autenticación al


gestor, llamados PLUGING de autenticación.

• El plugging por defecto utilizado es mysql_native_password


• Para conectarse al servidor local necesitamos indicar:
 Nombre del usuario
 Contraseña para la cuenta que desea utilizar
 Host (en función del cliente y Servidor)

shell> mysql -u<username> -p<password>


( El host se toma por defecto desde el que se realiza la petición de conexión)

• Para conectarse a un servidor que no está instalado en el host local de


su cliente, proporcione el nombre de host del servidor al que se va a
conectar:
shell> mysql -u<username> -p<password> -h<server_host>
Native Authentication

• Al especificar los nombres de host, deberemos conocer qué es lo que


estamos haciendo y donde:

• NOMBRE HOST del SERVIDOR


 Especifique el nombre de host del servidor cuando se conecta utilizando un cliente y el
Servidor está en remoto.

shell> mysql -u<username> -p<password> -h<server_host>

• NOMBRE HOST del CLIENTE


 Especifique el nombre de host del cliente cuando se añade un usuario al servidor.

Mysql> create user ‘usuario’@’host_cliente’ identified by ‘password’;


Gestión de cuentas de usuario

• Una cuenta de usuario consta de un nombre de usuario y el nombre del


host cliente desde el que el usuario debe conectarse al servidor.

• La forma de creación de una cuenta de usuario es:

CREATE USER <usuario> [ IDENTIFIED BY <clave> ]

• Tienen un formato similar a:


'user_name'@'host_name'.
Gestión de cuentas de usuario

• Los nombres de usuario:


• Pueden tener hasta 16 caracteres de longitud.

• Debe utilizar comillas simples alrededor de los nombres de usuario y nombres de host
si estos contienen caracteres especiales.

• Si un valor es válido sin comillas, las comillas son opcionales.

• Deberemos evitar riesgos de seguridad:


• No crear cuentas sin contraseña.

• No crear cuentas anónimas.

• Siempre que sea posible, evite comodines al especificar nombres de host de la cuenta.
Gestión de cuentas de usuario. Hosts

• Cuando definimos el host al crear un usuario, podemos utilizar caracteres


comodines como % o _

• Estas cuentas permiten al usuario conectarse desde cualquier host en un


dominio completo o subred.

• Si se omite la parte de host de una cuenta de usuario, MySQL asume un


nombre de host de %.

• Ejemplos

% Coincide con cualquier host, permite al usuario conectarse


desde cualquier host
%.example.com Cualquier Host en el dominio example.com
192.168.% Coincide con cualquier host en la subred 192.168

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

• Dentro de nuestro Gestor MySQL podremos disponer de cuentas


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.

mysql> CREATE USER '' @ 'localhost';

• 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

• MySQL dispone de varios métodos para poder cambiar las contraseñas


de las cuentas de usuario.

• CREATE USER...IDENTIFIED BY
• GRANT...IDENTIFIED BY
• SET PASSWORD
• mysqladmin password
• UPDATE grant tables (no recomendado)

• El usuario sólo puede cambiar su contraseña.

• El usuario root y los usuarios que tenga privilegios de UPDATE en la


base de datos mysql, podrían cambiar cualquier contraseña.
Usuarios. Cambio de Contraseña

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.

• La función PASSWORD () cifra la contraseña para ser guardada en el gestor.

• Cuando creamos un usuario, la password es cifrada de forma automática.

• Para cambiar la password de un usuario básico utilizaremos:

mysql> SET PASSWORD = PASSWORD('NewPass');


Usuarios. Cambio de Contraseña

MYSQLADMIN
• También podemos utilizar el comando mysqladmin desde línea de comandos para
cambiar la contraseña de un usuario directamente

shell> mysqladmin -u root –pCurrPass password ‘NewPass‘

shell> mysqladmin -u root –pCurrPass -h host_name password ‘NewPassword‘

GRANT …… IDENTIFIED BY
• Es un comando utilizado para dar privilegios a un usuario y a la vez cambiarle la
password.

• No se suele utilizar de forma habitual.

mysql>GRANT SELECT,LOCK TABLES ON *.* TO backuprobot@'localhost' IDENTIFIED BY


'password';
Gestión de usuarios

• Deberemos asignar, contraseñas únicas y fuerte a todas las cuentas de


usuario.

• Las cuentas sin contraseña no deberían estar permitidas:

• Usuarios que tengan password idénticas no es recomendable.

• Cuando un usuario, no se conecta de forma habitual, podremos hacer


que su password expire para que en una nueva conexión la cambie.
Gestión de usuarios

• Cuando la password de un usuario a EXPIRADO, el usuario se puede


conectar, pero todo comando que no sea SET PASSWORD …….
producirá un error hasta que cambie su clave.
Gestión de usuarios

Cambio de nombre a un usuario


• Mediante el comando RENAME USER <usuario> TO <nuevo> podremos cambiar el
nombre del usuario, su host de conexión o ambas cosas.

• La cuenta debe de existir  sino Error.

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 soporta una serie de mecanismos de autenticación que están


disponibles a través de plugins de autenticación.

• Estos plugins están incorporados en el Gestor como BUILT-IN o


disponibles en bibliotecas externas.

• Estos plugins encriptan las contraseñas y las guardan en la tabla de


usuario. (password)

• Los plugins BUILT-IN que están por defecto son:


• mysql_native_password
• mysql_old_password
• sha256_password
Plugins de autenticación. BIULT-IN

• 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

• Podemos conocer el algoritmo actual de creación de password mediante la


consulta de la variable de sistema old_password.
• 0  mysql_old_password
• 1  mysql_native_password
• 2  sha256_password

• Podemos cambiar la forma de generación de las claves de los usuarios de varias


formas:
1. En la creación de usuario

2. Modificación de la variable de Sistema

3. Mediante indicación en el Fichero de parámetros del gestor.


Plugins de autenticación. Externos

• MySQL también dispone de plugins externos para complementar esta


seguridad.

• Todos los plugins externos deben de residir en el directorio MySQL


plugin definido por la variable plugin_dir.

• Para activar los plugins, deberemos iniciar el servidor con la opción


- - plugin-load= pluging.so
De forma habitual los ficheros son módulos con extensión .so
Plugins de autenticación. Externos

• Algunos plugins utilizados en MySQL son:


• test_plugin_server
 Implementa la autenticación native y old_password

 Este plugin utiliza el archivo auth_test_plugin.so.

• 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.

 Este plugin utiliza el archivo auth_socket.so.

• 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)

 Este plugin utiliza el archivo authentication_pam.so


Plugin de Seguridad en Password

• MySQL dispone de un plugin utiliza para comprobar la seguridad de las claves


utilizadas en las cuentas de usuario.
Plugin-load=validate_password.so

• Este plugin (validate_password) utiliza la variable de sistema


validate_password_policy para determinar el nivel de seguridad a aplicar:

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.

MEDIUM - Requisitos de LOW +


- las contraseñas deben contener un número mínimo de caracteres numéricos,
caracteres de casos mixtos y caracteres especiales (no alfanuméricos)

STRONG - Requisitos de MEDIUM +


- Sin palabras de diccionario, ni repeticiones de las mismas ni anteriores

• Podemos comprobar la fortaleza de una contraseña utilizando la función


VALIDATE_PASSWORD_STRENGTH
• Devuelve un entero en el rango de 0 (débil) a 100 (fuerte)
Seguridad de Password
Autorización

• Tras la fase de autenticación, MySQL realiza la autorización de la


conexión.

• La función principal de la autorización de MySQL es asociar un usuario


autenticado con privilegios en una base de datos, tales como SELECT,
INSERT, UPDATE y DELETE.

• MySQL hace las siguientes preguntas para verificar privilegios de la


cuenta:
• ¿Quién es el usuario?
• ¿Qué privilegios tiene el usuario?
• ¿Dónde se aplican estos privilegios?

• 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

• Los privilegios pueden ser asignados a diferentes niveles:


GLOBALES COLUMNA
BASE DE DATOS RUTINAS
TABLA

• Estos privilegios deben de darse de acuerdo con los requerimientos de


acceso de los usuarios:

• Usuarios de Solo Lectura:


 Privilegios Global-, Database- o Tabla  SELECT

• Usuarios que modifican BBDD’s:


 Privilegios Global-, Database- o Tabla  INSERT, UPDATE, DELETE, CREATE, ALTER, y
DROP

• 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

• Los siguientes privilegios globales se aplican a los usuarios


administrativos:
• FILE:
 Permite a los usuarios la posibilidad gestionar ficheros del Servidor MySQL en el
sistema de archivos host del servidor.

• 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.

• ALL y ALL PRIVILEGES


 Otorga todos los privilegios excepto la capacidad de conceder privilegios a otros usuarios
 Utilice GRANT ALL ….. WITH GRANT OPTION para poder dar privilegios a otros usuarios
Privilegios Adicionales

• Los siguientes privilegios son adicionales:


• USAGE:
 Conceder la posibilidad de conectarse al servidor.
 Este privilegio crea un registro en la tabla de usuarios, pero sin ningún tipo de privilegios.

 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.

• CREATE TEMPORARY TABLES:


 Permite la creación de tablas temporales a nivel individual o Global

• SHUTDOWN
 Permite hacer una parada controlada del Gestor.
Comando GRANT

• El comando GRANT se utiliza para dar una serie de privilegios a un


usuario.

• Su sintaxis permite la creación y asignación de privilegios o la


modificación de los mismos en una cuenta existente.

 Se asigna permiso de SELECT en todas las tablas de la BBDD world_innodb al usuario


‘kari’@’localhost’ con la contraseña Abc123

• Los privilegios concedidos pueden ser:


GLOBALES *.*
Base de DATOS <db_name>.*
Tabla <db_name>.<table_name>
Rutina <db_name>.<routine_name>
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

• Podemos conocer los privilegios asignados a un usuario mediante el


comando SHOW GRANTS

• USUARIO ACTUAL  Show grants

• USUARIO DETERMINADO  Show GRANTS FOR ‘user’@’maquina’


Tablas de GRANT

• MySQL lee las tablas de permisos (Grant Tables) definidas en el gestor y


las almacena en la memoria.

• MySQL basa todas las decisiones de acceso al gestor y a sus elementos


en estas tablas.

• Estos privilegios están almacenados en diferentes tablas de mysql


Tablas de GRANT

• En el proceso de instalación de MySQL se crean las tablas de permisos.

• Estas tablas están soportadas por el motor de almacenamiento MyISAM.

• MySQL mantiene en memoria copias de tablas de permisos para evitar la


sobrecarga de acceso a tablas en disco.
 No debemos de modificar las tablas de Permisos de forma directa.

 Si lo hacemos, necesitamos re-cargar las tablas de permisos en memoria mediante el


comando FLUSH PRIVILEGES
Tablas de 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.

Cambios de Privilegios GLOBALES y CONTRASEÑAS


• Los cambios en los privilegios globales y contraseñas sólo se aplican a las conexiones
posteriores de esa cuenta.

Cambios de Privilegios BASE DE DATOS


• Los cambios en los privilegios de nivel de base de datos se aplican después de la próxima
instrucción USE nombre_bd del cliente.

Cambios de Privilegios TABLAS y RUTINAS


• Cambios en las TABLAS y los privilegios de rutina se aplican inmediatamente.
Revocando Privilegios

• Utilice la sentencia REVOKE para revocar los privilegios de una cuenta.

• La sintaxis de la sentencia REVOKE tiene las siguientes cláusulas:

REVOKE <privilegios> ON <tipo_de_privilegios> FROM <usuario>


Revocando Privilegios

• 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

• Tipos de operaciones de mantenimiento de tablas.

• Sentencias SQL para el mantenimiento de tablas.

• Mantenimiento de tablas en función a su motor


 Innodb
 MyISAM
 Memory
Tipos de operaciones de mantenimiento de
tablas.
• Las operaciones de mantenimiento de tablas son útiles para identificar y
corregir los problemas de base de datos como los siguientes:

 Tablas dañadas por caída del servidor.


 Tablas incorrectas que producen ejecución de sentencias lentas.

• MySQL dispone de muchas herramientas para realizar este


mantenimiento:
• MySQL Workbench
• MySQL Enterprise Monitor (MEM)
• Operaciones SQL (DML) de mantenimiento.

• Comandos
 mysqlcheck
 myisamchk
Sentencias SQL para el mantenimiento de
tablas.
• Hay varias sentencias SQL para el mantenimiento de tablas:

 ANALYZE TABLE Actualiza las estadísticas de las claves de las Tablas


 CHECK TABLE Chequea la integridad de las Tablas
 CHECKSUM TABLE Realizar un informe de CHECKSUM para las tablas
 REPAIR TABLE Intenta recuperar tablas erróneas
 OPTIMIZE TABLE Intenta optimizar tablas

Después de realizar la operación solicitada, el servidor devuelve información sobre el


resultado de la operación para el cliente.

• Cada comando puede utilizar una o mas nombres de Tablas


Sentencias SQL para el mantenimiento de
tablas.
ANALYZE TABLE
• MySQL utiliza las estadísticas de distribución de claves almacenada para decidir el
orden en que el optimizador realiza JOINS entre las tablas.

• Esta distribución determinan qué índices utiliza MySQL para una tabla específica
dentro de una consulta.

• Este comando Analiza y almacena las estadísticas de distribución de claves de una


tabla

• 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

• Funciona con tablas de los siguientes motores:


 InnoDB, NDB y MyISAM

• Soporta tablas con particiones. También puede utilizar ALTER TABLE...ANALYZE


PARTITION para comprobar una o más particiones.

• Durante el análisis, MySQL bloquea la tabla con un bloqueo de lectura para InnoDB y
MyISAM.

• Requiere privilegios de SELECT e INSERT en la tabla

• Si la tabla no ha cambiado desde que se ejecuta el último comando ANALYZE TABLE,


no analiza la tabla.

• El comando ANALYZE TABLE es escrito en el LOG BINARIO.


 Se puede eliminar esta escritura añadiendo la palabra clave NO_WRITE_TO_BINLOG o LOCAL
Sentencias SQL para el mantenimiento de
tablas.
CHECK TABLE
• Comprueba la integridad de la estructura de la tabla y el contenido de los errores.

• Es utilizado para actualizar las estadísticas de tablas MyISAM y para revisar las
VISTAS con problemas..

• Se pueden realizar chequeos rápidos mediante la opción QUICK.

• Si el chequeo de la tabla es correcto, el fichero *.FRM se actualiza indicando la versión


del gestor actual.
Sentencias SQL para el mantenimiento de
tablas.
CHECK TABLE. Características

• Funciona con tablas de los motores:


 InnoDB, CSV, MyISAM, ARCHIVE

• Soporta tablas con particiones. También puede utilizar ALTER TABLE...CHECK


PARTITION chequeo de una partición.

• Dispone de las clausulas


 FOR UPDATE
– Realizan una comprobación de las tablas para ver si son compatibles totalmente con la versión actual
del servidor.

 QUICK
– Realiza una comprobación rápida de las tablas.

• Si el chequeo de tablas InnoDB son erróneos  Posibilidad detección servidor


Sentencias SQL para el mantenimiento de
tablas.
CHECKSUM TABLE
• Se usa para verificar que el contenido de una tabla es el mismo antes y después de
una copia de seguridad, rollback, u otra operación.

• 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.

• Ejemplo de un comando CHECKSUM TABLE:


Sentencias SQL para el mantenimiento de
tablas.
CHECKSUM TABLE. Características

• Se necesita privilegio de Select sobre la tabla para hacer dicha operación.

• Si al tabla no existe, CHECKSUM TABLE devuelve NULL y genera una advertencia.

• Disponemos de las siguientes opciones:


 EXTENDED
– Se lee toda la tabla fila a fila y se calcula el CHECKSUM

 QUICK
– Es lo contrario a la opción EXTENDED, aplicado a un conjunto de filas.
– Es la opción por defecto en MYISQM

• El Checksum depende del formato de fila de la tabla  Si el formato de fila cambia, el


checksum también cambia.
Sentencias SQL para el mantenimiento de
tablas.
OPTIMIZE TABLE
• Realiza una Des-Fragmentación de la tabla mediante la reconstrucción de la tabla y
liberar espacio inutilizado.

• Es recomendable utilizar este comando después de realizar una orden de DML en gran
parte de la tabla.

• Este comando realiza las siguientes acciones:


 MySQL realiza un bloqueo de la tabla durante la optimización.

 Actualiza las estadísticas de índice.


– Por ejemplo, puede utilizar el comando OPTIMIZE TABLE para reconstruir un índice FULLTEXT en
InnoDB, después de modificar un número sustancial de filas.
Sentencias SQL para el mantenimiento de
tablas.
OPTIMIZE TABLE. Características

• Funciona con tablas de los motores InnoDB, MyISAM, ARCHIVE

• Soporta tablas con particiones

• El comando OPTIMIZE TABLE es escrito en el LOG BINARIO.


 Se puede eliminar esta escritura añadiendo la palabra clave NO_WRITE_TO_BINLOG o LOCAL

• En las tablas del motor ARCHIVE, este comando se utiliza también para comprimir la
tabla.

• Este comando puede ser utiliza indicando una o varias tablas.


Sentencias SQL para el mantenimiento de
tablas.
REPAIR TABLE
• Realiza operaciones de reparación de tablas en motores MyISAM y ARCHIVE.

• No es compatible con tablas INNODB.

• Soporta tablas particionadas.

• El comando REPAIR TABLE dispone de las siguientes opciones:


 QUICK Repara sólo el árbol de indexación

 EXTENDED Crear el índice registro a registro (en lugar de crear un índice en ordenación).

 USE_FRM Vuelva a crear el archivo .MYI utilizando el archivo .FRM.

 NO_WRITE_TO_BINLOG or LOCAL No realiza la escritura en los fichero Binary LOGS


Sentencias SQL para el mantenimiento de
tablas.
REPAIR TABLE. Características

• 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.

• La tabla se bloquea durante la operación REPAIR TABLE.

• Si el servidor se cae mientras se está ejecutando una operación de REPAIR, debemos


ejecutar inmediatamente otra REPAIR TABLE después de reiniciar el servidor.
Clientes mantenimiento de tablas: mysqlcheck

• Cuando la operación de mantenimiento de tablas afecta a bastantes


tablas dentro de una base de Datos, es preferible utilizar clientes
externos.

• En algunos casos, mysqlcheck es más conveniente que la emisión de las


sentencias SQL directamente.

• mysqlcheck Es un cliente de línea de comandos que comprueba, repara,


analiza y optimiza tablas
Clientes mantenimiento de tablas: mysqlcheck

• Funciona con tablas InnoDB, MyISAM y ARCHIVE

• Dispone de 3 niveles de comprobación:


 Tablas, Base de Datos, Todas las Bases de Datos

• Dispone de las siguientes opciones:


- - analyze: Realiza ANALYZE TABLE.
- - check: Realiza CHECK TABLE (default).
- - optimize: Realiza OPTIMIZE TABLE.
- - repair: Realiza a REPAIR TABLE.

Por defecto, mysqlcheck interpreta:


Su primer argumento como nombre de base de datos y comprueba todas las tablas en la base de datos.
Si hay mas argumentos se los trata como nombres de tablas.
Clientes mantenimiento de tablas: myisachk

• Conceptualmente, myisamchk es similar en propósito a mysqlcheck.

• Sin embargo, myisamchk no se comunica con el servidor MySQL sino


que accede directamente a los archivos de la tabla.

• Realizar el mantenimiento de tablas, evitando el acceso concurrente a


tablas.

• Las diferencias son:


• Se puede activar o desactivar índices.
• Accede a archivos de la tabla directamente en lugar de a través del servidor.
• Evita acceso concurrente a tablas.
Clientes mantenimiento de tablas: myisachk

• myisamchk dispone de las siguientes opciones:


- - recovery
Realiza la recuperación de una Tabla indicada. Intenta hacer una recuperación RAPIDA y no
siempre es posible.

- - 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.

• Podremos invocar el comando con 1 o varias tablas.

• 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

• En el caso de un accidente del servidor MySQL o el host en el que se


ejecuta, algunas tablas InnoDB podrían estar en un estado incoherente.

• InnoDB lleva a cabo auto-recuperación como parte de la secuencia de


arranque.

• Si detectamos que alguna tabla Innodb tiene problemas, deberemos


utilizar algún comando para intentar corregir estos problemas ( CHECK
TABLE, ALTER TABLE, etc ).

• A veces es necesario realizar una operación mas compleja para


solucionar el problema (siguiente transparencia)
Mantenimiento de tablas en InnoDB

• En raras ocasiones, el servidor no se inicia debido que el la auto-


recuperación no ha sido posible.

• Si eso sucede, utilice el siguiente procedimiento:


1. Reinicie el servidor con la opción - -innodb_force_recovery establecido en un valor de 1 a 6.
 Estos valores indican los niveles de precaución. Un buen valor para empezar es 4, lo que impide buffer de inserciones
operaciones de combinación.

2. Este tipo de arranque, hace que el motor InnoDB impida operaciones de INSERT, UPDATE o
DELETE.

3. Realizar un volcado de las tablas InnoDB y posteriormente borraremos las tablas.

4. A continuación, reinicie el servidor sin la opción --innodb_force_recovery.

5. Realizar una recuperación lógica de la tablas anteriores.


Mantenimiento de tablas en MyISAM

• Para realizar el mantenimiento de tablas en el motor MyISAM, se utilizan


los siguientes comandos:
• Cliente myisamchk
• Comando CHECK TABLE ….

• Cuando el Servidor se inicia, podemos realizar un chequeo de tablas


MyISAM y se intenta reparar de forma automática.
• Habilitar la auto-reparación mediante la opción - - myisamchk-recover en el servidor o

[mysqld]
myisam-recover=FORCE,BACKUP

DEFAULT Chequeo por defecto


BACKUP Hace una Copia de Seguridad de cualquier tabla que debe cambiar
FORCE Realizar recuperación, incluso si hay posibilidad de perdida de datos.
QUICK Recuperación rápida.
Mantenimiento de tablas en Memory

• Cuando trabajamos con el motor MEMORY, las operaciones de DELETE


son tratadas de forma diferente,

• Una operación DELETE…WHERE no libera las filas borradas en


memoria, sino que las marca como borradas y son reutilizadas para
nuevas insercciones.

• Para liberar memoria, deberemos realizar una operación de ALTER


TABLE.

• 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.

• Cuando son recuperadas, éstas son descomprimidas bajo demanda.

• Cuando se realizan muchas SELECT, es posible que esta compresión se


deteriore.

• Los comandos OPTIMIZE TABLE o REPAIR TABLE puede lograr


mejorar la compresión existente.

• El comando OPTIMIZE TABLE funciona cuando no se está accediendo a la tabla (por


lectura o escritura).
14.- Exportando e Importando Datos

• Exportación de datos mediante consultas

• Importar datos con ficheros SQL de MySQL

• Importar datos utilizando el programa mysqlimport

• Exportación e Importación Lógicas


Exportación de datos mediante consultas

• Una de las principales responsabilidades en una Base de Datos es la


realización de copias de seguridad.

• Estas copias de seguridad nos permiten afrontar problemas futuros.

• MySQL dispone de varios tipos de mecanismos para exportar / importar


datos:
• Podemos utilizar sentencias SQL
• Programas cliente de copia de seguridad

• Debemos realizar una copia de seguridad de sus bases de datos con


regularidad.
Exportación de datos mediante consultas

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.

• Las copias de Seguridad, también permiten:


• Copiar bases de datos entre servidores
• Recuperar tablas, índices, etc, perdidos.
• Probar una nueva versión de MySQL con datos reales de su servidor de producción
• Hacer pruebas de carga externa
• Activar la replicación entre sistemas MySQL

• 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

Exportar Datos desde MySQL


• Disponemos del comando SELECT ….. INTO OUTFILE para poder exportar los datos
obtenidos de la Consulta en el fichero indicado

• Sintaxis
SELECT <columnas> INTO OUTFILE <fichero> FROM tabla/s

• Este comando exporta EXCLUSIVAMENTE los datos devueltos de la consulta

• NO EXPORTA:
 Sentencias SQL
 Estructura de tabla ni Índices
 Restricciones
Exportación de datos mediante consultas

Exportar Datos desde MySQL

• El fichero de salida está delimitado con los siguientes caracteres

VALORES Delimitados por TABULADOS

LINEAS Carácter NewLine


Cláusulas FIELDS y LINES

• Podemos modificar estos delimitadores mediante opciones del comando INTO


OUTFILE

• Podemos ejecutar la siguiente orden desde fuera de MySQL


$ mysql -uroot -p examen -e "Select * into outfile 'c:/app/otro.txt' from t1";
Exportación de datos mediante consultas

Exportar Datos desde MySQL

NOTAS

 El fichero se crea en el Servidor de MySQL, no en el cliente, por lo que deberemos tener


privilegios de FILE

 El fichero de salida no debe de existir, si existe ERROR

 Ejecutando la orden desde el S.O. mediante cliente MySQL podemos crear el fichero en el
Cliente.

 Cada línea en el archivo de salida representa una fila de datos.

 No se devuelve ninguna información al cliente


Exportación de datos mediante consultas

Exportar Datos desde MySQL. FORMATO CSV

• Este comando es habitualmente utilizado para la exportación de datos a formato CSV.

• Este formato puede ser leído por múltiples aplicaciones externas: Excel, Adobe, Oracle,
etc

• El formato (valores separados por comas) CSV:


 Separa los valores con comas
 Encierra valores entre comillas dobles
 Termina líneas con retornos de carro
Importar datos utilizando LOAD DATA INFILE

• El comando LOAD DATA INFILE realiza la importación de un fichero de


texto a una tabla indicada.

• Sólo es necesario indicar el nombre del fichero y la tabla para cargarlo.

• Sintaxis
Importar datos utilizando LOAD DATA INFILE

• Los archivos importados pueden estar en formato delimitado por


tabuladores o separadas por comas.

• MySQL asume que el archivo reside en el host del servidor en


el directorio de datos de base de datos (sino le indicamos ruta completa).

• Al igual que en la exportación, también podemos definir los delimitadores


para realizar la Importación. (usando la misma sintaxis)

En Windows hay que tener cuidado con el nombre del fichero


LOAD DATA INFILE 'D:/mydata/data.txt' INTO TABLE t
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.

• Estas sustituciones se utilizan mediante el comando SET al final del comando.

• LOAD DATA INFILE transforma los datos obtenidos del fichero correspondiente
utilizando variables de usuario, antes de insertarlos en la tabla.

• Definimos una variable @variable que posteriormente modificaremos con el valor de la


columnas o columnas del registro obtenido. @Name  Variable namecolumna

 Si definimos una variable y no de damos valor  se ignora el valor de la columna. (@District)


Importar datos utilizando LOAD DATA INFILE

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

• Load Data Infile controla los registros duplicados mediante:


 IGNORE
– El registro duplicado es ignorado en la importación de los datos.

 REPLACE
– Reemplaza el registro existente por el nuevo importado.
Importar datos utilizando cliente mysqlimport

• MySQL dispone de la utilidad en línea mysqlimport para hacer


importaciones de ficheros de TXT o CSV.

• mysqlimport usa internamente LOAD DATA INFILE el cargar los datos.

• Sintaxis

• mysqlimport hace coincidir el fichero con la tabla donde se debe de hacer la


importación.
 Fichero City.txt  Tabla City
 Fichero City.csv  Tabla City
Importar datos utilizando cliente mysqlimport

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 )

- -fields-terminated-by - Carácter de separación de campos ( \t )

- -fields-enclosed-by - Carácter para almacenar valores unidos ( " " )

- -ignore o - -replace - Ignorar o Reemplazar registros con PK en la tabla

- -local - Para indicar un fichero LOCAL del cliente


Importar datos utilizando cliente mysqlimport

EJEMPLOS
Exportación de datos mediante cliente mysqldump

• El cliente mysqldump "vuelca" el contenido de la tabla a texto.

• Al contrario que la orden SELECT INTO OUTFILE, mysqldump dispone


de muchas opciones y formas de "volcar" el contenido al fichero.

• Los archivos de volcado pueden contener:


• Copias de seguridad lógicas (sentencias SQL)
• Declaraciones de re-crear la estructura de tablas, datos de la tabla, o ambos.
• Copias de seguridad físicas (sólo datos)
• CSV, otros archivos de texto delimitados o formato XML

• Es la forma habitual de realizar copias de Seguridad LOGICAS en


MySQL.
 De forma predeterminada no se vuelca la BBDD INFORMATION_SCHEMA ( la podemos volcar haciendo
referencia a ella de forma directa y añadiendo - -skip-locktables )
Exportación de datos mediante cliente mysqldump

• Hay varias manera de invocar al cliente mysqldump


• mysqldump [opciones] --all-databases
Backup de todas las bases de datos del Gestor MySQL

• mysqldump [opciones] --databases db1 [db2 db3 ...]


Backup de las bases de datos indicadas en el comando

• mysqldump [opciones] nombre_bd


Backup de la bases de datos indicada en el comando

• mysqldump [opciones] nombre_bd [tablas]


Backup de las tablas de la Base de datos indicadas
Exportación de datos mediante cliente mysqldump

• mysqldump puede producir 2 tipos de salida, dependiendo de si la


opción - - tab está presente:

• SIN la opción - - tab ( SQL)


 Se escriben sentencias SQL en la salida estándar.

 Esta salida consiste en sentencias CREATE e INSERT.

 El resultado se guarda en un archivo y puede ser aplicado mas tarde.

 El fichero puede ser modificado para añadir / eliminar objetos/datos

• CON la opción - - tab = Directorio ( Texto Delimitado)


 Se escriben 2 ficheros de salida para cada tabla que contiene el backup.

 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

• Por defecto, mysqldump escribe la información como sentencias SQL a la salida


estándar.

• El tipo y número de argumentos son muy variados en función de las necesidades


del backup.

 Pueden ser consultadas en http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html


Exportación de datos mediante cliente mysqldump

Formato SQL. Opciones Interesantes

• Hacer un backup de todas las bases de datos - - all-bases

• Hacer backup de unas determinadas BBDD’s - - databases DB1 DB2

 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

Formato SQL. Opciones Interesantes

• Con las opciones - - all-bases o - - databases DB1 DB2 los comandos


CREATE DATABASE y USE son escritos en el fichero de volcado.

• Si al hacer la restauración, la BBDD no existe, se crea y si existe se reutiliza.

• Para forzar a recrear la BBDD en la restauración, deberemos introducir la opción


- -add-drop-database y se escribirán las siguientes sentencias por BBDD:

 DROP DATABASE
 CREATE DATABASE.
 USE
Exportación de datos mediante cliente mysqldump

Formato SQL. Opciones Interesantes

• 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

 Al aplicar el fichero debemos indicar cual es la BBDD destino

 Se puede indicar una BBDD diferente a la original.

 Si la BBDD no existe, deberemos crearla antes


Exportación de datos mediante cliente mysqldump

Cargar Backup con Formato SQL


• Para utilizar el fichero SQL creado anteriormente (restaurar copia logíca) sólo
tendremos que utilizar como entrada de un cliente mysql

• Si el archivo de volcado fue creado por mysqldump con cualquiera de estas


opciones - -all-databases o - -databases NO es necesario indicar el destino
(base de datos) donde aplicar las sentencias SQL

 Contiene las sentencias CREATE DATABASE y el USE:

• También podemos utilizar el comando SOURCE para su aplicación


Exportación de datos mediante cliente mysqldump

Cargar Backup con Formato SQL

• Si el archivo de volcado contiene UNA SOLA BBDD y no contiene los comandos


CREATE DATABASE ni USE, primero deberemos crear la BBDD (si es
necesario):

• Después deberemos especificar el nombre de la BBDD a utilizar cuando se


cargue los datos.

• O lo podemos hacer todo desde dentro de MySQL


Exportación de datos mediante cliente mysqldump

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

- - comment - Escribe información adicional en el archivo de volcado, como la versión


- - skip-comments del programa, versión del servidor, y el Host

- - compatible=name - No garantiza la compatibilidad con otros servidores, pero establece varios


modos SQL para ayudar con la compatibilidad
- -compatible=oracle

- - opt - Optimiza mysqldump para un mejor rendimiento; activado por defecto

-C (- -compress ) - Utiliza compresión de datos

-d (- -no-data) - Vuelca sólo la estructura y no los datos

-X (- -xml) - Hace un volcado en formado XML


Exportación de datos mediante cliente mysqldump

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

• También podemos crear este tipo de ficheros de volcado mediante el comando


siguiente:
 SELECT …… INTO OUTFILE …. From Tabla

• Archivos delimitados contienen los datos en bruto representados en ASCII, sin


nombres SQL, comentarios, y columna.
Exportación de datos mediante cliente mysqldump

Formato Texto-Delimitado

• VENTAJAS
 Ficheros mas compactos y fáciles de manejar para herramientas de línea.

 Gran velocidad de Copia de Seguridad y Restauración

 Se puede volver a cargar los datos con la orden LOAD DATA INFILE, con las mismas
opciones que se utilizan para volcar.

 Ejemplo: Tabla con 15M registros alrededor de 700Mb ocupación


Exportación de datos mediante cliente mysqldump

Formato Texto-Delimitado

• LIMITACIONES
 Quien ha lanzado el gestor MySQL debe tener permiso para escribir en el directorio de
salida.

 No se puede sobrescribir un fichero previamente creado, por lo que, si existe, dará un


error de ejecución.

 No se puede volcar a un fichero Comprimido ( es decir, volcarlo y a la vez comprimirlo )

 Hay que tener cuidado con los caracteres no estándar .


Exportación de datos mediante cliente mysqldump

Formato Texto-Delimitado

• mysqldump permite las siguientes opciones de texto delimitado:

Opciones Descripción
- - fields-terminated-by=str Cadena de separación de columna (TAB)

- - fields-enclosed-by=char El carácter para encerrar valor de columnas ( NULL )

- - fields-optionally-enclosed-by=char El carácter para encerrar valor de columnas no numéricos(


NULL )

- - fields-escaped-by=char Carácter de ESCAPE para caracteres especiales

- - lines-terminated-by=str Cadena para indicar fin de linea (NEWLINE)

o
Exportación de datos mediante cliente mysqldump

Formato Texto-Delimitado

Ejemplos

• NOTAS
 Se debe de tener privilegios de FILE ( SELECT ….. INTO INFILE )

 Se produce un error si el fichero .TXT ya existe.


– Ficheros SQL  usuario lanza mysqldump
– Ficheros TXT  usuario lanza Gestor

 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

• Hay cierto casos específicos que merecen la pena comentar, pues su


uso es muy habitual.

• Casos como:
• Hacer una copia de una base de datos en otra en el mismo servidor

• Cómo copiar una base de datos de un servidor a otro

• Hacer backup de los programas almacenados (procedimientos almacenados y funciones,


triggers y eventos)

• Hacer backup de las definiciones y los datos por separado


Mysqldump. Casos Específicos

Hacer una copia de una Base de Datos mismo servidor

No utilizar - - database db1 pues eso implica la introducción de USE db1 en el fichero de
volcado.

Hacer una copia de una Base de Datos diferente servidor


Servidor 1

Servidor 2
Copiamos el fichero de volcado (dump.sql) al servidor 2 y ejecutamos
Mysqldump. Casos Específicos

Hacer backup de programas almacenados

• Varias opciones determinan el tratamiento de volcado de los programas


almacenados dentro de nuestras tablas y BBDD’s

- - events Dump de Eventos producidos


- - routines Dump de procedimientos y Funciones
- - triggers Dump de triggers para tablas

• La opción - - triggers está habilitado por defecto para cuando existen volcados de
tablas.

• Para desactivar cualquiera de estas opciones de manera explícita:


 - - skipevents, - - skip-routines, - - skip-triggers
Mysqldump. Casos Específicos

Hacer backup de definiciones y datos por separado

• Mysqldump dispone de opciones para importar sólo los datos o sólo las
estructuras de los objetos

- - no-data No vuelca los Datos de las tablas


- - no-create-info suprimir las órdenes CREATE del fichero volcado

Por ejemplo para volcar los datos y las estructuras de forma separada.

• Podemos añadir las opciones - -routines y - -events dentro de - -no-data


Importar datos con ficheros SQL de MySQL

• Podemos importar datos a una base de datos mediante el uso de un


archivo de sentencias MySQL (.sql), que contiene toda la información
necesaria para crear tablas.
 Importar la base de datos world_innodb desde un archivo de declaración mediante el programa
cliente mysql

• Esto ficheros pueden ser importados por el comando mysql


estableciendo una comunicación con el Gestor.

• También es posible trabajar con fichero exportados como TXT, mediante


el cliente mysqlimport

• 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

Tipos de Ficheros y su importación

• Ficheros SQL

 Podemos importarlos mediante, el cliente mysql


$ mysql [ opciones ] < fichero.sql

 Desde dentro del propio Gestor utilizaremos el comando SOURCE


mysql > SOURCE fichero.sql
Restaurar backup mediante mysqldump
Cargar Backup con Formato Texto-Delimitado

• Para recrear un backup en formato Texto Delimitado deberemos realizarlo en 2


fase:

1. Ejecución de las órdenes CREATE ( .SQL)


– Se crean las tablas VACIAS dentro de la BBDD elegida

2. Importación de los datos existentes en los ficheros *.TXT (mysqlimport)


– Se importan los datos en las Tablas anteriormente creadas con las opciones originales

• Otra alternativa a mysqlimport es utilizar el comando LOAD DATA INFILE desde


mysql. (Usando las opciones originales de volcado)
16.- Backup y Recuperación de Datos

• Describir los conceptos básicos de copia de seguridad

• Enumerar los tipos de copias de seguridad

• Herramientas de copia de seguridad y utilidades

• Hacer copias de seguridad binarias y de texto

• Realizar la recuperación de datos


Introducción al Backup

• Una de la tareas básicas en administración es la realización de Backups


o Copias de Seguridad de los Datos y Bases de Datos.

• Existen muchas razones para realizar las copias de Seguridad:


• Recuperación del Sistema
 Las copias de Seguridad permiten la recuperación de un Sistema si este falla.
 La estrategia y Tipo de Copia de Seguridad será determinado por el entorno.

• Auditoria y Monitorización de datos


 Para ciertos sistemas y procesos asociados, puede que tenga que auditar o analizar los datos en un entorno
separado del entorno de producción.
 Podemos utilizar las copias de seguridad para crear un ambiente similar.

• Tareas de Administración OFF-Line


 Operaciones como transferencias de datos de un sistema a otro.
 Creación de un servidor de desarrollo basado en uno de producción, etc
Introducción al Backup

• Podemos distinguir varios tipos de backup:

• 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

• Se distinguen 3 tipos de posibles Backups:

• DISCO
 Consiste en una copia de seguridad basada en Discos Físicos.

 Copias de seguridad de datos DIRECTAS de un disco a otro mediante procesos como


– Replicación, RAID mirroring, Aplicaciones externas como DRBD. (Distributed Replicated Block Device)

 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

• Las copias de seguridad MySQL pueden ser una de las siguientes:

• 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 basado en una SNAPSHOT

• Backup basada en REPLICACION

• Backup INCREMENTAL
 Basada en los registros binarios de MySQL
Backups con MySQL. Copia Lógica

• Las copias de seguridad LOGICAS se caracterizan por volcar el


contenido de la base de datos en archivos de texto.

• Estos archivos de texto contienen sentencias SQL y, por lo tanto son muy
portable.

• Estas sentencias SQL contienen toda la información necesaria para


reconstruir las bases de datos y tablas de MySQL.

• La copia lógica puede ser realizada al mismo tiempo que otras


conexiones están trabajando en el Gestor.

• Al contrario que otros tipos de BACKUP (raw-local), las copias lógicas se


pueden hacer con Servidor Local o Remoto
Backups con MySQL. Copia Lógica

• Las copias de seguridad LOGICAS tienen las siguientes características


en MySQL:

• Convierte la Bases de Datos y Tablas en sentencias SQL.

• Son portable entre plataformas.

• Requieren que el Servidor MySQL se este ejecutando durante la copia de seguridad.

• Son generalmente más lentas que los BACKUPS binarios.

• 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

• Las copias de seguridad Físicas o RESPLADO Físico, crean una copia


exacta de los ficheros del Sistema Operativo relacionados con el Gestor.

• Son realizados con comandos estándar como del propio sistema


operativo: tar, cp, cpio, rsync o xcopy.

• Este tipo de backup es más rápido en la realización del backup y la


recuperación.

• Requerimientos:
• Los archivos de base de datos no debe cambiar durante la copia de seguridad.

• El método para lograr esto depende del motor de almacenamiento.


 Para InnoDB: Se requiere cierre del servidor MySQL.
 Para MyISAM: Las Tablas se bloquean de forma compartido ( solo Select )
Backups con MySQL. Copia Física

• Las copias de seguridad Físicas tienen las siguientes características en


MySQL:

• Conservan el mismo formato y arquitectura que MySQL almacena en Disco.

• Son copias exactas del original  Mismo tamaño.

• Son más rápidas que las LOGICAS, pero no son tan portable ( dependen de la arquitectura )

• Es necesario restaurarlo en la misma versión del Gestor.

• Dependiendo del motor de almacenamiento de las tablas será o no necesario detener


el Gestor.
Backups con MySQL. Snapshot

• Es una utiliza proporcionada de forma externa a MySQL.

• Este tipo de copia de seguridad se basan en crear una instantánea en un


momento determinado del File System donde está el Gestor.

• Proporcionar una versión lógica congelada del sistema de archivos


desde la que puede realizar copias de seguridad de MySQL.

• El tiempo de creación del backup es bastante menor que los anteriores


backup.

• Durante la copia de seguridad, la base de datos y las aplicaciones puede


que no estén disponibles.
Linux  FS como Btrfs and OCFS2
Solaris  ZFS
Windows  Shadow-copying Service (VSS)
Novel.  NSS (Novell Storage Services)
Backups con MySQL. Replicación

• La replicación puede ser usada como backup de un Gestor MySQL.


• El maestro se utiliza para las aplicaciones de producción.
• Un esclavo se utiliza para fines de copia de seguridad.

• Este tipo de aplicación es utilizado para eliminar el imparto de los backup


en las aplicaciones en producción.

• La copia de seguridad REAL se realiza en el esclavo de Replicación


(lógica o binaria).

• El mayo inconveniente es que necesitamos duplicar la estructura del


entorno: otro servidor + otro almacenamiento.
Backups con MySQL. Incremental

• Una copia de seguridad es sólo uno de los componentes que necesita


para la recuperación de datos después de la pérdida o daños de datos.

• El otro elemento indispensable es el registro binario, que contiene un


registro de los cambios de datos.

• Cuando se produce un CRASH de Base de Datos tendremos que:


1. Utilizar los Backups para restaurar a su estado en el momento de la copia de
seguridad.

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

• Si el registro binario no está habilitado, no es posible realizar el


segundo paso  por lo que solo realizaremos la RESTAURACION.

• Para activarlo modificaremos la variable LOG_BIN (--log-bin)

• Antes de la realización de un Backup, es necesario realizar un Flush


Binary para que todos los datos estén sincronizados con la copia de
seguridad.

• A partir de la versión 5.7 es necesario también activar la variable server-id


Herramientas de Backup

• Las copias de seguridad se pueden realizar con o sin el uso de


herramientas o utilidades adicionales.

• La forma habitual de ejecución de estos backups son:


• Copias de Seguridad Lógicas
 Sentencias SQL

 mysqldump

• Copias de Seguridad Raw (binarias)


 Combinación entre sentencias SQL (para bloquear) junto con los comandos del sistema
operativo (para hacer la copia binaria)

 MySQL Enterprise Backup

• Herramientas de Tercero
Herramientas de Backup. mysqlbackup

• MySQL Enterprise Backup


• Es el producto utiliza en MySQL para realizar Copias de seguridad en caliente para
bases de datos MySQL.

• El producto dispone de una arquitectura para copias de seguridad eficientes y


confiables para tablas creadas por el motor de almacenamiento InnoDB.

• También permite realizar copias de seguridad de las tablas de otros motores de


almacenamiento.

• MySQL Enterprise Backup utiliza el comando mysqlbackup.

• No viene con las distribuciones por defecto . Hay que instalarlo


http://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/installing.html

• Puede encontrar más información acerca de Respaldo MySQL Enterprise en:


http://dev.mysql.com/doc/mysql-enterprise-backup/3.8/en/intro.html
Herramientas de Backup. mysqldump

• mysqldump
• La utilidad mysqldump viene con la distribución MySQL.

• Realiza copias de seguridad lógicas y funciona con cualquier motor de base de


datos.

• Puede ser automatizado con el uso de crontab en Linux y UNIX, y con el


Programador de tareas de Windows en Windows.

• No hay herramientas de seguimiento o informes para mysqldump.


Herramientas de Backup. mysqlhotcopy

• 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".

• No hay informes o seguimiento proporcionado con este script.


Exportación de datos mediante mysqlbackup

• MySQL Enterprise Backup, permite la realización de varios tipos de


copias de seguridad.

• Mysqlbackup permite el uso de múltiples opciones como se pueden


observar en la URL siguiente:
 http://dev.mysql.com/doc/mysql-enterprise-backup/3.10/en/mysqlbackup.usage.html

• Sintaxis:
# mysqlbackup [ opciones ] [ backup | backup-and-apply-log | backup-to-image ]

backup Se realiza la primera fase de creación del Backup


backup-and-apply-log Se realiza la segunda fase del Backup, con la aplicación de los Logs producidos
durante la ejecución del backup
backup-to-image Copia de seguridad como imagen.
Exportación de datos mediante mysqlbackup

• Para la realización backup es necesario la conexión con el Gestor


MySQL.

• De forma habitual se introducen dentro del fichero de configuración, en la


sección [ mysqlbackup ]

• Aprovechando esta sección introduciremos las opciones mas habituales


de este comando:
[ mysqlbackup]
incremental
backup-dir=
Incremental-backup-dir=
Exportación de datos mediante mysqlbackup

• MySQL Enterprise Backup, realiza un respaldo de los siguientes ficheros


raw (binarios)

• Los datos InnoDB


 ibdata : Espacio de Tablas Compartidos
 .ibd: Archivos de datos
 Ib_logfile: Archivos de registro

• Todos los archivos en el directorio de datos se incluyen:


 Archivos .opt: ​ información de configuración de base de datos
 Archivos .trg: parámetros de Triggers
 Archivos .MYD: archivos de datos MyISAM
 Archivos .MYI: archivos de índice MyISAM
 Archivos .FRM: Estructura de tablas
Exportación de datos mediante mysqlbackup

• Procedimiento de copia de seguridad


1. mysqlbackup abre una conexión con el servidor MySQL para realizar las copias de seguridad.

2. Mysqlbackup crear una copia de seguridad en línea de tablas InnoDB.

3. Cuando la ejecución de mysqlbackup casi se ha completado, se ejecuta el comando SQL


FLUSH TABLES WITH READ LOCK,

4. Continua la copia de seguridad con los archivos que no sean InnoDB (como tablas MyISAM y
ficheros .frm).

Se puede producir algún tipo de bloqueo en las tablas

5. mysqlbackup ejecuta hasta el final y desbloquea las tablas


Restaurando backup con mysqlbackup

• mysqlbackup permite la restauración de backup creados anteriormente.

• Sintaxis

• Copia el contenido del directorio <backup-dir>, incluyendo InnoDB y MyISAM, *.frm a


sus ubicaciones originales definidas en el fichero <file.cnf> definido en el directorio del
backup.

• Esta recuperación no requiere la conexión con el gestor.

• El gestor debe de estar apagado antes de usar mysqlbackup para la


recuperación.
Restaurando backup con mysqlbackup

• la opción copy-back, es utilizada para realizar la copia de los archivos de


datos, registros y demás archivos de copia de seguridad desde el
directorio de copia de seguridad al lugar de origen.

• Durante el proceso de copy-back, mysqlbackup no puede consultar la


configuración del servidor, por lo que lee los archivos de configuración
estándar para las opciones tales como el datadir.

• Si desea restaurar a un servidor diferente, puede proporcionar un archivo


por defecto no estándar con la opción --defaults-file.
Exportación mysqlbackup : Imagen

• Para simplificar la transferencia y gestión de los datos de copia de


seguridad, puede mantener cada copia de seguridad en un solo archivo
(imagen de copia de seguridad).

• Deberemos definir el nombre del fichero que contendrá la imagen y el


directorio donde guardar el fichero.

• También podemos convertir un backup previamente realizado en una


imagen de backup
Restore backup con mysqlbackup: Imagen

• La restauración de una imagen conlleva la sobrescritura de los ficheros


originales.

• Deberemos indicar el directorio destino de descompresión del fichero


imagen
Exportación de datos mediante mysqlhotcopy

• mysqlhotcopy es un script de Perl para realizar copias de seguridad


de datos MyISAM y ARCHIVE.

• Cuando mysqlhotcopy se conecta al servidor MySQL , bloquea las


tablas, copia los archivos de la tabla y desbloquea las tablas.

 Utiliza comandos como FLUSH TABLES, LOCK TABLES


 y cp o scp para hacer una copia de seguridad de base de datos
Exportación de datos mediante mysqlhotcopy

• mysqlhotcopy debe de ejecutarse en la misma máquina donde se


encuentran los directorios de bases de datos.

• Por ahora, sólo esta disponible para Sistemas UNIX

http://dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html
• Dispone de múltiples opciones:
Exportación con Raw Innodb Backup

• Es un método de backup orientado a las tablas Innodb.

• Raw Innodb Backup, se ejecuta siguiendo una serie de pasos


manuales / script para completar un backup completo de tablas
innodb.

• Este tipo de backup se basa en hacer copias exactas de todos los


archivos que InnoDB utiliza para gestionar los espacios de tabla.

 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

• Pasos a realizar para el backup:

1. Ejecutar el comando FLUSH TABLES ... FOR EXPORT


 Este comando lo debemos realizar por cada Tabla a exportar
 Crea un fichero cfg por cada tabla

2. Externamente, haga una copia de cada componente:

Archivos FRM
Archivos *.cfg
Ficheros de Tablespaces
Archivos de registros InnoDB
Archivo my.cnf

3. Ejecutar UNLOCK TABLES para liberar todos los bloqueos de tabla.


Exportación con Raw Innodb Backup

• FLUSH TABLES ……FOR EXPORT

• Este comando realiza la preparación de las tablas para poder ser exportas sin
problemas.

• Adquiere bloqueos compartidos en metadatos para las tablas indicadas.

• Las sentencias son bloqueadas hasta que el bloqueo es desactivado.

• Comprueba si todos los motores de almacenamiento permiten la exportación de


las tablas indicadas. Si alguno no lo hacen, se produce un error ER_ILLEGAL_HA
y la sentencia falla.

• La sentencia notifica al motor de almacenamiento para cada tabla que está


preparada para la exportación.

• Los bloqueos NO SE liberan cuando la declaración FOR EXPORT se completa.


17.- Réplicas en MySQL

• 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

• Una de las características mas destacadas a partir de MySQL 5 es la


posibilidad de hacer replicación.

• La replicación es la operación de enviar datos/cambios producidos en


un servidor Maestro a uno o varios Servidores Esclavos.
• un servidor actúa como maestro y uno o más actúan como esclavos.

• El tipo de replicación existente es Asíncrona unidireccional, en


contraposición con Asincrona Bidirecciónal de MySQL Cluster.
Introducción. Servidor Maestro

• El servidor maestro escribe actualizaciones en el fichero Binary Logs.

• Estos logs sirven como registros de actualizaciones para enviar a los


servidores esclavos.

• Cuando un esclavo se conecta al maestro:


• Informa al maestro del punto en el que está actualmente el Esclavo ( posición de los Binary logs
aplicados en la última actualización satisfactoria).

• 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

• Cada servidor esclavo mantiene un registro de las coordenadas de


registro binario:
 El nombre del archivo
 Posición dentro del archivo que ha leído y procesado del maestro.

• Esto significa que varios esclavos se pueden conectar al maestro y


ejecución de diferentes partes de un mismo registro binario.

• Debido a que los esclavos controlan este proceso, los esclavos


individuales pueden ser conectados y desconectados del servidor sin
afectar la operación del maestro.

• También, debido a que cada esclavo guarda la posición actual en el


registro binario, es posible que los esclavos se pueden desconectar,
reconectar y luego reanudar el procesamiento.
Introducción. Servidores Esclavos

• Todo servidor esclavo debe de configurarse en función del Servidor


Maestro:
• Nombre del Servidor Maestro.
• Nombre del Binary Log.
• Registro de Coordenadas del Binary Logs.

• Todos estos datos son guardados dentro del Repositorio existente en


cada Servidor Esclavo. ( puede ser un fichero o una tabla )

• Estas propiedades pueden ser modificadas mediante el comando


CHANGE MASTER TO dentro de una sesión conectado al Esclavo.
Introducción. Asíncrona Unidireccional

• Asíncrona unidireccional. Beneficios


• La robustez
 Gran funcionalidad debido a un escenario maestro/esclavo.
 En caso de problemas con el maestro, puede cambiar al esclavo como copia de
seguridad.

• 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

• Cada Servidor Maestro y Servidor Esclavo deben de configurarse


bajo un identificador único (server_ID).
Configuración de la Replicación

• Existen una serie de configuración habituales en la replicación en


sistemas MySQL que pueden ser utilizadas.

• El método exacto, dependerá del entorno y de la Base de Datos


Maestra. (24x7, dispone de datos o no, etc)

• Hay algunas tareas genéricas que son comunes a todas las


configuraciones de replicación

• Habilitar el Binary Logs y Configurar el ID_Server en el MAESTRO.

• Configurar el ID_Server en cada ESCLAVO

• Crear y utilizar un usuario separado en el ESCLAVO para hacer la autenticación y aplicación


de los binary Logs.
Configuración de la Replicación

• Antes de empezar una replicación, deberemos de conocer una serie


de elementos básicos:

• Registrar la posición del log binario en el maestro.


 Esta información es básica al configurar el esclavo para que sepa en que punto debe de iniciar las
operaciones

• Si el Maestro ya tiene datos y deseamos sincronizarlo con un Esclavo es


necesario crear una instantánea/backup de datos para copiar los datos al esclavo.
 Deberemos tener en cuenta los diferentes motores de almacenamiento MyISM, InnoDB, etc, pues cada
uno requiere una acción para dicho backup o snaptshot

• 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.

• Es necesario reiniciar el servidor para realizar esta operación.

• El registro binario es la base para replicar cambios desde el maestro a sus


esclavos.

• Cada servidor debe configurarse con un ID de servidor único. ( 1 – 231 )

• Para configurar esta opciones lo realizaremos dentro de sección [mysqld] del


archivo de configuración ( my.cnf o my.ini ).
Configuración de la Replicación

Configuración. Etapas - Maestro


• Las siguientes etapas se ejecutarán para realizar la configuración de una
Replicación:

1. Definir el ID_Servidor tanto en el Servidor Maestro como en los Esclavos.


Esta operación requiere reiniciar los Servidores.
Los ID deben de ser diferentes entre el Maestro y los Esclavos

2. Crear cuenta de usuario para replicación en el Maestro


Cada esclavo se conecta al maestro utilizando un nombre de usuario y contraseña de MySQL; ésta
debe de tener privilegios de REPLICATION SLAVE
Configuración de la Replicación

Configuración. Etapas - Maestro

3.- Obtener las COORDENAS del Binary Log.


El Esclavo debe de conocer las coordenadas de replicación para realizarla.

Conectado en el MASTER

Ejecutamos SHOW MASTER STATUS

Archivo de registro binario es mysql-bin.000003 y la posición es 73


Configuración de la Replicación

Configuración. Etapas - Maestro

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

5.- Quitar el bloque de las Tablas.


Configuración de la Replicación

Configuración. Etapas - Esclavo


• Deberemos haber realizado las tareas anteriores
 Configuración del fichero my.cnf del Maestro
 Obtención de las coordenadas
 Se ha lanzado el UNLOCK TABLES
 Se ha modificado el fichero my.cnf del Esclavo

• En este punto deberemos determinar si:

A.- El Maestro no tiene datos  No disponemos de Backup por no ser necesario

B.- El Maestro tiene datos  Disponemos de Backup


Configuración de la Replicación

Configuración. Etapas - Esclavo

A.- El Maestro no tiene datos

1. Arrancar el Servidor Esclavo

2. Ejecutar el comando CHANGE MASTER TO para establecer la configuración del


servidor de replicación maestro

La replicación no puede usar los ficheros socket de Unix.


Debe de ser capaz de conectar con el maestro servidor MySQL a través de TCP / IP.
Configuración de la Replicación

Configuración. Etapas - Esclavo

B.- El Maestro SI tiene datos  Backup

1. Transferir el Backup del Maestro al Esclavo.

2. Arrancar el Esclavo con la opción - -skip-slave-start para que no se ejecute la


replicación

3. Realizar la importación del backup / Snapshot

4. Ejecutar el comando CHANGE MASTER TO para establecer la configuración del


servidor de replicación maestro

5. Iniciar los SLAVE THREAD’s

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

• La replicación funciona porque eventos escritos en el registro binario


se leen y luego son procesados en el esclavo.

• Los eventos se registran con diferentes formatos según el tipo de


evento producido.

• Basado en Sentencias SQL (SBR Statement-Based-Replication) Defecto en 5.7


 El Maestro escribe Sentencias SQL en el Binary Logs y son aplicadas en el Esclavo.
 MySQL versión 5.1.4 y anteriores.

• Basado en Filas (RBR Row-Based-Replication)


 El maestro escribe eventos que indican cómo se cambian las filas de tabla individuales.
 El esclavo copia y aplica estos cambios en filas individuales.

• 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

Basado en Sentencias SQL


• Ventajas
 Tecnología probada desde MySQL 3.23.

 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

 Ordenes como : USER(), SYSDATE(), RAND(), etc pueden dar problemas


Replicación. Formatos

Basado en Filas (RBR Row-Based-Replication)


• Ventajas
 Todos los cambios se pueden replicar. Forma mas segura de Replicación.

 Declaraciones como CREATE TABLE ... SELECT, la sentencia CREATE se genera a


partir de la definición de la tabla y se replica usando formato basado sentencias,
mientras que las inserciones de fila se replican utilizando el formato basado en filas.

 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 restauración de la copia de seguridad puede requerir más tiempo.

 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

• Para definir un determinado formato, debemos modificar la variable


- -binlog-format=format

• Valores Soportados:
 STATEMENT  Consultas SQL
 ROW  Filas
 MIXED  Mixto

• El formato de los fichero Binary Logs pueden ser cambiado en tiempo


de ejecución a nivel de Gestor o a nivel de Sesión, mediante la
modificación de la variable binlog_format
Replicación. Formatos

• Para conocer el formato actual variable binlog_format

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.

• Si utilizamos GTID, cada transacción es identificada y rastreada en el


Servidor de Origen y puede ser aplicada en el esclavo.

• Ahora podemos:
1. Utilizar binary Logs + Posicionamiento
2. Utiliza GTIDs para indicar que Transacciones debemos de realizar.

• La utilización de GTID simplifica las tareas enormemente.


Replicación. GTID

Características de GTID
• Un GTID es un identificador único creado y asociado con cada transacción
validada en el servidor de origen (maestro).

• Este identificador es único ( no sólo para el servidor en el que se originó, sino en


todos los servidores )

• Existe una correspondencia 1 a 1 entre todas las transacciones y todas GTIDs.

• A GTID se representa como un par de coordenadas, separadas por un carácter de


dos puntos (:),

 SOURCE  Identificado del Servidor de Origen


 ID  Identificador de Transacción
Replicación. GTID

Ciclo de vida de GTID


1. Una transacción se ejecuta y se validó en el maestro.
 Asignación de GTID y Numero_Transacción a la transacción (UUID del maestro) .

 GTID es grabado en el Binary Log junto con la transacción.

2. Los binary Logs son transmitidos al Esclavo y guardados en su Binary Relay


 El esclavo lee el GTID y establece el valor de su variable de sistema GTID_NEXT como este GTID.

 Esto le dice al esclavo que la siguiente transacción que debe de hacer usando este GTID.

3. Esclavo comprueba GTID y realiza la transacción


 El esclavo comprueba que este GTID no se ha utilizado para registrar una transacción en su propio
registro binario.
 Si este GTID no se ha utilizado, se escribe la GTID, se aplica la transacción, y escribe la transacción a
su registro binario.

4. Almacena junto con la transacción anterior el GTID_NEXT = GTID_original


Replicación. GTID

• A partir de MySQL 5.7.5, GTIDs se almacenan en una tabla


denominada gtid_executed, en la base de datos mysql y la variable
gtid_mode = ON

• Se crea la tabla mysql.gtid_executed cuando el servidor MySQL se


instala o se actualiza.

• Cada fila contiene los GITD asignados y el inicio y final de la


transacción correspondiente
Replicación. GTID

Implementación Replicación usando GTID


• Para utilizar GTID en replicación, tanto el Maestro como los Esclavos deben de
ser conscientes de tal hecho.

• Se puede utilizar GTID con formatos CONSULTA o FILA, pero la recomendación


es FILA.

• Se trata de un procedimiento de "arranque en frío" que implica:


 Que se está iniciando el maestro de replicación, por primera vez
 O que es posible detener el maestro de Replicación;

• 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

Implementación Replicación usando 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. Tareas Administrativas

• Una vez que se ha iniciado la replicación, ésta se debe de ejecutar


sin ningún tipo de problema y sin apenas administración.

• Sin embargo, debemos de realizar una serie de tareas periódicas con


el fin de comprobar su funcionamiento correcto:

• Chequeo del Estado de la Replicación.

• Pausar y Arrancar la Replicación


Replicación. Tareas Administrativas

Chequeo del Estado de la Replicación.


• La tarea más común en la gestión de un proceso de replicación es asegurarse de
que la replicación se lleva a cabo y que no ha habido errores entre el esclavo y el
maestro.

• El comando a utilizar en el ESCLAVO es SHOW SLAVE STATUS

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

Chequeo del Estado de la Replicación.


• En el MAESTRO podemos controlar los esclavos que están realizando la
replicación mediante el comando SHOW PROCESSLIST

• Las conexiones de los procesos Esclavos están etiquetadas como BinLog Dump
Replicación. Tareas Administrativas

Pausar y Arrancar la Replicación


• Se puede detener e iniciar la replicación mediante la ejecución de las siguiente
órdenes en el ESCLAVO

 START SLAVE
 STOP SLAVE

• Cuando se detiene la replicación ocurren 2 cosas:


 El flujo esclavo de E / S deja de leer eventos del log binario maestro y escribirlos en el log
Relay ( IO_THREAD)
 El flujo SQL deja de leer eventos del log Relay y ejecutarlas. (SQL_THREAD)

• Se puede detener / arrancar sólo uno de los flujos anteriores:


Elementos de Replicación.

• La replicación se basa guardar todos los cambios producidos en el


Servidor Maestro en sus ficheros Binarys Logs.

• Las sentencias que no modifican nada (SELECT) no se registran.

• Cada esclavo que se conecta con el maestro, solicita una copia del
registro binario y aplica los cambios individualmente.

• Los Servidores esclavos son capaces de leer y actualizar a su propio


ritmo y se puede iniciar y detener el proceso de replicación a
voluntad.

• Cambios de base de datos se filtran en el esclavo de acuerdo con un


conjunto de reglas .
Elementos de Replicación.

• La Replicación de MySQL se basa en 3 hilos principales, uno en el


servidor maestro y dos en el esclavo:

• Binlog dump thread.


 El maestro crea un hilo para enviar el contenido del log binario a un esclavo, cuando el esclavo se
conecta.
 Este hilo se puede identificar en la salida de SHOW PROCESSLIST
 Binary Logs es bloqueado mientras dura el envío de información al Esclavo.

• Slave I/O thread.


 El comando START SLAVE crea un hilo que conecta al maestro y le pide que envíe los cambios
registrados en sus logs binarios.
 Este hilo lee los datos enviados por el Maestro (BinLog dump) y los copia en los Binary Relay del
esclavo.

• Slave SQL thread.


 El Esclavo crea un Hilo para leer los datos del Binary Relay y aplicarlos al Servidor Esclavo.
Elementos de Replicación.
Relay Logs y Logs Status.

• Durante la replicación, un servidor esclavo crea varios registros que


contienen información retrasmitida por el Maestro.

• Estos ficheros LOGS son claves para una correcta replicación.

• 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.

• Master Info Logs (master.info)


 Contiene información de estado y conexión Maestro-Esclavo
 Esta información puede ser escrita en la tabla mysql.slave_master_info cuando la variable
- -master-info-repository=TABLE.

• Relay_Log Info Logs (Relay-log.info)


 Mantiene información del punto de ejecución dentro de log retardado del esclavo.
 Esta información puede ser escrita en la tabla mysql.slave_relay_log_info cuando la variable
- -relay-log-info-repositorio = TABLE.
Relay Logs y Logs Status.
Relay Logs y Logs Status.

• Relay Logs
• Relay Logs son un conjunto de ficheros numerados que contienen eventos con los cambios de
base de datos

• Relay Logs también disponen de un archivo de índice que contiene


los nombres de todos los archivos de registro de relé utilizados.

• Los nombre de los Relay Logs siguen el formato:


host_name-relay-bin.nnnnnn
Almacenados en el directorio de DATOS
Cuidado con el cambio de Nombre del
Servidor Esclavo después de activar la
• El índice asociado: host_name-relay-bin.index Replicación (Bug #2122 )

• 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.

• Slave Status Logs


• Un servidor esclavo de replicación, además, crea dos archivos LOGS ( master.info y relay-
log.info)

• 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.

• Podemos obtener información de la Replicación:


 SHOW SLAVE STATUS \G
 Visualizando los fichero Master.info - Relay-log.info
Reglas de Filtrado

• La replicación en MySQL tiene la posibilidad de especificar una serie


de condiciones en función de unas reglas de Filtrado.

• Estas reglas se pueden aplica a nivel de Maestro y Servidor


• Maestro
 Escribir o no las consultas en el Binary Logs
 Indicar qué BBDD pueden registrar los cambios y cuales no
( - -binlog-do-db y - -binlog-ignore-db)

• Esclavo
 Determinar si las consultas recibidas se aplican o no
( - -replicate-* )

• En MySQL 5.7.3 y superiores, los filtros se pueden cambiar de forma


dinámica mediante CHANGE REPLICACION FILTER
Reglas de Filtrado

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

• Su funcionamiento depende del Formato de Binary Log


 Consultas SQL
 Filas (ROW)

• Existes bastantes reglas de filtrado:


 Base de Datos
- -replicate-do-db
- -replicate-ignore-db

 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

• La replicación puede ser utilizado en muchos entornos diferentes


para una variedad de propósitos.

• En esta sección ofreceremos una información general y consejos


sobre el uso de la replicación de tipos de soluciones específicas:

 Replicaciones como Backup


 Replicaciones con diferentes Maestros y Motores
 Escalabilidad
 Diferentes esclavos
 Rendimiento
 Conexiones SSL
 Réplica semi-síncrona
 Réplica retrasada
Soluciones

Replicaciones como Backup


• Utilización: replicar datos desde el maestro al esclavo, y luego una copia de
seguridad de datos del esclavo.

• El esclavo se puede detener sin afectar al maestro, por lo que puede producir una
copia correcta.

• Como hacer la copia de Seguridad:


 Mysqldump

 Sistema Operativo
Soluciones

Replicaciones con diferentes Maestros y Motores


• Cuando hacemos una replicación, el tipo de motor de las tablas no es importante.

• De hecho, no se replican las variables default_storage_engine ni


storage_engine.

• Esto proporciona el beneficio de poder trabajar con la misma tabla en diferentes


motores.
 Ejemplo: Escalabilidad Horizontal
– Deseamos utilizar tablas InnoDB en el maestro (funcionalidad transaccional) y en el esclavo
usamos MyISAM (datos es de sólo lectura)

• 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;

• Podemos dividir la carga de consultas de bases de datos a través de múltiples


servidores de bases de datos, dentro de ciertas limitaciones.

• Consultas Select (Lecturas) sobre los esclavos de replicación


• Operaciones DML sobre el maestro de replicación.
Soluciones

Diferentes esclavos
• Puede haber situaciones en las que tiene un solo maestro y desea replicar
diferentes bases de datos a diferentes esclavos.

• Esto puede ser configurado mediante:


 Los esclavos limitando lo que se aplica en la replicación mediante las opciones
- -replicate-wild-do-table en cada esclavo.
Soluciones

Rendimiento de la Replicación
• Servidores de Replicación con muchos Esclavos de replicación pueden reducir el
rendimiento del mismo.

• El Servidor de Replicación puede convertirse en un cuello de botella por el gran


número de peticiones de envío de Binary Logs.

• Una Solución: Crear un Esclavo Especial de Replicación:


 El maestro replicar en sólo un esclavo y para los esclavos restantes se conecten a este
esclavo primario para sus requisitos de replicación individuales.
Soluciones

Rendimiento de la Replicación

• Como se configura esta opció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)

• Debemos obtener o crear un Certificado de Seguridad para Maestro y otro para


Esclavo.

ssl-ca  autoridad de certificación (CA).


Maestro ssl-cert  Clave pública del servidor.
key ssl  Clave privada del servidor.

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.

• Deberemos instalar dicha opción, configurarla y monitorizarla en ambos lados.

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.

• Un servidor esclavo retrasa deliberadamente la aplicación de los Relay Logs un


periodo de tiempo especificado. ( Retraso por defecto 0 segundos)

• Esto se realiza utilizando la opción MASTER_DELAY del comando CHANGE


MASTER TO para establecer un retraso de N segundos:
CHANGE MASTER TO … ,
MASTER_DELAY = N,
………………….

• 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

• No todo es posible con la Replicación, hay veces en las cuales esta


replicación no es posible o funciona «algo diferente» a lo esperado.

• 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.

• Existen muchas situaciones que deberíamos analizar, sin embargo


nos centraremos en las mas habituales:
• Auto_incrementales
• Character Set
• Current_user()
• Different Table Definitions
• Replication y TimeZones
http://dev.mysql.com/doc/refman/5.7/en/replication-features.html
Notas y Consejos: Características y Problemas

Auto_incrementales
• Replicación basada en SQL de AUTO_INCREMENT, LAST_INSERT_ID (), y los
valores TIMESTAMP se hacen de forma correcta, excepto:

 En versiones MySQL 5.7.1, las columnas AUTO_INCREMENT deben replicarse en una


columna AUTO_INCREMENT exclusivamente.

 Trigger o funciones que utilicen actualizaciones en columnas AUTO_INCREMENT se


marcan como estados inseguros.

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.

 Una buena solución es poner el conjunto de caracteres explícitamente en el comando


CREATE TABLE.
Notas y Consejos: Características y Problemas

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.

 AMPLIADA  Modifica CURRENT_USER por el usuario que está ejecutando dicha


acción y escribe directamente dicho usuario.

• De esta forma, es el mismo usuario el que realiza la acción tanto en el Maestro


como en el Esclavo. Debemos de asegurarnos que dicho usuario existe en
Esclavo.
Notas y Consejos: Características y Problemas

Different Table Definitions


• Las Tablas Origen y Destino para la replicación no tienen que ser idénticos.

 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.

• Si replica entre los servidores en diferentes zonas horarias, la zona horaria se


debe ajustar en el maestro y el esclavo ( sino, funciones que usen hora local no se replican
correctamente - NOW() - )

• Podemos ajustarlo mediante la opción - -timezone=timezone_name o


modificando la variable TZ

• 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

• MySQL soporta la replicación de una versión principal a la siguiente


más alta versión principal.
 maestro MySQL 5.0  esclavo ejecutar MySQL 5.1
 maestro MySQL 5.1  esclavo ejecutar MySQL 5.5.

• 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

• Pueden existir problemas de replicación entre Maestros 4.1 o inferiores y Esclavos


5.1 y superiores
 SOLUCION: Introducción de Servidores Intermedios MySQL con versiones intermedias
Notas y Consejos: Compatibilidad Versiones

• La replicación entre Maestros Actuales y esclavos antiguos no está


recomendada por los siguientes motivos:

• Formatos diferentes de Binary Logs


 El formato de Binary Logs de MySQL 4.1 (o anterior) y versiones MySQL 5.0 o superiores no son
compatibles..

• Replicaciones basadas en filas


 La replicación basada en filas se implementó en MySQL 5.1.5, por lo Master MySQL 5.1.5 o superiores
no se puede hacer la replicación a esclavos inferiores a MySQL 5.1.5.

• Incompatibilidad de Consultas SQL


 No se puede replicar de un maestro más reciente a un esclavo antiguo utilizando replicación SQL, si las
Consultas utilizadas en SQL son funcionalidades del nuevo Gestor MySQL.
Notas y Consejos:
Actualizaciones de Servidores de Replicas
• La actualización de los Servidores de Réplicas se puede realizar
dependiendo de las versiones actuales.
http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html

• El orden de actualización debe de ser:


1. Servidores Esclavos
2. Servidores Maestros

• 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

Si durante la Replicación se producen errores o Estados Inconsistentes, cambie temporalmente el


formato de Binary Logs a formato Fila (binlog_format = ROW) y posteriormente modificarlo.
Notas y Consejos: Resolución Problemas

• Ante la posibilidad de no funcionamiento de la Replicación,


deberemos encontrar el problema y resolverlo.

• 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.

• Verifique que el esclavo está en marcha SHOW SLAVE STATUS y que


Slave_IO_Running=Si y Slave_SQL_Running=Si.

• Si el esclavo está en marcha, comprobar si se ha establecido una conexión con el maestro.


 SHOW PROCESSLIST, buscar I/O y Thread SQL y comprobar su estado
Notas y Consejos: Resolución Problemas

• 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

• Si el esclavo se detiene inesperadamente


 Error de Replicación por limitación de la misma
 Error en la ejecución de una Sentencia SQL a replicar.
Notas y Consejos: Informe de Fallos

• Si tras revisar todos los posibles problemas anteriores, nuestra


replicación sigue sin funcionar, deberemos pedir Ayuda (support)

• Deberemos enviar un informe con la mayor información posible del


entorno para poder localizar el error.

• Habitualmente hay 2 escenarios comunes de Fallos:


• Caso reproducible
 Seguiremos el procedimiento indicado en el siguiente enlace:

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

También podría gustarte