Administracion de Mysql Parte 1
Temas abordados
Administracion de Mysql Parte 1
Temas abordados
[00:21] Entonces abrimos nuestro navegador, y en nuestro navegador vamos a digitar mysql
workbench download. Entonces aquí nos aparecen varias opciones. Vamos a aprovechar esta
primera opción que nos aparece que sería dev.mysql.com.
[00:50] Damos clic y nos lleva directamente a una página de community downloads, que son los
softwares desarrollados de forma libre por varios programadores y personas que trabajan con
MySQL y que son de acceso gratuito. Entonces aquí vamos a seleccionar el sistema operativo.
Ustedes pueden escoger Linux, Mac, Fedora, el que ustedes quieran.
[01:22] Yo voy a usar Windows porque es mi sistema operativo. Aparece una descarga
recomendada que sería el instalador para windows, ese es el que queremos, aparecen otras
descargas pero no. Quedémonos con este de aquí, el que dice All MySQL Products For All
Windows Platforms In One Package.
[01:44] Todos los productos SQL para todas las plataformas de Windows en un solo paquete,
ese es el que queremos. Entonces le damos a Go To The Download Page. Estando aquí nos
muestra dos. El que vamos a querer es el que dice MySQL Installer Web Community 8.0.24.0.
[02:08] Esa parte final de la versión, que sería 8.0.24.0 puede cambiar, puede ir actualizándose.
Entonces el que queremos es el que dice MySQL Installer Web Community. Principalmente es
esto. Como ustedes observan, es una descarga relativamente pequeña. Le vamos a dar clic en
download y nos dirige a una página que nos pide que, para poder descargar MySQL tenemos
que hacer una autenticación con Oracle.
[02:38] Recordemos que Sun Microsystems hace parte de Oracle y que MySQL era propiedad
de Sun Microsystems, por ello debemos hacer un sign up en la página de Oracle. No quiere decir
que nos vayan a cobrar. Esto es un software libre, es gratuito para nosotros pero si ustedes no
tienen cuenta en Oracle, tienen que dar clic aquí, donde dice sign up.
[02:59] En mi caso ya tengo cuenta, entonces yo simplemente le voy a dar log in y él me
redirige a la página de sign in de Oracle. Yo como ya tengo mis credenciales aquí, simplemente
le voy a dar sign in y en este momento, entonces me permite descargar el instalador. Le doy clic
y va a descargar mi instalador.
[03:26] Yo lo voy a salvar en este computador, puede ser allí. Me aparece aquí ya descargado, le
doy clic. Ahora él me va a mostrar qué tipo de configuración yo quiero, yo quiero realizar la
configuración más completa que instala todos los productos necesarios para propósitos de
desarrollo con MySQL.
[03:51] Entonces va a ser esta primera opción, developer default. Entonces le damos next, él va
a instalar varios conectores, una serie de módulos que va a necesitar. A mí me va a mostrar una
serie de conflictos, porque yo previamente ya había instalado Oracle MySQL. Pero a ustedes
puede que no les aparezca esta parte.
[04:17] Sin embargo, aquí me dice, este path ya existe. Si ustedes ya habían instalado MySQL
antes, puede que les aparezca. Si no lo tienen no se preocupen. Lo que les va a mostrar en esta
parte de la instalación es que ustedes sepan que ya es un path existente o el path donde ustedes
lo desean guardar.
[05:06] Me dice que han sido satisfechos. Que pueden ser actualizados o no serán instalados. Yo
le digo: "no se preocupe, vamos adelante". Entonces me muestra todos los módulos que
necesitan ser descargados para poder realizar mi instalación. Como ustedes observan uno de
ellos es workbench aquí. Entonces, en este momento le damos execute y el va a descargar todos
estos módulos.
[05:36] Él va a demorar, puede demorar algunos minutos, algunos instantes, puede ser muy
rápido, puede ser despacio. Yo voy a dejar que lo haga completo porque la descarga usualmente
es rápida. Ya va a acabar de descargar todos los módulos y listo. Ahora le damos clic en next, y
ahora me dice "ahora estamos listos para instalar estos paquetes."
[06:02] Los descargó, ya los tiene listos para descargarlos y le voy a dar execute. A partir de
este momento voy a pausar mi video por unos instantes, en cuanto se instala MySQL server.
Bien. Acabo aquí de realizar la descarga de todos nuestros módulos y estamos listos para la
instalación. Le damos clic en next y nos pide entonces la configuración del producto.
[06:28] Vamos a estar configurando cada uno de esos productos, que serán MySQL Server,
MySQL Router y ejemplos, Samples and examples, muestras y ejemplos. Le damos clic en next.
Ahora nos pide el tipo de configuración del servidor que queremos. Va a ser el computador de
desarrollo.
[06:49] La dirección, el tipo de conectividad, el protocolo TCP iP. Todo esto lo vamos a dejar
por defecto. No vamos a cambiar nada de lo que hay aquí y nos pregunta ahora el método de
autenticación, si queremos usar el tema de un password, encriptarlo con un password fuerte, que
es lo recomendado, o utilizar el método de autenticación que siempre ha sido utilizado por
MySQL.
[07:18] No, vamos a este que es un método de encriptación más común y el más sencillo.
Vamos a darle clic en next. Ahora nos va a pedir él que nosotros establezcamos un password
para nuestro root. Recordemos que tenemos un usuario root que es el administrador de nuestra
base de datos y es el único usuario que vamos a tener.
[07:42] Entonces ustedes creen un password, algo que ustedes recuerden con facilidad. Aquí no
se tienen que preocupar. Dice que es un password que es débil, no importa. Aquí nos pregunta si
queremos crear otros usuarios. No. Vamos a usar únicamente el usuario root, que es el
administrador. Le damos clic en next y ahora nos habla sobre el servicio de Windows.
[08:14] Si queremos que My SQL sea un servicio de Windows. Eso quiere decir que siempre
que Windows se reinicie o haga boot, entonces MySQL vuelva y se active y quede al aire.
Queremos que nuestro servidor esté siempre activo. Le damos clic aquí en next. Ahora viene
para aplicar la configuración.
[08:35] Le damos a ejecutar, son todos estos pasos que se estarán realizando y puede que se
demore unos instantes. No hay ningún problema. Lo importante es que realice todos los pasos,
toda esta secuencia de pasos. Ahora, dice que la configuración de MySQL Server fue exitosa.
Ahora faltan los otros dos parámetros.
[09:01] Sigue el SQL Router, listo. Le damos next. Lo mismo, vamos a mantener todo esto por
defecto. No vamos a cambiar nada dónde está la configuración del router. Damos finish.
Samples and examples, damos next. Ahora habla sobre la conexión del servidor.
[09:21] Entonces vamos a usar un tipo de servidor stand-alone y nos pide colocar nuestra
contraseña para poder verificar que esa conexión cliente-servidor, recordemos que hemos hecho
de nuestro computador también un servidor, y el mismo cliente y el servidor se encuentran en el
mismo dispositivo. Siempre que entramos en contacto con la base de datos, vamos a tener que
tener esa conexión.
[09:51] La chequeamos y dice que fue exitosa. Perfecto. Damos clic en next y finalmente aplica
esas configuraciones y le damos execute. Este es el paso final. Ahora la configuración de
samples y examples fue exitosa. Bien. Ahora le damos clic en finish y finalmente le damos clic
aquí en next de nuevo. Ahora sí la instalación está completa.
[10:26] Nos dice Start MySQL Workbench after setup, o sea, cuando acabemos la configuración
si queremos que MySQL Workbench arranque. Le damos que sí. También esta My SQL Shell.
Listo. Aquí nos da un breve resumen de lo que fue hecho. Le damos finalizar y ahora va a abrir
nuestro Shell, que es este de aquí, y nuestro Workbench.
[10:53] En nuestro Workbench nos muestra aquí la conexión interna que tenemos con el
servidor propio de la máquina, que es el LocalHost. Si le damos clic en ella, nos va a solicitar
que introduzcamos nuestra contraseña. En mi caso, no me la solitió porque yo previamente
había solicitado que mi contraseña sea guardada.
[11:18] Pero si no, en el caso de ustedes, le va a pedir que digiten la contraseña. Digítenla y le
dan un clic a la opción de recordar contraseña, para que cada vez que estén accediendo al
servidor local, no se las pida. Entonces estamos aquí ya en nuestro IDE.
[11:38] Hay personas que prefieren trabajar por el command prompt y digitar allí todas sus
líneas de comando. Perfecto, lo pueden hacer, el IDE va a facilitar la parte gráfica y la
visualización de las tablas. Esto nos va a ayudar bastante.
[11:54] Y es así como les vamos a enseñar a trabajar con MySQL, a través de este ambiente
gráfico que fue desarrollado específicamente para que las personas que trabajan con base de
datos puedan tener facilidad a la hora de trabajar con todos estos procedimientos propios de las
bases de datos.
[12:16] Entonces ahora sí tenemos nuestro ambiente listo para trabajar. En el próximo vídeo
estaremos procediendo a analizar algunas definiciones necesarias para conocer un poco más
sobre MySQL.
Y bien. Ya que tenemos Workbench instalado en nuestra máquina, ahora nos corresponde
contar con nuestra base de datos, que emplearemos para desarrollar nuestro entrenamiento.
Entonces venimos aquí a Workbench. Si ustedes han participado de los entrenamientos
anteriores, tienen que tener nuestra base jugos_ventas que es donde están todas las tablas que
hemos utilizado para desarrollar nuestros ejercicios.
[00:47] Yo voy a eliminar aquí el esquema, me va a dar drop schema, me va a decir drop now.
Sí, lo eliminé. Entonces supongamos que no tengo jugos_ventas. Debo crearlo. Clic derecho,
create schema y se debe llamar jugos_ventas. Tal cual yo lo escribí, tiene que quedar así. Si no,
no les va a funcionar. Apply. Le damos apply y finish. Entonces ya tengo mi esquema
jugos_ventas.
[01:15] Está vacío, no tiene nada. Voy a donde dice administration, y le doy data import restore
clic y importar de dónde. entonces tenemos que buscar el folder donde lo tenemos. Yo lo tengo
en mi One Drive, en mi carpeta que se llama data. Está en stored_procedures.
[03:02] De esta forma ya contamos con nuestra base jugos_ventas que es la que estaremos
utilizando para desarrollar nuestro entrenamiento. Nos vemos en la próxima aula.
Al acceder a Workbench, ¿En cuál pestaña encuentras la opción que te permite recuperar la base
de datos?
Alternativa correta
Schemas.
Alternativa correta
Administration.
¡Alternativa correcta! Así es, en esta pestaña podrás elegir la opción Data Import/Restore.
Llegó la hora de que sigas todos los pasos realizados por mí durante esta clase. Si ya lo has
hecho ¡Excelente! Si todavía no lo has hecho, es importante que ejecutes lo que fue visto en los
vídeos para que puedas continuar con la próxima aula.
1) Si estás usando un nuevo equipo, debes instalar MySQL. Por ello, te invito a seguir las
siguientes instrucciones:
Instalación en WINDOWS
Accede a través de tu navegador y busca: MySQL Downloads. Allí, accederás al
link http://www.mysql.com/downloads.
Busca el link que dice: MySQL Community Edition (GPL) / Community (GPL)
downloads.
Dirígete hacia: MySQL on Windows (Installer & Tools) / Downloads.
Haz clic en: MySQL Installer.
Haz clic en el botón de download al lado de la opción: Windows (x86-32 Bits), MSI
Installer (mysql-installer-web-community-8.0.15.0.msi).
Haz login en la página de Oracle. Si no tienes login, regístrate.
Luego de hacer Login haz clic en Download Now.
Ejecuta el programa que fue descargado.
Haz clic en: I Accept the license terms y luego en Next.
Escoge la instalación: Developer Default. Haz clic en Next dos veces.
Haz clic sobre Execute para hacer el download y la instalación de la base y sus
componentes.
Haz clic en Next dos veces.
Mantén la opción StandAlone MySQL Server / Classic MySQL Replication.
Mantén las propiedades por defecto del servicio y del gateway. Clic en Next.
Mantén la opción Use Strong Encryption for Authentication... Clic en Next.
Incluye la contraseña del usuario root dos veces. Clic en Next.
Mantén las propiedades por defecto. Clic en Next.
Clic en Execute para iniciar la instalación.
Siempre selecciona Next y Finish a medida que otros cuadros de diálogo sean exhibidos. Si se
solicita la contraseña del usuario root, digita la que configuraste anteriormente durante la
instalación.
Instalación en UBUNTU
dpkg -l mysql-server
mysql -VCOPIA EL CÓDIGO
Configurando MySQL:
2) Si estás usando un nuevo equipo, o no participaste de los cursos anteriores, debes recuperar la
base de datos que usaremos en este curso. Para ello, realiza los siguientes pasos:
[00:23] Y este profesional tiene varias funciones, dentro de las cuales se pueden destacar las
siguientes: La primera de ellas es evaluar el ambiente operativo de la empresa, saber si cuentan
con el hardware necesario para la instalación y el mantenimiento de MySQL, de modo que
pueda ser completamente funcional.
[00:47] También él configura los accesos a la base de datos de forma segura para evitar por
ejemplo que haya una invasión a la base de datos o hacking a la base de datos. Él trabaja con la
creación de las conexiones, con las interfaces IDE, por ejemplo, con el Workbench.
[01:08] De la misma manera otro tipo de interfaces para que los usuarios puedan acceder a la
base. De la misma manera, él mantiene la base con un buen desempeño. Él trabaja con todos los
parámetros de inicialización de MySQL de una forma óptima y trabaja bien con los índices para
por ejemplo mejorar la consulta a las bases de datos, para hacer las consultas más rápidas.
[01:36] Entonces es un profesional que conoce muy bien las variables de ambiente de MySQL y
trabajar con ellas. De la misma manera él se encarga de almacenar los datos, crear un backup o
una copia de seguridad para los datos en caso de que se presente algún problema con la
información. Que no se vaya a perder la información, sino que haya un lugar donde esté
almacenada de modo que se pueda recuperar.
[02:27] Él monitorea la instalación de MySQL, siempre está gestionando todos los recursos
utilizados por la base de datos y de forma continua está optimizándolos, adecuándolos a las
necesidades de los usuarios. Configura lógicamente el ambiente y todas sus propiedades a través
del archivo my.ini. que lo estaremos viendo detalladamente en los siguientes videos.
[02:57] Administra los usuarios que tendrán acceso a la base de datos y el nivel de permiso que
tendrán cada uno de estos accesos. Algunos tendrán nivel de acceso únicamente para lectura,
otros podrán también hacer actualizaciones o modificaciones a las tablas, pero todo eso lo define
el DBA.
[03:20] Hoy en día, con la llegada de la nube, el papel del DBA de cierta forma, estas funciones
ya han sido cubiertas por las plataformas de nubes que conocemos. Azure, Google, todas ellas
ya cuentan con varias herramientas que automatizan varias de estas funciones, de estos trabajos.
[03:47] Entonces le corresponde al DBA prepararse un poco más y por ejemplo volverse experto
en herramientas de nube, pero son temas que podríamos de repente discutir, son cuestionables
un poco y no es el enfoque de nuestro curso. Sin embargo es importante tenerlo en cuenta.
[04:08] Esto es de modo general lo que hace un DBA. El próximo video entonces veremos un
poco más sobre las conexiones de MySQL. Ya nos vemos.
¿Cuáles de las siguientes opciones son funciones del DBA (Database Administrator)?
Alternativa correta
Instalar el software.
¡Alternativa correcta! Esta es una de las funciones del DBA.
Les saludo una vez más, alumnos y alumnas. Ahora vamos entonces a ver nuestras conexiones
con el servidor. Vamos a Workbench y al abrir nuestro Workbench, pegamos, yo ya lo tenía ya
abierto. Podemos venir acá al inicio y buscarlo donde lo hayamos instalado.
[00:20] Ya está completamente instalado, le damos clic y va a cargar. En esta parte inferior están
las instancias locales o la conexión local, porque es la que ya viene configurada cuando
instalamos Workbench. Yo le voy a hacer aquí un zoom, para visualizarlo mejor.
[00:44] Entonces tengo mi instancia local y cuando yo clico sobre ella, ya me aparece aquí mi
conexión con mis diversas bases de datos que ya se encuentran configuradas en mi instancia
local. Pero si yo voy nuevamente a este botón, donde esta la casita, tengo la posibilidad de tener
nuevamente acceso a las conexiones que yo tenga con mi servidor.
[01:07] Dentro la máquina yo tengo una conexión cliente-servidor que se encuentra en el mismo
lugar físico que sería este hardware que sería mi laptop, pero yo podría tener aquí otra conexión
que es cliente-servidor, con otro servidor que se encuentre en la nube. Con un MySQL que se
encuentre operando en un lugar remoto y allí podría entonces tener esa conexión.
[01:34] Para ver los parámetros de esta conexión yo puedo hacer clic sobre esta herramienta,
este botoncito que tiene como una llave. Al darle clic, noten ustedes lo siguiente. Ella tiene un
método de conexión. Aquí en este caso sería el estándar TCP/IP, que es el protocolo estándar de
conexión. Tenemos también por ejemplo el TCP/IP con security shell o secure shell, que es otro
protocolo con encriptación, más seguro.
[02:08] Aquí están los parámetros de la conexión. Tengo mi host name que es la dirección local
de mi máquina. Este sería 127.0.0.1, la puerta de acceso seria o la puerta mejor sería la 3306,
este número puede cambiar dependiendo de donde se encuentre configurado el user name sería
root y si yo veo aquí le puedo dar clic donde dice test connection y me va a decir successfully
made the MySQL connection.
[02:43] Entonces está conectado. Yo aquí también podría decir simplemente que esto se llama
localhost, y si yo nuevamente hago test connection, él me dice que está perfecto, esta
funcionando completamente bien.
[03:01] Entonces voy a cerrar esta ventana, venimos aquí a la instancia local. Si yo quiero crear
una nueva conexión desde aquí este botoncito que dice +, y acá nuevamente configuro los
parámetros. Yo puedo ponerle otro nombre, le puedo decir Local instance MySQL 8.0 u 80 y
sería versión 2.
[03:38] Aquí le puedo poner localhost. Recuerden, aquí yo tengo que usar localhost porque yo
no tengo actualmente una conexión de MySQL en la nube. Sino aquí yo pondría un número de
IP que se encuentre en otro lugar con la puerta de acceso debida, con el nombre de usuario y
tendría que probar mi conexión. Aquí dice que se hizo la conexión. Perfecto.
[04:02] Le digo ok. En este momento ya tengo dos conexiones. Lógicamente, ellas son iguales
porque tienen los mismos parámetros, pero son dos conexiones diferentes. No dejan de ser dos
conexiones diferentes. Si yo le doy clic aquí, me va a abrir una nueva pestaña con otra conexión.
Tiene lógicamente la misma base de datos pero son dos conexiones diferentes.
[04:25] Lo que yo ejecute aquí únicamente va a ser ejecutado en esta conexión, no va a ser
ejecutado en esta otra conexión. Entonces son dosconexiones diferentes. Las puedo cerrar y
volver aquí a mi home. Tengo dos conexiones. Ahora bien, ¿Dónde quedan almacenadas estas
conexiones? Quedan en el siguiente directorio.
[05:32] Local Instance MySQL 80 v2 y tengo Local Instance MySQL 8080. Entonces esta es
una forma de nosotros localizar la conexión. ¿Por qué es importante conocer el lugar donde se
encuentra este archivo?
[05:52] Porque si yo tengo que configurar varias conexiones en diversos equipos de una
empresa o de una organización, eso no quiere decir que yo voy a ir de máquina en máquina
digitando todas estas configuraciones. No. Simplemente yo vengo a esta careta, la copio en este
directorio, copiar ese archivo connections y lo transporto a este directorio en cada una de las
máquinas.
[06:18] Lo pego allí, en ese directorio, en cada una de las máquinas, con todas las conexiones y
voy a tener la misma configuración, d De modo que cualquier persona va a tener acceso a todas
esas conexiones y no voy a tener la necesidad de físicamente ir y tener que configurar las
conexiones en cada una de las máquinas.
[06:37] Básicamente es eso. Si yo quiero eliminar esta conexión. ¿Qué hago yo? Vengo aquí en
el botón de la herramienta y esta segunda conexión, localiza MySQL 80 v2, entonces yo le doy
aquí al botón donde dice delete y listo. Ya la hemos eliminado.
[07:06] Entonces básicamente eso era lo que les queríamos mostrar con respecto a nuestras
conexiones MySQL. Lógicamente para nuestro ejercicio vamos a trabajar una conexión local,
que es la que fue configurada al momento de la instalación de MySQL en cada uno de sus
computadores. Hasta el próximo video.
Los saludo a todos una vez más. Cuando nos conectamos al servidor de MySQL, recordemos
que aquí tenemos una conexión cliente-servidor dentro del mismo equipo físico, digamos en
nuestro computador que estamos usando, entonces yo tengo ese servidor activo. Él está
funcionando y por eso es que yo me puedo conectar a él.
[00:26] No es algo que se encuentra dentro de mi equipo como tal, que sea local sino que es
servidor de red. Y muchas veces yo necesito activar o desactivar este servidor. ¿Por qué? Porque
tal vez debo hacer un mantenimiento a la red como DBA. A veces hay que hacer algún tipo de
operación que impida que otros usuarios tengan acceso a la base de datos mientras se hacen
estas operaciones.
[01:03] Entonces debo detener el servidor y nadie más va a tener acceso a él. Y puedo hacer lo
que tenga que hacer y después nuevamente vuelvo y reactivo el servidor.
[02:40] Tenemos una conexión cliente-servidor en el mismo espacio físico pero no deja de ser
una conexión de red. ¿Cómo yo detengo este servidor para hacer estos mantenimientos? Vengo
aquí y le digo interrumpir el servicio. Entonces él en este momento detiene el servicio y ya no
está más activo.
[03:35] Entonces aquí dice, inclusive podemos ver que él ya nos indica que tiene ese problema.
Dice: no pudo conectarse, el servidor puede que no esté rodando o no esté siendo ejecutado.
Entonces volvemos y cerramos nuestra conexión. Venimos a nuestro servicio de Windows y le
damos aquí a MySQL80, y le damos play. Nuevamente estamos reiniciando el servicio.
[04:07] Digamos en este lapso en el cual él estuvo detenido, yo pude haber hecho todas las
alteraciones que necesitaba hacer, por ejemplo al archivo my.ini, que es donde se encuentran
diversas opciones de inicialización de MySQL para las conexiones. Quiero cambiar algo, quiero
por ejemplo, darle más memoria a las tablas temporales para que no nos queden escritas en disco
duro y de repente se está demorando mucho el trabajo.
[04:36] En mi servidor estoy teniendo menos eficiencia porque está escribiendo en disco ya que
no hay más espacio de memoria RAM para las tablas temporales. Entonces yo puedo hacer eso
en el archivo de my.ini y vuelvo y reinicializo el servicio y funciona. Ya tengo más espacio de
memoria para trabajar con tablas temporales.
[05:00] Entonces eso es un ejemplo. No estoy diciendo que sea lo único que yo puedo hacer.
Puedo hacer muchas más operaciones deteniendo el servidor para poder hacer ciertos ajustes o
ciertos mantenimientos a la red. Esto también yo lo puedo hacer a través de líneas de comando.
[05:19] Entonces yo vengo aquí, a mi command prompt, clic derecho, ejecutar como
administrador. Le damos clic y nos abre aquí nuestro command prompt. ¿Entonces como yo lo
detengo? Le doy net stop MySQL80 y aquí dice, el servicio MySQL80 está siendo finalizado y
fue finalizado con éxito.
[05:50] Si yo vengo a MySQL, a Workbench, nuevamente trato de entrar a mi instancia local, él
va a tratar de ver pero no hay conexión. Cerremos nuevamente, no hay conexión, cerramos aquí
nuestra instancia local.
[06:11] Volvemos a nuestro command prompt y le damos net start mysql80. Enter y dice: El
servicio de MySQL80 está siendo iniciado y fue iniciado con éxito. Entonces ya podemos
inclusive cerrar el command prompt. Venimos a Workbench, le damos a nuestra instancia local
y nos muestra nuestra base de datos.
[06:42] Como les mencioné, esto es muy útil cuando queremos hacer mantenimiento a la base o
también necesitamos alterar alguna de las variables de entorno para optimizar por ejemplo el uso
de nuestro servidor.
[07:00] Entonces, es eso lo que les queríamos mostrar. En el próximo video vamos a hablar un
poco sobre la forma de hacerle tuning o la forma de optimizar o mejorar el desempeño de
MySQL. Ya nos vemos.
En Windows ¿Cuáles son las maneras de detener y de reiniciar el servicio como presentado en el
video?
Alternativa correta
Les doy la bienvenida, alumnos y alumnas, a nuestra clase número 3 en la cual estaremos
hablando un poco sobre tuning. La palabra tuning es una palabra en inglés, que se traduciría al
español como poner a punto, para nuestro caso. En otro caso sería como sintonizar, cuando
estamos tratando de sintonizar una emisora.
[00:21] Pero no, acá sería poner a punto, o sea poner o dejar de una manera que el desempeño
aumente. Por ejemplo, cuando se le hace un tuning a un carro es muy común hoy en día, cuando
vemos en las películas que dejan los carros bien bonitos, con buenos motores, con buena
suspensión, con buena transmisión para que el carro sea mucho más rápido, más eficiente.
[00:53] Entonces eso se llama hacerle tuning al carro. Entonces en MySQL, en esta base de
datos, nosotros también podemos realizar este tuning. Lo podemos poner a punto para que su
desempeño sea mucho mejor. Hay cuatro formas de configurar el ambiente MySQL para hacer
este tuning.
[01:14] Entonces una de ellas es a través de las bases de datos, lo veremos más adelante y los
índices también. Las variables internas de MySQL que serían mysqld, que lo vamos a ver
también en los próximos vídeos y el hardware y el sistema operativo. Vamos a hablar
inicialmente sobre hardware. Entonces, el hardware hoy en día casi todos los sistemas
operativos son de 64-bits.
[01:41] Recordemos que MySQL puede utilizar varios procesadores en paralelo y puede llegar a
consumir toda la capacidad de memoria de la máquina. Por eso es mejor utilizar sistemas
operativos de 64-bits. Es lógico que en el ambiente corporativo puede que se encuentren aún
equipos antiguos que son de 32-bits. Entonces debemos ajustarnos a los que tengamos a
disposición pero debemos dar preferencia a sistemas operativos de 64-bits.
[02:15] Lo otro es la configuración de la RAM. Hay un parámetro interno que nos permite
indicar el máximo de memoria que podemos utilizar para que los procesos sean ejecutados.
Lógicamente yo no voy a disponibilizar toda mi memoria RAM porque no tendría sentido. Sin
embargo, una buena práctica sería no exceder el 50% de la memoria RAM disponible de la
máquina.
[02:45] Si yo tengo 16 gigas de memoria RAM, entonces máximo es 8 gigas para poder trabajar
con éxito. Entonces un ejemplo sería si yo tengo una base de datos de 1 giga, la lógica inicial a
primera vista me dice que no va a consumir más de 8 gigas de RAM. Sin embargo, en un
ambiente real, recordemos que no hay solamente una conexión realizando diversos procesos en
la base de datos o ejecutando operaciones.
[03:19] Entonces si hay muchas conexiones, lógicamente 8 gigas de RAM no van a ser
suficientes para trabajar con una base de datos de 1 giga. Entonces dependiendo de la forma
como se trabaje con la base de datos, 8 gigas de RAM puede ser muy poco. También el tipo de
lectura de disco. Eso también es un factor a tener en cuenta.
[03:44] Si estamos trabajando con un hard disk, un HD de los que conocemos o estamos
trabajando con un disco en estado sólido que son los modernos SSD. Digamos hoy en día los
SSD todavía son costosos, difícil de tener acceso a ellos para tenerlos a disposición con mucha
facilidad, sobre todo en un ambiente corporativo.
[04:12] Pero lo que más vemos es hard disk, los discos duros convencionales que tienen partes
móviles. Entonces hoy en día, aún existen SCSI y existe SATA y SAS. Ya como los SCSI son
tan antiguos puede ser que no los veamos tanto pero entre SATA y SAS es mejor darle
preferencia a los discos SAS porque ellos tienen un mejor desempeño.
[04:45] También el uso de controlador de disco RAID, tenemos en las siguientes opciones
RAID 0, RAID 1, RAID 5 y RAID 10. Ellos son empleados para la seguridad de los datos. Si yo
tengo RAID 0, él va a dividir los datos en dos discos duros diferentes y aunque observemos
únicamente un drive, el sistema operativo lo que va a hacer es dividir este dato en dos discos
duros.
[05:15] El RAID 1 entonces uno de los discos es copia del otro. Si yo hago inserciones, hago
actualizaciones, modificaciones a mis datos, lo que yo haga en este disco él lo va a hacer
automáticamente en el otro disco. Va a reproducirse lo mismo.
[05:30] El RAID 5 y el RAID 10 son específicamente análogos a RAID 0 y RAID 1. El RAID 5
divide los datos en más de dos discos y aunque observemos tan sólo un RAID, el sistema
operativo divide el dato en los diversos discos. El RAID 10, los discos duros tienen espejo,
entonces lo que se haga en un disco se reproduce en los demás.
[05:56] Entonces aunque RAID 1 y RAID 10 gastan más espacio físico con redundancia es más
seguro, porque hay una réplica de la información en cada uno de ellos. Entonces hoy en día el
DBA debe estar muy atento de todos estos ajustes o de esta forma de poner al punto su servidor
y desde luego, todo esto viene con la experiencia.
[06:32] Con la experiencia el DBA va a saber cómo ajustar todos estos parámetros. También
hoy en día por lo que se mencionó previamente sobre el DBA, la nube ha puesto a disposición
diversas herramientas y nosotros podemos crear instancias de MySQL en Azure, en Amazon, en
Google.
[06:52] Ellas me permiten que de forma lógica yo pueda tener acceso a la configuración de
recursos de hardware que facilitan trabajar con mi base de datos, o lo más adecuado a mi base de
datos. Yo puedo aumentar más RAM, si yo pago el precio que me exige por minuto de
procesamiento cómo funciona o por minuto de uso de sus recursos, entonces ellos me ponen a
disposición lo que yo necesite de forma lógica, y es la manera como más comúnmente se trabaja
hoy en día.
[07:28] Entonces era básicamente esto lo que les queríamos hablar con respecto al tuning de
hardware. Poner a punto nuestro hardware para trabajar con MySQL. En el próximo video ya
vamos a hablar de mysqld, que ya es específicamente las variables de entorno que podemos
ajustar para que nuestro MySQl tenga un mejor desempeño. Ya nos vemos.
Hola a todos una vez más. Ahora vamos a hablar un poco sobre las variables de ambiente de
MySQL. Se trata de variables que nosotros declaramos afuera del programa para que cuando
inicialicemos, entonces ya queden predefinidos diversos parámetros de funcionamiento o de
operación de nuestro servidor. Entonces hay alrededor de 250 o más de 250 variables de entorno
en MySQL.
[00:29] Por cada nueva versión se sufren diversos cambios de estas variables. Entonces puede
ser que en la versión 8.0 que estamos utilizando actualmente tengamos esta cantidad de
variables de entorno, pero en versiones posteriores vamos a tener más o vamos a tener menos y
debemos por tanto estar muy atentos a la documentación porque puede ser que alguna variable
de entorno ya quede en desuso. No es obligatorio que el administrador conozca todas esas
variables.
[01:03] Lógicamente con la experiencia va a ir aprendiendo cuáles tienen más utilidad, cuáles se
pueden modificar de modo que MySQl tenga un mejor desempeño. Entonces aquí hay un
comando que se llama show status y él nos muestra al ejecutarlo el valor actual de estas
variables de entorno en nuestra instancia y nuestra conexión que estamos trabajando. Si yo leo
ese show status me va a decir cómo están esas variables en ese momento.
[01:37] Existen dos tipos de variables de entorno, que serían globales y de session. Las globales
valen para todo el entorno MySQL, para todas las conexiones mientras el servidor esté activo.
La session solamente para la instancia que se está utilizando en ese momento. También tenemos
el archivo my.ini que también lo podemos encontrar como my.cnf en Linux.
[02:08] Es donde se encuentran nuestras variables de ambiente, para que nosotros podamos
ajustarlas de acuerdo con las necesidades de nuestro servidor o de lo que queramos realizar. Hay
dos directivas que serían mysqld, que tienen que ver con las variables globales y client, que son
con las de sesión. En la documentación que encontramos a través de este link encontramos más
información.
[02:22] Una información mucho más detallada sobre nuestras variables de entorno de MySQL
8.0. Si le damos clic, entonces va a abrir lógicamente aquí nuestra documentación en internet y
vean la cantidad de variables que hay. Tomemos aquí una, por ejemplo de esas que aparecen,
digamos esta de aquí. Generated random password length. Entonces aquí nos muestra el
comando en la versión que fue introducida, cómo se llama la variable, el nombre de la variable,
el alcance de ella.
[03:18] Puede ser global o puede ser session, como les dije. Es dinámica, el tipo de la variable,
el valor por defecto. Quiere decir que si yo no la declaro en ningún momento, siempre va a
aparecer con este valor de 20. El valor mínimo 5, el valor máximo, 155. Entonces aquí me dice
la descripción de esta variable, dice: el número máximo de caracteres permitido en passwords
generados aleatoriamente.
[03:49] Entonces aquí tengo más información. Para más información see random password
generator. Entonces aquí en esta documentación yo puedo informarme mucho mejor sobre cada
una de las variable de ambiente y es importante que trabajemos bastante con la documentación
cuando estamos desempeñándonos como DBA, que conozcamos bien las variables de entorno.
[04:16] Ahora sí vamos aquí a Workbench rápidamente. Entremos a nuestra instancia local,
nuestra conexión y vamos a ejecutar aquí algunos comandos. Pero antes de entrar aquí
propiamente a nuestros comandos, vamos a primero ver nuestro archivo my.ini, donde se
encuentra él. Él se encuentra en una carpeta que está oculta, que estaría en program data mysql.
Ese sería el camino del directorio.
[04:53] Su disco, program data, mysql y mysql8.0, y el archivo es este, my.ini. Si le doy clic
derecho y lo abro, lo abro con el Sublime text. Entonces él ahí me muestra cómo es este archivo,
toda la información que hay en él. Entonces por ejemplo, aquí puedo ver todas mis variables de
ambiente. Las revisamos una a una, podemos ver qué parámetros podemos configurar, cuáles
no.
[05:41] Entonces aquí está este que dice max connections, el número de conexiones máxima,
que pueden haber concurrentes. Entonces dice aquí, la cantidad máxima de sesiones
concurrentes en el servidor MySQl que van a ser permitidas. Entonces van a permitirse 151
conexiones al mismo tiempo.
[06:05] En caso de que haya una necesidad de un administrador, siempre una de ellas va a ser
reservada para que este administrador pueda entrar aun cuando el límite de la conexión se haya
alcanzado. Entonces yo puedo venir a este archivo de inicialización y colocar, cambiar este
número, poner más conexiones.
[06:26] También tengo el tamaño máximo para tablas temporales. Él viene por defecto aquí, de
35 megas. Pero puede ser que 35 megas sea muy poco. ¿Qué sucede con este parámetro de
tablas temporales? Cada vez que yo hago una consulta y por ejemplo empiezo a hacer groupbys,
empiezo a hacer diversas operaciones, joins, unions, con diversas tablas, entonces todas esas
tablas me las coloca en memoria RAM.
[07:00] Claro, porque la memoria RAM va a ser más rápida si activo esas operaciones. Pero si
yo hago muchas consultas y al mismo tiempo si hay varias conexiones haciendo consultas,
entonces van a crear muchas tablas temporales y este número de 35 megas va a ser insuficiente
para cubrir esta demanda de tablas temporales tan alta. Entonces MySQL, él no va a parar de
hacer mis consultas, él simplemente va a empezar a escribir estas consultas ya en el disco.
[07:32] Al escribirlas en disco duro, entonces ya se va a poner más lento porque, cada vez va a
tener que escribir y leer directamente del disco y esto hace que nuestro servidor se ponga lento.
¿Entonces yo qué puedo hacer? Yo puedo alterar este parámetro y aumentarlo para que podamos
tener un mejor desempeño de MySQL. Vamos aquí a Workbench rápidamente.
[08:01] Si yo ejecuto el siguiente comando, lo tengo aquí escrito. Si yo le doy SHOW GLOBAL
STATUS LIKE entonces él ya se llama de la siguiente manera. Se llama
'Created_tmp_disk_tables'. Él me muestra las tablas que están creadas en disco.
[08:41] Él me dice que en este momento hay 0. Eso quiere decir que con ese parámetro de 35
megas que están en mi archivo de my.ini, es suficiente y me permite trabajar tranquilamente con
mi memoria RAM. No la estoy saturando. Y si yo aquí por ejemplo doy SHOW GLOBAL
STATUS LIKE 'Created_tmp_tables”, entonces él me va a mostrar las tablas que ya están
creadas, cuantas tablas están creadas.
[09:24] Entonces en este momento hay 41 tablas creadas. Vamos a ejecutar a los dos al mismo
tiempo. Entonces tengo las tablas temporales creadas en disco, 0 en este momento y las tablas
temporales creadas son 43.
[09:44] Resulta que estas 43 tablas se refieren a consultas previas que yo ya he realizado
utilizando MySQL, utilizando joins, uniones, haciendo diversas operación, groupby ya si
sucesivamente , entonces he creado 43, solo que estas 43 tablas aun están utilizando el espacio
de mi memoria RAM que son aquello 35 megas que están disponibles y es suficiente.
[10:14] Pero puede llegar un momento en el cual, si yo estoy haciendo demasiadas consultas y
mi base de datos es muy grande, que ya va a dejar de crear las tablas temporales aquí y las va a
empezar a grabar en disco. Entonces todo esto va a ralentizar el procesamiento de la información
porque tiene que ir primero escribir en disco y escribir del disco. Entonces esto demora mucho.
[10:38] Entonces para ellos yo puedo de hecho ver el valor de esta variable. Seria SHOW
GLOBAL VARIABLES LIKE. Entonces vamos a ver las variables locales y el nombre de las
variables es 'tmp_table_size', que es la misma variable local que tenemos aquí. Tmp_table_size,
esta es la que queremos.
[11:48] Entonces yo le puedo decir SET GLOBAL 'tmp_table_size' y le doy un valor. Digamos
seria, vamos a colocarle 100 más. entonces sería 136.700.160. Entonces yo ya he aumentado en
aproximadamente 100 megas más el tamaño de memoria disponible para la creación de tablas
temporales.
[12:26] Entonces si yo ejecuto aquí este comando, él ya me dice que sí, que es ese row affected
y se lo vuelvo a mostrar. Entonces ya no es más 36 sino 136. Ya para todas mis conexiones,
mientras el servidor esté activo, entonces este valor de creación de tablas temporales va a
aumentar a 136 o 134 megabytes. ¿Pero qué sucede?
[13:01] Si ya los 35 megas que yo tenía ya estaba escribiendo en disco, automáticamente a partir
del momento que yo hago este ajuste a este parámetro o esta variable de ambiente, ya a partir de
ese momento deja de escribir las tablas temporales en el disco y las comienza a seguir
trabajando directamente en memoria y mis procesos, mis operaciones de groupby, de joins van a
ser más rápido.
[13:29] ¿Pero qué sucede? Todo esto va a funcionar en cuanto el servidor esté activo. Si yo en
algún momento detengo el servidor o reinicializo Windows, entonces nuevamente mis variables
van a inicializarse con este parámetro en 35. ¿Entonces yo qué tengo que hacer? Yo
simplemente vengo aquí, pongo 135 y almacenar. Le doy save.
[13:53] No lo voy a salvar porque para nuestro uso aquí es suficiente con los 35 megas, pero
digamos, yo lo salvo y entonces ya siempre que se reinicialice él va a valer aproximadamente
este valor que yo digité. Y siempre que detengamos y reactivemos el servidor, vamos a poder
trabajar con este valor nuevo que nos permite trabajar con 100 megas adicionales.
[14:25] Este es tan solo un ejemplo de los muchos que podemos tener de la forma como
podemos trabajar con variables de ambiente para mejorar el desempeño de MySQL. Entonces la
idea es que poco a poco vayamos conociendo algunas de estas variables de ambiente y las
ajustemos de acuerdo con los requerimientos de nuestra base de datos. Ya nos vemos en el
próximo video.
Alternativa correta
Alternativa correta
Bien. Vamos a hablar ahora un poco sobre los mecanismos de almacenamiento de MySQL. Un
mecanismo de almacenamiento es simplemente la forma cómo almacenamos los datos en
nuestras tablas. Este es de los recursos más exclusivos de nuestra base de datos. Entonces la
versión de MySQL que estamos utilizando, la 8.0, dispone actualmente de nueve mecanismos
para almacenar los datos en nuestras tablas.
[00:31] Lógicamente al interior de una misma base de datos yo puedo usar diversos mecanismos
dependiendo de la manera como yo voy a estar trabajando con mis tablas. Así va a recibir
muchas transacciones o si no va a tener muchas transacciones, entonces yo puedo alterar los
mecanismos para optimizar el desempeño de mi base de datos.
[00:54] Entonces, si ustedes recordarán cuando en los entrenamientos anteriores que estábamos
creando nuestras tablas, había un parámetro que decía engine y nosotros dijimos: "más adelante
vamos a hablar de ese parámetro engine, por ahora no nos vamos a preocupar por él". Este
parámetro lo que hace es indicar el mecanismo de almacenamiento que utilizaremos con esa
tabla.
[01:20] Entonces esos nueve mecanismos, que serían nueve engines, que nosotros tenemos
actualmente en MySQL 8. Los tres principales son MyISAM, InnoDB y MEMORY. Por
defecto, MySQL 8.0 trabaja con InnoDB pero también está MyISAM y está MEMORY.
[02:07] Él únicamente permite que yo realice el bloqueo a nivel tabla. Tengo que bloquear toda
la tabla para poder trabajar sobre ella, y esto me genera que sea una lectura más rápida, de hecho
esto es de lo más adecuado cuando estamos trabajando con Data Warehouses.
[02:27] También pues se recomienda con las tablas que no están continuamente cambiando, sino
más bien con tablas que tienen información, contenido fijo, registros fijos o que no sufren
muchas alteraciones. La clave externa no soporta el tipo de full text, el tipo de datos full text.
Almacena datos de forma más compacta.
[03:24] Él determina el tamaño de esta memoria cache para que estos índices sean mucho más
rápidos. Varían de 8 megas a 4 gigas de acuerdo con el sistema operativo. Si es de 32 bits o 64
bits. Concurrent_insert es una variable que nos dice el comportamiento de las inserciones
concurrentes dentro de la tabla MyISAM. ¿Qué quiere decir? La cantidad de inserciones que se
pueden estar realizando en ese momento.
[03:56] Entonces si yo tengo ese parámetro en 0, dice que no puede hacer inserciones
simultáneas, está desactivada. Si lo tengo en 1, me permite inserciones simultáneas sin tener un
intervalo entre estas inserciones, que son al mismo tiempo y como no es transaccional podemos
tener problemas.
[04:19] Y con 2, inserciones simultáneas con intervalo de datos, me deja un intervalo aunque sea
pequeño, de segundos o milisegundos, para hacer las inserciones de diversos datos. También
tengo delay_key_write, que ella genera como un atraso o un delay, como se diría en inglés, entre
la actualización de índices y el momento que se crea la tabla.
[04:48] No son creados al mismo tiempo los índices con sus respectivos registros, sino que
espera que todos los registros sean ingresados para posteriormente actualizar los índices. ¿Qué
sucede? Es un proceso más lento pero garantiza la integridad de mis datos. Entonces hay más
consistencia a cambio de menos rapidez.
[05:10] También tengo max_write_lock_count, que es una variable de ambiente que determina
el número de grabaciones en las tablas que tendrán precedencia a las diversas lecturas que se
realices, entonces prioriza una cierta cantidad de grabaciones que se van a realizar antes de las
diversas lectura en las diferentes conexiones. Para eso sirve max_write_lock_count.
[05:38] Preload_buffer_size, el tamaño de buffer que utilizaremos antes de cargar los índices de
cache de las claves de las tablas, que por defecto viene de 32 KB. El uso de estas variables de
ambiente, se llevará en la medida que el DBA conozca su entorno y entienda mejor los
mecanismos de MyISAM, o sea que el DBA sepa si verdaderamente su tabla con la que está
trabajando, funciona mejor con mecanismo MyISAM, considerando las características que
nombramos previamente.
[06:21] Entonces si no tiene muchas transacciones, si es una tabla que no sufre muchas
modificaciones, que es más bien una tabla más fija, si es únicamente para lectura, entonces el
DBA dice: "podemos trabajar con MyISAM". Es recomendable trabajar sin embargo con la
configuración por defecto al usar el mecanismo MyISAM.
[06:43] Mantenerlo por defecto. No comenzar a modificar mucho estas variables porque todo
esto también viene con la experiencia y con el conocimiento del entorno.
[06:58] Entonces es importante considerar esto con respecto a MyISAM: También MyISAM
cuenta con las diferentes aplicaciones que estaremos mencionando a continuación: myisamchk,
que analiza, optimiza y repara las tablas MyISAM. Si alguna viene o se corrompe en algún
momento, entonces myisamchk reconstruye la tabla.
[07:25] También tengo myisampack, que crea tablas MyISAM más compactas y serán utilizadas
sólo para lectura. No podremos hacer inserciones a la tabla. Lógicamente su desempeño para
leerlas va a ser mucho mejor, va a ser de más rápida lectura, sobre todo cuando se realizan
muchas consultas a estas tablas, va a ser mucho más rápida.
[07:47] También contamos con myisam_ftdump, que exhibe la información más completa
cuando estamos hablando de campos de tipo texto. Entonces de modo general, esto es lo que
queríamos compartir con ustedes con respecto a mecanismos de almacenamiento y en primer
lugar, MyISAM.
[08:10] En el próximo video estaremos hablando de InnoDB y también de MEMORY que son
otros mecanismo comúnmente utilizados en MySQL. Ya nos vemos
En la tabla.
¡Alternativa correcta! El mecanismo de almacenamiento es una propiedad de la tabla.
Alternativa correta
En el registro.
¡Alternativa incorrecta! El mecanismo de almacenamiento no está asociado al registro.
Alternativa correta
En la base de datos.
¡Alternativa incorrecta! El mecanismo de almacenamiento no está asociado a la base de datos.
Hola alumnos y alumnas. Ahora vamos a hablar un poco sobre otro mecanismo de
almacenamiento que sería InnoDB. Es el mecanismo de almacenamiento por defecto que se
trabaja en MySQL actualmente. Es transaccional, o sea, él sí está diseñado para que diversos
usuarios estén realizando operaciones en las tablas simultáneamente.
[00:22] Él tiene soporte transaccional completo. Tiene soporte a claves externas o claves
foráneas. El cache de buffer es configurado de forma separada, tanto para la base de datos como
para el índice. Entonces esto es muy importante. El bloqueo de tabla se realiza a nivel de línea,
no como en el caso de MyISAM que tengo que bloquear toda la tabla para poder realizar
cualquier alteración en ella.
[00:51]Aquí, el bloque de tabla únicamente bloquea la línea o el registro en el cual se tiene que
trabajar. Tiene indexación BTREE, estaremos hablando más adelante sobre ello. El backup de la
base de datos puede ser realizado online, o sea con el servidor activo. No hay necesidad de parar
el servidor para poder hacer un backup. Eso es una gran ventaja.
[01:17] Tenemos también las siguientes variables de ambiente propias de InnoDB. En cuanto a
las tablas tenemos una que se llama innodb_data_file_path, que determina el camino y el tamaño
máximo del archivo dentro del sistema donde estaremos almacenando la información.
[03:27] No quiere decir que para todos los archivos de log in va a ser 5 MG sino que va a
creando de 5 en 5 MG cada archivo de lógica-in. Finalmente tenemos MEMORY. MEMORY es
un mecanismo de almacenamiento que crea tablas en la memoria RAM, no quedan en disco.
Entonces eso quiere decir que siempre que se reinicialice, se va a borrar.
[03:53]Entonces si nosotros queremos trabajar con MEMORY debemos reinicializar las tablas
cada vez que estemos trabajando con estos datos. No soporta clave externa. No podemos
trabajar con clave externa. En cambio nos da acceso muy rápido a la información. Claro, porque
los datos están ahí disponibles en RAM, entonces es muy rápido acceder a esta información.
[04:19] Ellos como les mencione, necesitan ser reinicializados juntos con el servidor toda la
información se pierde cada vez que se para el servidor, entonces ya se sale toda la información
de la memoria RAM. Tiene bloqueo únicamente a nivel de tabla, al igual que MyISAM, la única
que tiene bloque a nivel de línea es InnoDB, que es el mecanismo de almacenamiento por
defecto de MySQL 8.0.
[04:49] Utiliza índices HASH por defecto y BTREE. El formato de línea es de longitud física.
Claro, como estamos trabajando con memoria RAM, no podemos permitir que trabaje con BIG
LONG, BLOB o con TEXT. Porque pueden ser muchísimos datos. Entonces lógicamente no
trabajaría con este tipo de dato. Ni BLOB ni TEXT.
Suponiendo que las estructuras que serán comparadas sean idénticas, ¿Cuál de los siguientes
mecanismos de almacenamiento es el más rápido para acceder a los dados?
Alternativa correta
InnoDB
Alternativa correta
MEMORY
¡Alternativa correcta! El mecanismo de almacenamiento en memoria es el de más rápido acceso.
Alternativa correta
MyISAM
Llegó la hora de que sigas todos los pasos realizados por mí durante esta clase. Si ya lo has
hecho ¡Excelente! Si todavía no lo has hecho, es importante que ejecutes lo que fue visto en los
vídeos para que puedas continuar con la próxima aula.
1) Las variables que están declaradas en el directorio C:\ProgramData\MySQL\MySQL
Server 8.0\my.ini Serán inicializadas con los valores declarados en el archivo siempre que el
servicio MySQL sea ejecutado.
2) En el siguiente link, podrás ver la documentación de numerosas variables de
ambiente: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
3) El valor de las variables durante la sesión puede ser visualizado en Workbench. Acceda a
Workbench y, en la base de datos sakila, digita en un script de SQL:
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';COPIA EL CÓDIGO
4) Inclusive, en la base de datos sakila, otra variable puede ser observada:
SHOW GLOBAL STATUS LIKE 'Created_tmp_tables';COPIA EL CÓDIGO
Estas dos variables están relacionadas con el número de tablas temporales que pueden ser
abiertas durante una sesión en memoria y en disco. Claro que esto influye en el desempeño de la
base, en caso que se necesite usar el HD para almacenar tablas temporales creadas por MySQL
durante los comandos SQL.
5) La variable tmp_table_size, que fue inicializada por el archivo my.ini, tiene el valor de 35 y
puede ser visto a través del siguiente comando de WorkBench:
SHOW GLOBAL VARIABLES LIKE 'tmp_table_size';COPIA EL CÓDIGO
[00:29] Vamos a colocar dos campos. No voy a parar mucho a explicar cada uno de estos
parámetros porque ya lo vimos en el curso de introducción, en el curso de consultas avanzadas,
en el curso de manipulación de datos, de cómo es que se crean las tablas. Entonces simplemente
aquí, para hacer el ejercicio, aquí vamos a crear una tabla cualquiera y vamos a especificar estos
parámetros.
[00:53] Entonces este es el comando para crear una tabla, lo seleccionamos, CREATE TABLE
df_table con dos campos, ID que va a ser de tipo entero y nombre, que va a ser de tipo varchar
con 100.
[01:04] Presionamos el rayo y si venimos aquí, al área de esquemas, clic derecho, le damos
refresh all y va a aparecer nuestra df_table. Aquí nótese lo siguiente, tiene una i, que es de
información y por defecto, ella me muestra que esta tabla la crea InnoDB con el mecanismo de
almacenamiento InnoDB.
[02:02] Pero yo puedo también crear mi tabla y digamos, yo no quiero que ella sea InnoDB, sino
que yo quiero que ella sea de otro tipo. Entonces yo puedo utilizar el comando ALTER TABLE
y el nombre de la tabla, que sería df_table y le voy a decir que quiero cambiar el tipo de
mecanismo de almacenamiento, que es el ENGINE. Voy a decir que ahora va a ser MyISAM,
ENGINE = MyISAM;
[02:38] Seleccionamos y ejecutamos el comando y nos dice perfecto. Venimos acá y vemos la
información en la i. Y ya no es más una tabla de tipo InnoDB, con el mecanismo de
almacenamiento InnoDB, sino que es una tabla con el mecanismo MyISAM.
[02:57] Ahora sí yo puedo por ejemplo crear otra tabla y especificar inclusive el mecanismo de
almacenamiento que quiero en ella. Digamos, ésta va a ser df_table1 y le voy a escribir aquí
ENGINE y quiero que sea ENGINE una tabla de tipo MEMORY. Entonces si yo ejecuto este
comando, cree otra tabla, le doy aquí refresh all y aquí esta mi tabla y si veo la información, en
el área navigator, aquí en el botoncito de la i.
[03:29] Entonces me va a decir que el ENGINE es MEMORY respectivamente. Lógicamente,
les mencioné que existen nueve mecanismos de almacenamiento actualmente en MySQL 8.0. Si
yo vengo aquí, a donde dice tables, en el área navigator, en la base de datos, aquí doy clic
derecho y le digo, CREATE TABLE, me aparece el asistente.
[03:53] Y aquí, en el área donde dice ENGINE, en este campo, si yo reviso, vean ustedes, tengo
MyISAM. Entonces trabajamos con InnoDB, MyISAM y con MEMORY pero también tengo
NDBcluster, Federated, ARCHIVE, CSV, BLACKHOLE y MRG_MyISAM. Entonces son
nueve. Yo también puedo crear tablas a través del asistente como lo vimos previamente.
[04:16] Existe una vasta documentación en internet de MySQL, en la página que nosotros
estuvimos viendo, inclusive yo puedo aquí ejecutar un comando que se diría SHOW ENGINES.
Él me muestra toda la información referente al ENGINE. Por ejemplo MEMORY tiene soporte,
tiene comentario ahí, hash based, stored in memory, useful for temporary tables.
[04:53] Entonces ahí ya me dice, es útil para tablas temporales, sin embargo no acepta
transacciones, no tiene punto para guardar. La que tiene más completa es InnoDB, que viene por
defecto. Soporta transacciones, tiene bloqueo a nivel de línea o de fila y acepta claves foráneas.
[05:40] Entonces, era esto lo que les queríamos mostrar de la forma de utilizar mecanismos de
almacenamiento. Nos vemos en el próximo video.
InnoDB
¡Alternativa correcta! Así es, este es el mecanismo de almacenamiento por defecto.
Alternativa correta
MyISAM
¡Alternativa incorrecta! Este no es el mecanismo de almacenamiento por defecto de MySQL 8.0.
Alternativa correta
MEMORY
¡Alternativa incorrecta! Este no es el mecanismo de almacenamiento por defecto de MySQL 8.0.
Y bueno, alumnos y alumnas, vamos a seguir trabajando aquí, en Workbench. Ahora vamos a
aprender a crear una base de datos o a ver de nuevo, cómo creamos la base de datos.
Recordemos que ya sabemos crearlas. Vamos a generar aquí un nuevo script y la forma de
crearla es simplemente con el siguiente comando: CREATE DATABASE y el nombre de la
base de datos.
[00:25] Vamos a darle un nombre que sea base, y listo. Si yo ejecuto este comando he creado
una base de datos y si vengo al área navigator, le doy refresh all, me aparece base. Aquí al
interior, él me muestra las diversas entidades que tiene una base de datos. O sea sus tablas, sus
views, stored procedures, functions.
[00:55] Entonces en este momento no hay tablas ni views ni stored procedures y funciones, pero
eventualmente yo a partir de aquí, en mi base de datos puedo comenzar a crear todas estas
diversas entidades para trabajar en ellas.
[01:08] Entonces, al crear yo mi base de datos o esquema, yo puedo comenzar a generar todas
estas entidades como lo mencioné. Si yo le doy refresh all aquí en esta área, lógicamente no me
va a aparecer nada porque no tengo ninguna tabla creada. Ahora bien, yo puedo por ejemplo
crear la base de datos así o dar clic derecho aquí en un espacio vacío y usar, a ver.
[01:47] Un espacio vacío aquí, vamos a minimizar todo esto. Con el botón derecho del mouse y
le doy aquí a la opción que dice create schema. Me aparece el asistente. Aquí en mi asistente, yo
puedo decir otro nombre, base2. Le doy un nombre y él me muestra dos parámetros importantes
que yo puedo configurar al momento de crear mi base de datos, que serían el charset of character
set y el collation.
[02:18] El character set es la tabla ASCII con los caracteres que voy a estar utilizando. Cuando
inicio la computación, esta tabla ASCII representaba las letras con un número.
[02:32] Entonces por ejemplo la a minúscula tenía un número, la A mayúscula otro número, la b
minúscula un número y así sucesivamente. Pero resulta que esta tabla ASCII original estaba
únicamente para el idioma inglés. Sin embargo, con los años, esta tabla ASCII fue aumentando,
fueron creándose diversas tablas ASCII para los diversos idiomas.
[02:57] Entonces noten ustedes, aquí ya tengo tabla ASCII para griego, hebreo, latín, que son
nuestros caracteres que utilizamos. Toda esta cantidad, puedo tener ideogramas japoneses,
caracteres árabes y así sucesivamente. Y collation es una serie de reglas que me permiten
comparar y organizar mis datos en MySQL.
[03:27] Se muestra por defecto como sería. Me muestra el character set que yo puedo especificar
y por defecto va a utilizar el del sistema operativo instalado. En este momento mi sistema
operativo está en portugués, entonces lógicamente va a trabajar con ese character set y el
collation adecuado a él.
[03:50] Simplemente le doy a apply y me aparece un asistente que me muestra los comandos
para la creación de base de datos. En MySQL, database y schema es exactamente lo mismo. Yo
podría en vez que diga schema, podría decir create database, como lo vimos anteriormente.
[04:11] Le damos clic en apply y le doy finish. Si volvemos a nuestra área de esquemas, ustedes
van a ver la base2 también completamente vacía con todas las entidades que podemos comenzar
a crear en ella.
[04:29] Entonces, recapitulando un poco, yo puedo crear la base de datos con este comando o
con el comando aquí, y en vez de poner database, colocar schema. Esta es la forma de crear
nuestra base de datos y especificar el character set y collation.
CREATE
¡Alternativa correcta! Este es el principal comando para la creación de la base de datos.
Alternativa correta
NEW
Alternativa correta
INSERT
Hola, alumnos y alumnas. Ya trabajamos entonces creando nuestra base de datos, especificando
el mecanismo de almacenamiento, y ahora, lo que queremos saber es dónde se encuentra
almacenada nuestra base de datos. Entonces para ello vamos a crear un nuevo script y aquí le
vamos a dar el siguiente comando: SHOW VARIABLES WHERE Variable_Name LIKE.
[00:34] Entonces especificamos aquí porcentaje y que acabe en dir. Ejecutamos este comando y
nos muestra las siguientes variables que terminan con dir. La que nos interesa es la que dice
datadir, porque en datadir están almacenadas nuestras bases de datos. Vean ustedes, aquí yo
tengo base, base2, empresa, jugos_ventas.
[01:21] Entonces, ¿qué sucede? En algún momento como decía, de repente el espacio en el disco
donde fue instalado Workbench o MySQL ya no tengo más espacio y necesito cambiar de disco.
¿Cómo puedo cambiar este directorio donde mis bases de datos serán almacenadas? Entonces
para ello, yo puedo crear un directorio en otro lugar.
[01:46] Digamos en mi caso, como mi único disco duro es este SSD, entonces voy a crear una
nueva carpeta en C o un nuevo directorio. Entonces voy a crearlo y voy a decir que este
directorio se llama sql_dba. Si le doy doble clic, aquí también voy a crear otro directorio
llamado data, igual a aquel otro. Entonces sql_dba, Data.
[02:22] Bien. Ahora en este directorio donde yo quiero almacenar mi datadir. ¿Cómo lo puedo
hacer? Recordemos que yo tengo un archivo que se llama my.ini, que se encuentra en MySQL,
MySQL Server, el mismo camino, este de aquí. Clic derecho y lo abrimos con nuestro editor de
texto.
[02:47] Y aquí buscamos el directorio, precisamente ya lo tenemos aquí, se llama datadir, que es
ProgramData/MySQL/MySQL Server 8.0\Data. Entonces yo quiero cambiar este path. Entonces
lo vamos a dejar comentado y vamos aquí abajo a escribirlo: datadir=C:/sql_dba\Data. Ese va a
ser el nuevo path.
[03:27] Ahora yo debo salvarlo. Le doy save. Después de guardarlo, yo ya voy a aquí a servicios
de Windows y voy a detener mi servidor. Buscamos donde está MySQL 80. Pero como
Workbench está abierto, voy a cerrarlo y le doy stop. Al pararlo, entonces yo ya puedo
reinicializarlo y él ya va a leer este nuevo archivo my.ini.
[04:39] Vuelvo a ProgramData, MySQL, MySQL 8.0 y esa carpeta data, todo el directorio lo
voy a copiar tal cual, completo, y lo voy a transportar a mi directorio sql_dba y lo voy a
substituir. Le doy pegar y después de hacerlo entonces yo le digo que sí, sustituir todo. Ya al
sustituirlo, entonces yo puedo venir a mi servicio de red y tratar de reinicializarlo y se ejecutó.
Está todo en orden.
[06:11] Listo, creamos esta base de datos, por ejemplo. Y si le doy aquí un refresh a todos, ya
tengo base, base2, base3, y esta base va a ser creada en mi nuevo directorio sql_dba\Data. Si yo
le doy doble clic, aquí está la base3. Pero lógicamente, como todos nuestros ejercicios los vamos
a hacer aquí en nuestros directorios por defecto que trae MySQL, entonces no vamos a seguir
trabajando en aquel path.
[06:45] Entonces voy a volver todo a lo normal, digamos aquí en esta base3, porque está
únicamente en el nuevo datadir. Entonces volvemos a nuestro archivo, yo voy a dejar este
comentado aquí y vamos a especificarle de nuevo que el path es ProgramData/MySQL y todo
eso.
[07:07] Vamos a darle aquí salvar o grabar y venimos a servicios de Windows, le damos
detener, se detiene y volvemos y lo reinicializamos. Ya él se ejecutó de nuevo. Si yo le doy aquí
un SHOW VARIABLES WHERE Variable_Name LIKE '%dir'; le damos al rayo, entonces
nuevamente mi datadir vuelve a ser ProgramData\MySQL\MySQL Server 8.0\Data.
[07:49] Y si le doy refresh, entonces ustedes van a ver que ya base3 no va a aparecer. Vean,
base, base 2. Porque ya no existe en este directorio, entonces básicamente esto es lo que le
queríamos mostrar, de la forma como podemos trabajar, cambiando el directorio donde se van a
almacenar nuestras bases de datos.
[08:15] Tengan en cuenta que siempre hay que copiar toda la carpeta data en su totalidad, no
solamente la base de datos, porque hay unas tablas de control internas que se necesitan para que
pueda funcionar el servicio correctamente y por eso es necesario copiar toda la carpeta data.
Vamos a borrar también bases de datos, vamos a aprovechar aquí y vamos a decirle. Hay dos
formas de hacerlo.
[08:42] Por ejemplo clic derecho, le damos drop schema, le decimos drop now, eliminamos. O
también puede ser aquí, a través de este comando DROP DATABASE base; y si lo ejecutamos
ya se elimina. Si venimos a nuestro directorio data, ya no aparece.
[09:08] Básicamente esto es lo que les queremos mostrar. Ahora bien, hay un detalle que no
podemos olvidar, este archivo my.ini como es un archivo oculto, de repente puede ser que no les
permita almacenarlo. entonces ustedes vienen a propiedades, clic derecho, propiedades y
segurança o seguridad y le dan permiso a todos.
[09:27] Yo a todos mis usuarios les di permitir. Por ejemplo, mi usuario no tenía permiso, yo le
activé los permisos para poderlo almacenar. Entonces básicamente es esto lo que les queríamos
mostrar a través de este video. Ya nos vemos en nuestra próxima aula.
innodb_data_home_dir
Alternativa correta
datadir
¡Alternativa correcta! Esta es la variable que determina la localización de la base de datos.
Alternativa correta
basedir
¡Alternativa incorrecta! Esta variable indica el directorio base de MySQL.
Llegó la hora de que sigas todos los pasos realizados por mí durante esta clase. Si ya lo has
hecho ¡Excelente! Si todavía no lo has hecho, es importante que ejecutes lo que fue visto en los
vídeos para que puedas continuar con la próxima aula.
1) Ahora bien, sobre mecanismos de almacenamiento, durante la creación de la tabla, es posible
determinar cuál mecanismo la misma estará utilizando. Crea una tabla, en la base de
datos sakila, conforme al siguiente comando:
CREATE TABLE df_table (ID INT, NOMBRE VARCHAR(100));COPIA EL CÓDIGO
2) Si te diriges hacia Tables, en el árbol de objetos de Workbench y haz clic sobre el ícono de
información, verás las características de almacenamiento de la tabla que fue creada:
3) Ahora, puedes observar que, por defecto, las tablas son creadas con el mecanismo de
almacenamiento InnoDB:
10) Cuando fueron creadas estas bases, MySQL escribió en el disco duro los archivos físicos
que las representan. Para saber en qué directorio estos archivos fueron creados, puedes consultar
el valor de la variable de entorno con Variable_Name:
SHOW VARIABLES WHERE Variable_Name LIKE '%dir';COPIA EL CÓDIGO
Este comando mostrará todas las variables de entorno que acaban con dir. La variable que
indica el camino hacia el directorio donde están almacenadas las bases de datos es datadir.
[00:27] Entonces para ello es importante tener un back-up. Queremos poder recuperar la
información. De hecho, en el video anterior cuando le dimos drop database, olvidé mencionarles
que hacer un drop database es un procedimiento radical y que debemos de ser muy cuidadosos,
porque al momento de hacer este drop, si no hemos hecho un back-up, entonces podemos perder
toda la información.
[00:52] Entonces es algo muy importante que nosotros tengamos en cuenta, de que el DBA debe
estar atento de que drop database es un procedimiento muy peligroso y de mucho cuidado.
Entonces vamos a hablar específicamente de back-up. Existen dos tipos de back-up. El primero
de ellos es el back-up lógico.
[01:13] Él se encarga de exportar todas las estructuras, todas las tablas, todas las rutinas, los
comandos empleados a un script sql que después será ejecutado y este permitirá que podemos
recrear nuestra base de datos con todas sus entidades. Él tiene la ventaja de que podemos
manipularlo de forma externa antes de recuperar la información.
[01:38] Entonces podemos abrirlo, abrir el script y hacer los ajustes que necesitemos y esto
facilita muchísimo, visualizar los datos antes de poderlos recuperar y nos permite hacer una
edición en caso de que sea necesario, pero la desventaja es que por ser digamos una ejecución
comando a comando, entonces es más lento.
[02:04] Es muy demorado, sobre todo cuando estamos hablando de centena de miles o de
millones de registros. Entonces ese es el back-up lógico. Ahora, si hablamos del back-up físico,
entonces él contiene todos los archivos binarios del sistema donde se encuentra la información
almacenada pero ya sin los comandos respectivos para su creación.
[02:27] Entonces es un archivo un poco más compacto, pero a pesar de ser una copia
importante, porque tenemos también el archivo como tal, con todos sus datos, puede ser que en
algún momento se corrompa este archivo. Y como tenemos los comandos para su creación, se
puede presentar el problema al momento de recrear la base de datos.
[02:50] Entonces es más rápido que el back-up lógico, sí, pero es menos flexible, entonces no
nos permite editar tablas y los datos antes de restaurarlos. Vamos a hablar un poco también de
mysqldump. Es una aplicación que nos permite crear back-ups lógicos. la sintaxis es mysqldump
y una serie de opciones.
[03:40] Después utilizo el símbolo de mayor que y el nombre del archivo en el cual va a ser
almacenado este archivo mysqldump que va a ser un script de SQL. Y si ustedes desean incluir
stored procedures y eventos, pueden usar --routines y --events respectivamente.
[03:58] Hay una documentación vasta en internet, en este link que les estoy mostrando, que
muestra todas las opciones de mysqldump. Eventualmente el DBA tendrá que consultar toda
esta documentación. Es importante, por ejemplo, el que acabamos de hablar dice --all-databases
dump all tables in all databases, entonces hace un dump de todas las tablas de todas las bases de
datos.
[04:29] Por ejemplo aquí los comentarios, entonces coloca comentarios a nuestro dumpfile.
¿Qué más? --databases entonces, interpret all name arguments as database names. Entonces
interpreta el nombre de la base de datos a la cual queremos hacerle el back-up, y así
sucesivamente. Hay muchas opciones, muchos parámetros que podemos indicar para poder crear
nuestros archivos dump.
[05:29] Entonces vamos a Workbench y aquí en Workbench vamos a hacer un back-up de esta
base de datos jugos_ventas. Le voy a dar doble clic, ya tiene las siguientes tablas: facturas,
items_facturas, tabla_de_clientes, tabla_de_productos, tabla_de_vendedores.
[05:46] Fue la base de datos que recuperamos al inicio de nuestro entrenamiento, entonces
vamos a digitar aquí cmd. Vamos a entrar al command prompt, voy a darle aquí un zoom y en
nuestro command prompt entonces vamos a insertar los siguientes comandos. Vamos a entrar a
program files, vamos a entrar a MySQL, vamos a entrar a MySQL 8.0, MySQL Server 8.0.
[06:30] Y en MySQL Server 8.0 vamos a entrar a bin. Aquí en bin, es donde vamos a usar
mysqldump. Si yo le doy clic, él me va a mostrar una serie de opciones. Lógicamente yo no lo
voy a usar únicamente así, como mysqldump, sino que yo tengo que indicar los parámetros.
[06:56] Entonces, inicialmente vamos a crear un back-up del database que les acabo de
mencionar, de jugos_ventas. Entonces el comando es el siguiente: mysqldump -user, el usuario
es root, - p de password. Aquí tendrá que digitar el password pero como no lo quiero mostrar,
dejo así, -password. Después viene --databases.
[07:27] Entonces coloco la base de datos sería jugos_ventas > y ahí indico el directorio. Mi
directorio va a ser C:. ¿Recuerdan el directorio en el que nosotros almacenamos nuestro archivo
data, en uno de los videos anteriores? sql_dba. Entonces sql_dba y el nombre del archivo. El
nombre del archivo es, vamos a ponerle jugos_ventas_full.sql.
[08:16] Como él es un script podría dejarlo sin ponerle la extensión, pero como quiero
posteriormente ejecutarlo como un script de sql, le pongo la extensión .sql. Le doy enter, me va
a pedir la contraseña. Digitamos nuestra contraseña y él va a crear mi dump de toda mi base de
datos de jugos_ventas. Listo.
[09:43] Digamos, este archivo aquí, por ser de repente un poco más pequeño, no tiene tantos
comandos así, pero hay casos en los cuales el archivo puede ser una cosa gigantesca, que ni
siquiera podemos llegar a abrir con el editor de texto.
[09:59] Pero la idea es que ustedes sepan que así podemos crear un back-up de toda nuestra base
de datos. Entonces podemos también crear otro back-up. Si yo quiero hacer un back-up de la
base de datos excepto una tabla, entonces yo le puedo decir aquí mysqldump, nuevamente
usuario, que sería -root, -password y le pongo lo siguiente: --ignore. Le doy aquí -table.
[10:37] Y aquí cuando voy a crear una base de datos ignorando una tabla tengo que especificar
la base de datos.el nombre de la tabla. Entonces sería jugos_ventas.facturas. Entonces va a crear
toda la base de datos exceptuando la tabla facturas. De hecho, está aquí, esta tabla de aquí
facturas.
[11:05] Y el archivo de salida, que va a ser c:\sql_dba y el nombre va a ser
\jugos_ventas_sin_facturas.sql. Entonces ejecutamos, y como yo ya le había introducido el
password previamente, ya no lo necesito introducir de nuevo. Venimos acá, abrimos con nuestro
editor de texto, con Sublime Text. Aquí nos faltó algo, incluir algo.
[12:40] Entonces yo me puedo quedar aquí, ejecutando diversos comandos para explicarles
cómo crear archivos dump con diferentes opciones. Pero como les mostré, podemos consultar la
documentación, y allí en nuestra documentación vamos a encontrar todas las opciones que
podemos utilizar a la hora crear nuestro dump. Entonces era esto lo que les queríamos mostrar
de mysqldump. Nos vemos en el próximo video.
Queremos ejecutar un backup tan solo de las tablas TABLA1 y TABLA2. ¿Cuál sería el
comando para ello?
Alternativa correta
Alternativa correta
Les saludo una vez más a todos y a todas. Ahora vamos a crear nuestro backup utilizando
Workbench. Ya lo hicimos a través de líneas de comando con MySQL dump pero también lo
podemos hacer por medio de Workbench. La ventaja de hacerlo con Workbench es que es un
poco más sencillo, pero la desventaja es que tenemos que hacerlo de forma manual.
[00:24] No podemos programarlo para que se ejecute de forma autónoma como en el caso de
MySQL dump, que podemos crear un archivo .batch, un archivo que se pueda programar para
que se ejecute él solo periódicamente, tal vez todos los días pueda hacer nuestro backup.
¿Entonces cómo lo hacemos?
[00:50] Vamos a crear un nuevo script y el comando es el siguiente. Primero tenemos que parar
la base de datos, o sea, esta conexión la detenemos. Entonces LOCK instance for backup. Al yo
hacer esto, nadie más puede hacer nada en la base de datos. Ya no se puede hacer inserciones,
nada.
[02:06] Al darle en la opción data export, entonces nos muestra los siguientes esquemas, que son
las bases de datos que ya tenemos y la que queremos hacer es a jugos_ventas la seleccionamos y
exportamos a un self contained file. Aquí ustedes minimizan el área de output para que puedan
ver el botón start export.
[03:12] Le damos, aquí tiene dos opciones: Create dump in a single transaction or include create
schema. Vamos a dejarlas estas por defecto, así, sin seleccionarlas, y le damos start export y él
va a ejecutar aquí nuestra exportación. Estamos creando el back-up y fue completado. Venimos
a nuestra carpeta y aquí está: jugos_ventas_full_workbench, le damos clic derecho.
[03:42] Los abrimos con nuestro wordpad o con el que queramos utilizar, con nuestro editor de
texto, el que deseemos. Y ustedes notan que es un archivo muy parecido con el archivo que fue
creado cuando utilizamos el dump, cuando utilizamos mysqldump, es bien parecido. Ahora bien,
yo puedo también hacer esta exportación.
[04:16] Podemos cerrar aquí esta pestaña. Le doy UNLOCK INSTANCE; y aquí en el output
nuevamente aparece que fue desbloqueada y hemos creado nuestro back-up. Ya lo tenemos en
un archivo. Pero nuevamente lo ejecutamos, volvemos y bloqueamos la instancia y le damos
otra vez a administration data export y yo lo puedo exportar también a una carpeta.
[04:45] Entonces, volvemos y minimizamos aquí para poder ver el botón start export. La carpeta
que queremos usar es sql_dba, le vamos a dar backup_jugos_ventas. Ese va a ser el nombre del
folder. Le damos start export y él me va a crear un archivo para cada tabla.
[05:51] Pero vuelvo y les menciono, esto tenemos que hacerlo cada vez de forma manual. Si lo
queremos implementar periódicamente con mysqldump, como les dije, podemos crear un
archivo batch que se ejecute todos los días en la madrugada y creamos este backup.
Hola. Ya vimos dos formas de hacer el back-up lógico. Una, a través de las líneas de comando,
en el command prompt y otra, a través de Workbench. Pero ahora veremos la forma de hacer un
back-up físico de la información. En muchos casos, hacer este back-up físico es la forma más
eficaz de hacer nuestra copia de seguridad más rápido también.
[00:29] Pero debemos de cerciorarnos que al hacer este back-up físico nosotros traigamos todos
los archivos de datos referente a nuestras bases de datos, unas tablas temporales de las tablas de
InnoDB, que también son importantes, y nuestro archivo de inicialización del servidor. Para
ello, como estamos haciendo un back-up completo, es necesario que nuestra instancia esté
bloqueada.
[00:56] Cuando usamos MySQL dump, no es necesario bloquear la instancia. Como ustedes
vieron, simplemente fue ejecutarlo y no se presenta ningún problema, pero al hacer esta copia
física sí es necesario hacerle un lock a toda la instancia. Entonces vamos a hacerlo. Le damos
LOCK instance for backup, el mismo comando, y venimos a nuestra carpeta donde están
nuestros datos.
[01:24] Recordemos en ProgramData, en MySQL, MySQL server 8.0 y es esta carpeta data.
Entonces estas son las tablas InnoDB, que es importante que esté esta información, también
nuestra base de datos y todos estos archivos, estos archivos que tienen diversas extensiones, toda
esta carpeta completa.
[01:54] Le damos clic derecho, copiar y venimos a nuestra carpeta sql_dba, que es donde
estamos almacenando todos nuestros archivos de back-up, clic derecho, creamos una nueva
carpeta aquí, le vamos a dar un back-up físico. La podemos llamar back-up_físico y en esta
carpeta back-up_físico pegamos la carpeta de datos completa.
[02:56] Ya tenemos una copia física de nuestra base de datos. Ahora, ¿qué sucede? De repente el
desempeño va a ser muy bueno a la hora de restaurar mi base de datos, porque va a ser más
rápido, ya que no tengo que ejecutar todos los comandos del script cuando hago con
MySQLDump, que es todo el script completo.
[03:45] Entonces se me presenta esta situación y puedo perder información importante de mis
tablas. Digamos aquí nos encontramos delante de la inquietud, cuál es el mejor back-up, ¿lógico
o físico? ¿Álvaro, qué hago? Entonces aquí, la recomendación sería: hagan los dos.
[04:06] ¿Por qué? Porque al hacer los dos estás de cierta forma ya preparándote para que, si falla
el físico, pues ya está el lógico y se puede recrear alguna de las tablas y obtener los datos.
Luego de ejecutar estos pasos, fueron realizados cambios en la base, creadas nuevas bases,
eliminadas otras, y, cuando recuperamos el backup para deshacer toda la modificación, el
procedimiento no fue exitoso.
¿Dónde está el error?
Alternativa correta
Bien. Ya hicimos nuestras copias de seguridad y ahora queremos recuperar nuestras copias de
seguridad. Primero, vamos a recuperar la copia de seguridad que creamos de forma lógica a
través de MySQLDump y después estaremos recuperando la copia de seguridad física.
[00:16] Entonces, para recuperar la copia de seguridad, recordemos que estamos con la base de
datos jugos_ventas. Yo voy a eliminarla. Le doy drop schema, drop now. Entonces ya no existe.
Le doy refresh all, no existe el esquema jugos_ventas.
[00:34] ¿Entonces qué hago? Le doy aquí, vamos a crear un nuevo script, entonces va a hacer
una nueva base de datos. Va a ser CREATE DATABASE jugos_ventas; ejecutamos, creamos
nuestra base de datos, y le doy aquí refresh all, entonces la tengo pero no tiene nada, está vacía.
[01:23] Entonces mysql user, que va a ser el usuario root y la contraseña. Digitamos nuestra
contraseña, listo, y ya estamos dentro de MySQL. Yo puedo aquí, al interior de MySQL, ya por
ejemplo, ver la tabla, la base de datos sakila. Por ejemplo use sakila. Ahora aquí yo puedo darle
un select para ver qué hay en esa base datos.
[02:03] Por ejemplo aquí tenemos una tabla que se llama actor, entonces select * from actor. Me
muestra todos los actores y hay gente que le gusta trabajar MySQL a través del símbolo del
sistema, sí, está bien. Digamos Workbench es más gráfico.
[02:23] Recordemos que este ambiente facilita mucho la visualización de nuestros datos, de
nuestras tablas, podemos utilizar asistentes más fácil, pero hay casos en los cuales es mejor usar
el símbolo del sistema, sobre todo cuando se trata de administrar MySQL. Entonces, podemos
hacerlo a través del símbolo del sistema, porque va a ser más fácil.
[02:46] Entonces le damos exit, salimos y para restaurarlo es muy sencillo. Digitamos MySQL,
colocamos nuestro usuario, sería -uroot -p. Cuando estábamos exportando el archivo le
decíamos mayor que. Para traerlo es menor que, y seleccionamos la carpeta en la cual está
nuestro back-up.
[03:53] Sobre todo si estamos hablando de millones de registros. Aquí, a través del símbolo del
sistema es mucho más rápido. Si venimos a Workbench, ya ustedes ven aquí en jugos_ventas,
clic derecho, refresh all, ya aparecen mis tablas. Entonces esta es la forma de yo recuperar mi
base de datos a través del back-up lógico.
[04:20] Ahora para recuperarlo a través del back-up físico, recordemos que debemos parar la
instancia, después volver y desbloquearla. Entonces, bloqueamos y desbloqueamos. Pero
podemos hacer algo más radical. ¿Qué puede ser más radical? Simplemente derribar todo el
servidor.
[04:46] ¿Entonces yo cómo puedo hacer eso? Recordemos. Venimos a servicios de Windows
aquí y le damos en MySQl 80, 8.0, le damos la opción stop, derribamos el servidor. Ya más
nadie puede hacer nada en el servidor y en ese momento lo que hacemos es por ejemplo
venimos a nuestra carpeta sql_dba y aquí donde dice back-up_fisico, estos dos archivos o lo que
está dentro de este directorio lo traemos a nuestro directorio sql server.
[05:38] Entonces si yo le doy copiar aquí y me voy a mi directorio de MySQL Server 8.0 y le
doy pegar, entonces él me va a decir si lo deseo sustituir. Sí, podemos sustituir todo y nos pide
permiso. Le decimos que sí, continuar. Continuar. Hacer eso para todos los ítems, continuar,
entonces nos pide permisos y copiamos completamente todos los archivos de las carpetas y
cerramos lógicamente Workbench.
[06:19] Debería estar cerrado, no hay problema, pero ya lo copiamos. Ahora venimos a
Workbench. No voy a iniciar todavía el servidor para que ustedes vean que está completamente
muerto. No hay nada. Entonces aquí él me abre unos archivos pero no hay conexión, no hay
nada.
[06:44] Entonces voy a cerrarlo nuevamente y venimos a servicios de Windows, le damos play,
iniciamos el servidor. Inició, está en ejecución y abrimos Workbench. Entramos a nuestra
instancia local y nuevamente está nuestra base de datos jugos_ventas. ¿Qué sucede? Trajimos
nuevamente toda la información.
[07:17] Yo podría haberle dado drop a todo aquí, pues no lo hice. No hay ningún inconveniente.
Simplemente se sustituyó toda la información y todo funciona aparentemente bien. Si yo por
ejemplo vengo aquí a este último script que hicimos, yo le doy un SELECT * FROM facturas;
pues lo más normal es que esté todo en orden.
[07:52] Pero podría darse el caso en el cual yo haga un select, al hacer esta copia física, al traer
este directorio y copiarlo y pegarlo, que alguno de estos datos se me corrompa, entonces la tabla
me presente problemas debido a algunos de los registros que están corrompidos.
[08:13] Entonces, en ese caso, por eso es importante que yo tenga también el back-up lógico,
para yo poder reconstruir mi tabla y recuperar la información o mis datos. Pero básicamente esta
es la manera cómo podemos nosotros hacer la recuperación de la carpeta de forma física.
[08:35] Como ustedes vieron es simplemente copiar y pegar de un directorio hacia otro, pero
corremos el riesgo de que se nos corrompa algún archivo binario. Acuérdense ustedes que aquí
les estamos hablando del archivo binario como tal y no de todos los comandos para la creación.
[08:52] Entonces esto era lo que le queríamos mostrar sobre nuestro back-up y recuperación de
back-up. En el próximo video vamos entonces a concluir esta primera parte de nuestro curso de
administración de MySQL. Ya nos vemos.
Cuál es la herramienta que usamos para recuperar una base de datos a través del Símbolo del
Sistema?
Alternativa correta
mysqldump
¡Alternativa incorrecta! Usamos mysqldump para realizar los backups.
Alternativa correta
mysqlslap
¡Alternativa incorrecta! Esta aplicación no se usa con este propósito.
Alternativa correta
mysql
¡Alternativa correcta! En realidad, no existe una herramienta específica para recuperar el backup. Tan solo,
ejecutamos MySQL y el script con extensión .sql que fue generado por el proceso de backup.
Llegó la hora de que sigas todos los pasos realizados por mí durante esta clase. Si ya lo has
hecho ¡Excelente! Si todavía no lo has hecho, es importante que ejecutes lo que fue visto en los
vídeos para que puedas continuar con la próxima aula.
1) Crea un directorio llamado sql_dba, en el drive C:\.
2) En el símbolo del sistema de Windows, digita los siguientes comandos:
cd\
cd "Program Files"
cd "MySQL"
cd "MySQL 8.0"
cd BinCOPIA EL CÓDIGO
3) Para realizar un backup de la base jugos_ventas, digita:
mysqldump -uroot -p --databases jugos_ventas >
c:\mysqladmin\jugos_ventas_full.sqlCOPIA EL CÓDIGO
La contraseña del usuario root será necesaria para la ejecución del comando.
4) Dentro del archivo C:\sql_dba\jugos_ventas_full.sql, tendrás los comandos para
recuperar la base jugos_ventas.
5) Para realizar un backup de todas las tablas de la base jugos_ventas, excepto la tabla facturas,
ejecuta el siguiente comando:
mysqldump -uroot -p --databases jugos_ventas --ignore-table jugos_ventas.facturas >
c:\sql_dba\jugos_ventas_sin_facturas.sqlCOPIA EL CÓDIGO
6) En la página https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html, podrás encontrar
todas las opciones que ofrece mysqldump.
7) También, podemos hacer el backup lógico a través de Workbench. Para eso, hay que abrirlo.
8) Antes del proceso, debes "desactivar" el banco, para realizar el proceso de creación
del backup. Para ello, haz doble clic sobre la base jugos_ventas. En el script, digita y ejecuta:
LOCK INSTANCE FOR BACKUP;COPIA EL CÓDIGO
9) En la pestaña Administration, selecciona la opción Data Export:
10) Selecciona la base jugos_ventas y marca la opción Export to Self-Contained File:
11) Al lado, incluye el nombre del archivo: C:\sql_dba\jugos_ventas_full_workbench.sql.
12) Haz clic en el botón Start Export.
13) Observa que, en el directorio de salida C:\sql_dba\, un nuevo archivo fue creado, con el
mismo contenido del archivo creado por mysqldump.
14) Adicionalmente, puedes exportar cada componente de la base (en este caso, las tablas) en un
archivo, separadamente. Para ello, nuevamente haz clic en Data Export, selecciona la
base jugos_ventas y marca la opción Export to Dump Project Folder.
15) Al lado, incluye el nombre del directorio: C:\sql_dba\backup_jugos_ventas.
16) Haz clic en el botón Start Export.
17) Observa que, en el directorio de salida (C:\sql_dba), encontrarás una carpeta y dentro de ella
habrá diversos archivos representando las diferentes tablas:
18) Otra forma de hacer el backup es copiando toda la estructura de la base. Pero antes, en el
directorio C:\sql_dba\, Crea un nuevo directorio llamado back-up_fisico.
19) Dirígete hacia C:\ProgramData\MySQL\MySQL Server 8.0 y copia el archivo my.ini en
el directorio C:\sql_dba\back-up_fisico\.
20) Después, copia el directorio (y todo su contenido) C:\ProgramData\MySQL\MySQL Server
8.0\Data en C:\sql_dba\back-up_fisico\.
21) Lo que fue almacenado en C:\sql_dba\back-up_fisico\ es todo el ambiente de datos,
guardado en otro disco.
25) Ejecuta:
27) Finalmente, podemos recuperar la base mediante archivos físicos. Para ello, en Workbench,
elimina una vez más la base:
Bien. Te felicito entonces por haber llegado hasta aquí, en esta primera parte del curso de
administración de MySQL, pero ahora, después de haber aprendido a trabajar con las variables
de ambiente, los mecanismos de almacenamiento, después de haber visto cómo se crean los
backups, cómo se restauran los backups o como se recupera un backup, mejor.
[00:21] Entonces ahora nos queda la segunda parte de este entrenamiento que también estará
abordando varios temas importantes, por ejemplo, un plan ejecución de un DBA, como él debe
optimizar, por ejemplo, el DBA debe enseñarle o ayudar al analista para que optimice mejor sus
consultas.
[00:40] Vamos a ver un poco más el concepto de índices, vamos a entender el algoritmo de
indexación HASH y BTREE. Vamos también a estar trabajando con una herramienta que se
llama MySQLSLAP. Vemos gestión de usuarios, gestión de privilegios.
[00:55] Estaremos viendo bastantes temas de interés que te permitirán prepararte un poco más
como DBA y conocer de forma básica, vamos a decirlo así, las principales funciones que
desempeña este profesional en el área de datos. Entonces te espero en la parte 2 de este
entrenamiento. No te la puedes perder.
The `innodb_file_per_table` parameter, when enabled, causes each InnoDB table to be stored in its own file, separating the storage of data and indexes from the system tablespace. This modular approach benefits performance by simplifying the management of large databases and optimizing disk space usage because unused or dropped tables do not waste space. It enhances data recovery and migration processes by enabling more granular control over individual tables .
To ensure a successful physical backup of MySQL, follow these steps: first, stop the MySQL service to ensure data consistency. Then, copy all data directory contents, including InnoDB tables and the my.ini configuration file, to a backup location. Restart the MySQL service after the backup. Each step is crucial for ensuring data integrity, preventing data loss, and maintaining configuration settings necessary for database recovery .
The InnoDB storage engine enhances transaction management by offering full transactional support with features like ACID compliance and foreign key constraints. Unlike MyISAM, which uses table-level locking, InnoDB uses row-level locking, allowing multiple users to perform simultaneous operations on tables without interference. Additionally, InnoDB separates data and index caching into distinct buffers, improving data retrieval speeds and supporting online backups without the need to stop the server .
The `innodb_buffer_pool_size` parameter in MySQL affects the performance of the InnoDB storage engine by determining the memory allocated for caching data and indexes in the buffer pool. A larger buffer pool can hold more data and indexes, reducing disk I/O operations and significantly enhancing performance, especially in high-read operations and complex transactions .
The MEMORY storage engine offers advantages such as rapid data access due to its in-RAM data storage, which eliminates the need for disk I/O operations. This makes it suitable for scenarios where fast access to temporary data is critical. However, MEMORY has significant limitations, including the loss of data upon server restart, as all information in RAM is cleared. It also does not support foreign keys and is restricted to indexing with HASH or BTREE, excluding large data types like BLOB or TEXT .
InnoDB allows for online backups, which means backups can be created without stopping the MySQL server. This feature is enabled by its ability to manage data consistently and use the row-level locking mechanism, ensuring that read and write operations can continue while the backup is being performed. This contrasts with MyISAM, where table-level locking makes such online activities more challenging .
Logical backups in MySQL involve exporting database content into SQL statements, allowing easy recovery of specific elements and smaller storage space. Tools like mysqldump facilitate this process but might be slower with large data volumes. Physical backups, on the other hand, involve copying database files and are faster for large datasets but require the server to be stopped for consistency. Physical backups are beneficial for ensuring complete data recovery, including InnoDB tables and server configurations like the my.ini file .
The `innodb_flush_log_at_trx_commit` setting impacts durability and performance by controlling how often the log buffer is flushed to disk. Setting it to 1 ensures maximum durability by flushing the buffer to disk at each transaction commit but may decrease performance due to frequent I/O operations. Setting it to 0 or 2 can improve performance by reducing disk writes, but this increases the risk of data loss in a crash. Thus, configuring this parameter requires balancing durability needs against performance goals .
The MyISAM storage engine in MySQL is non-transactional, meaning it is not designed for concurrent operations by multiple users. It only allows table-level locking, which can make reading data faster and is suitable for data warehouses or tables that do not undergo frequent changes. MyISAM stores data in a more compact format, supports HASH and BTREE indexing, and is commonly used for tables with fixed contents that don't experience many updates. It is beneficial in scenarios where the table doesn't receive many transactions and is used primarily for reading purposes, such as in data warehouses .
Not configuring the `key_buffer_size` for a MyISAM table can lead to suboptimal performance because it determines the cache size for MyISAM indexes. Insufficient caching can result in more frequent disk reads, slowing down data retrieval. For optimal performance, the `key_buffer_size` should be set depending on the available system memory, typically from 8 MB to 4 GB, ensuring enough cache capacity to accommodate the workload and improve indexing speed .