Capítulo 1. Instalación de MySQL
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Comencemos nuestro camino de aprendizaje instalando MySQL y accediendo a él por primera vez.
Ten en cuenta que en este libro no nos basamos en una única versión de MySQL. En su lugar, nos hemos basado en nuestro conocimiento colectivo de MySQL en el mundo real. El núcleo del libro se centra en los sistemas operativos Linux (principalmente Ubuntu/Debian y CentOS/RHEL o sus derivados) y en MySQL 5.7 y MySQL 8.0, porque son las que consideramos las versiones "actuales" capaces de soportar cargas de trabajo de producción. Las series MySQL 5.7 y 8.0 aún están en desarrollo, lo que significa que se seguirán publicando nuevas versiones con correcciones de errores y nuevas funciones.
Con MySQL convirtiéndose en la base de datos de código abierto más popular (Oracle, que ocupa el primer lugar, no es de código abierto), ha aumentado la demanda de tener un proceso de instalación rápido. Puedes pensar en la instalación de MySQL desde cero como algo similar a hornear un pastel: el código fuente es la receta. Pero incluso con el código fuente disponible, la receta para construir software no es fácil de seguir. Se tarda tiempo en compilar y, normalmente, es necesario instalar bibliotecas de desarrollo adicionales que exponen a riesgos los entornos de producción. Digamos que quieres una tarta de chocolate; aunque tengas las instrucciones para hacerla tú mismo, puede que no quieras desordenar tu cocina, o que no tengas tiempo para hornearla, así que en vez de eso vas a una pastelería y compras una. Para MySQL, cuando lo quieras listo para usar sin el esfuerzo que supone compilarlo, puedes utilizar los paquetes de distribución.
Existen paquetes de distribución de MySQL para diversas plataformas, como distribuciones de Linux, Windows y macOS. Estos paquetes proporcionan una forma flexible y rápida de empezar a utilizar MySQL. Volviendo al ejemplo de la tarta de chocolate, supongamos que quieres cambiar algo. Quizá quieras una tarta de chocolate blanco. Para MySQL, tenemos lo que se llaman bifurcaciones, que incluyen algunas opciones diferentes. Veremos algunas de ellas en la siguiente sección.
Horquillas MySQL
En ingeniería de software, una bifurcación se produce cuando alguien copia el código fuente de e inicia su propio camino de desarrollo y soporte independientes. La bifurcación puede seguir un camino cercano al de la versión original, como hace la distribución Percona de MySQL, o alejarse, como MariaDB. Como el código fuente de MySQL es abierto y libre, los nuevos proyectos pueden bifurcar el código sin permiso de su creador original. Echemos un vistazo a algunas de las bifurcaciones más notables.
MySQL Edición Comunidad
MySQL Community Edition, también conocida como versión upstream o vainilla de MySQL, es la versión de código abierto distribuida por Oracle. Esta versión impulsa el desarrollo del motor InnoDB y de nuevas funciones, y es la primera en recibir actualizaciones, nuevas funciones y correcciones de errores.
Servidor Percona para MySQL
La distribución Percona de MySQL es un sustituto gratuito y de código abierto de MySQL Community Edition. El desarrollo sigue de cerca esa versión, centrándose en mejorar el rendimiento y el ecosistema general de MySQL. Percona Server también incluye mejoras adicionales como el motor MyRocks, un plugin de Registro de Auditoría y un plugin de Autenticación PAM. Percona fue cofundada por Peter Zaitsev y Vadim Tkachenko.
Servidor MariaDB
Creada por Michael "Monty" Widenius y distribuida por la Fundación MariaDB, MariaDB Server es con diferencia la bifurcación que más se ha alejado de MySQL vainilla. En los últimos años ha desarrollado nuevas funcionalidades y motores, como MariaDB ColumnStore, y fue la primera base de datos en integrarla funcionalidad de clustering Galera 4.
MySQL Edición Empresa
MySQL Enterprise Edition es actualmente la única versión con licencia comercial (lo que significa que tienes que pagar para utilizarla, como una licencia de Windows). También distribuida por Oracle, contiene toda la funcionalidad de la Edición Comunidad más funciones exclusivas de seguridad, copia de seguridad y alta disponibilidad.
Opciones de instalación y plataformas
En primer lugar, debes elegir la versión de MySQL compatible con tu sistema operativo (SO) . Puedes verificar la compatibilidad en el sitio web de MySQL. Las mismas políticas de soporte están disponibles para Percona Server y MariaDB.
A menudo oímos la pregunta: ¿es posible instalar MySQL en un sistema operativo que no es compatible? La mayoría de las veces, la respuesta es sí. Es posible instalar MySQL en Windows 7, por ejemplo, pero el riesgo de que aparezca un error o de que se produzca un comportamiento impredecible (como fugas de memoria o bajo rendimiento) es alto. Debido a estos riesgos, no recomendamos hacerlo para entornos de producción.
El siguiente paso es decidir si instala una versión de desarrollo o de Disponibilidad General (GA). Las versiones de desarrollo tienen las funciones más recientes, pero no las recomendamos para producción porque no son estables. Las versiones GA, también llamadas de producción o estables, están pensadas para su uso en producción.
Consejo
Recomendamos encarecidamente utilizar la versión GA más reciente, ya que incluirá las últimas correcciones de errores estables y mejoras de rendimiento.
Lo último que hay que decidir es qué formato de distribución instalar para el sistema operativo. Para la mayoría de los casos de uso, sirve una distribución binaria. Las distribuciones binarias están disponibles en formato nativo para muchas plataformas, como los paquetes .rpm para Linux o los paquetes .dmg para macOS. Las distribuciones también están disponibles en formatos genéricos, como archivos .zip o archivos .tar comprimidos(tarballs). En Windows, puedes utilizar el Instalador MySQL para instalar una distribución binaria.
Advertencia
Fíjate si la versión es de 32 o 64 bits. La regla general es elegir la versión de 64 bits. A menos que trabajes con un SO antiguo, no debes seleccionar la versión de 32 bits. Esto se debe a que los procesadores de 32 bits sólo pueden gestionar una cantidad limitada de RAM (4 GB o menos), mientras que los procesadores de 64 bits son capaces de gestionar mucha más memoria.
El proceso de instalación consta de cuatro pasos principales, que se describen en las secciones siguientes. Es esencial seguirlos correctamente y establecer los requisitos mínimos de seguridad para la base de datos MySQL.
1. Descarga la distribución que quieres instalar
Cada distribución tiene su propietario y, en consecuencia, su fuente. Algunas distribuciones Linux proporcionan paquetes por defecto en sus repositorios. Por ejemplo, en CentOS 8, la distribución MySQL vanilla está disponible en los repositorios por defecto. Cuando el SO dispone de paquetes por defecto, no es necesario descargar MySQL de un sitio web o configurar tú mismo un repositorio, lo que facilita el proceso de instalación.
Demostraremos cómo instalar los repositorios y descargar los archivos sin necesidad de ir al sitio web durante el proceso de instalación. Sin embargo, si quieres descargar MySQL tú mismo, puedes utilizar los siguientes enlaces:
2. Instala la Distribución
La instalación consiste en los pasos elementales para hacer que MySQL funcione y ponerlo en línea, pero no en asegurar MySQL. Por ejemplo, en este punto, el usuario root de MySQL puede conectarse sin contraseña, lo que es bastante peligroso, ya que el usuario root tiene privilegios para realizar cualquier acción, incluida la eliminación de una base de datos.
3. Realiza los ajustes necesarios tras la instalación
Este paso consiste en asegurarse de que el servidor MySQL funciona correctamente. Es esencial que te asegures de que tu servidor es seguro, y el primer paso para ello es ejecutar el script mysql_secure_installation. Cambiarás la contraseña del usuario root, desactivarás el acceso del usuario root desde un servidor remoto y eliminarás la base de datos de prueba.
4. Ejecutar pruebas
Algunos DBA ejecutan pruebas de rendimiento para cada implementación de , con el fin de medir si el rendimiento es adecuado para el proyecto para el que lo utilizan. La herramienta más habitual para ello es sysbench
. Es esencial destacar aquí que sysbench
realiza una carga de trabajo sintética, mientras que cuando la aplicación se está ejecutando, la llamamos carga de trabajo real. Las cargas de trabajo sintéticas suelen proporcionar informes sobre el rendimiento máximo del servidor, pero no pueden reproducir la carga de trabajo real (con sus bloqueos inherentes, diferentes tiempos de ejecución de consultas, procedimientos almacenados, desencadenadores, etc.).
En la siguiente sección veremos los detalles del proceso de instalación de algunas de las plataformas más utilizadas.
Instalar MySQL en Linux
El ecosistema Linux es diverso y tiene muchas variantes, como Red Hat Enterprise Linux (RHEL), CentOS, Ubuntu, Debian y otras. Esta sección se centra sólo en las más populares; de lo contrario, ¡este libro trataría por completo del proceso de instalación!
Instalar MySQL en CentOS 7
CentOS, abreviatura de Community Enterprise Linux Operating System, se fundó en 2004, y Red Hat la adquirió en 2014. CentOS es la versión comunitaria de Red Hat, por lo que son prácticamente idénticos, pero CentOS es gratuito y el soporte proviene de la comunidad en lugar de la propia Red Hat. CentOS 7 se lanzó en 2014, y su fecha de fin de vida es en 2024.
Instalar MySQL 8.0
Para instalar MySQL 8.0 en CentOS 7 utilizando el repositorio yum, completa los siguientes pasos.
Conéctate al servidor Linux
Normalmente, por razones de seguridad, los usuarios inician sesión en servidores Linux como usuarios sin privilegios. Aquí tienes un ejemplo de un usuario que inicia sesión en Linux desde un terminal macOS utilizando una clave privada:
$ ssh -i key.pem centos@3.227.11.227
Cuando te hayas conectado correctamente, verás algo así en el terminal:
[centos@ip-172-30-150-91 ~]$
Ser root en Linux
Una vez conectado al servidor, necesitas convertirte en root:
$ sudo su - root
Verás un mensaje como el siguiente en tu terminal:
[root@ip-172-30-150-91 ~]#
Ser root es importante porque para instalar MySQL es necesario realizar tareas como crear el usuario MySQL en Linux, configurar directorios y establecer permisos. También es posible utilizar el comando sudo
para todos los ejemplos que mostraremos y que deben ser ejecutados por el usuario root. Sin embargo, si olvidas anteponer a un comando el prefijo sudo
, el proceso de instalación quedará incompleto.
Nota
En este capítulo se utilizará el usuario root de Linux en la mayoría de los ejemplos (representado por el prompt #
en las líneas de código). Otra ventaja de la representación #
es que éste es también el carácter de comentario en Linux. Si copias/pegas a ciegas las líneas del libro, no ejecutarás ningún comando real en el intérprete de comandos.
Instalar MySQL 8.0 Servidor Comunitario
Como el repositorio yum de MySQL tiene repositorios para varias versiones de MySQL (versiones principales 5.7 y 8.0), primero tenemos que desactivar todos los repositorios:
# sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/mysql-community.repo
A continuación, tenemos que activar el repositorio MySQL 8.0 y ejecutar el siguiente comando para instalar MySQL 8.0:
# yum --enablerepo=mysql80-community install mysql-community-server
Inicia el servicio MySQL
Ahora, inicia el servicio MySQL con el comando systemctl
:
# systemctl start mysqld
También es posible iniciar el proceso MySQL manualmente, lo que puede ser útil para solucionar problemas de inicialización cuando MySQL se niega a iniciarse. Para iniciar manualmente, indica la ubicación del archivo my.cnf y qué usuario puede manipular los archivos de la base de datos y el proceso:
# mysqld --defaults-file=/etc/my.cnf --user=mysql
Descubre la contraseña por defecto del usuario root
Cuando instalas MySQL 8.0, MySQL crea una contraseña temporal para la cuenta de usuario root. Para identificar la contraseña de la cuenta de usuario root, ejecuta el siguiente comando:
# grep "A temporary password" /var/log/mysqld.log
El comando proporciona una salida como la siguiente:
2020-05-31T15:04:12.256877Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: #z?hhCCyj2aj
Asegurar la instalación de MySQL
MySQL proporciona un script de shell que puedes ejecutar en los sistemas Unix, mysql_secure_installation, que te permite mejorar la seguridad de la instalación de tu servidor de las siguientes maneras:
-
Puedes establecer una contraseña para la cuenta raíz.
-
Puedes desactivar el acceso root desde fuera del localhost.
-
Puedes eliminar cuentas de usuario anónimas.
-
Puedes eliminar la base de datos de prueba, a la que por defecto pueden acceder usuarios anónimos.
Ejecuta el comando mysql_secure_installation
para asegurar el servidor MySQL:
# mysql_secure_installation
Te pedirá la contraseña actual de la cuenta root:
Enter the password for user root:
Introduce la contraseña temporal obtenida en el paso anterior y pulsa Intro. Aparecerá el siguiente mensaje:
The existing password for the user account root has expired. Please set a new password. New password: Re-enter new password:
Nota
Esta sección sólo cubrirá los aspectos básicos del cambio de la contraseña de root para conceder acceso al servidor MySQL. Mostraremos más detalles sobre la concesión de privilegios y la creación de una política de contraseñas en el Capítulo 8.
Tendrás que introducir dos veces la nueva contraseña de la cuenta raíz. Las versiones más recientes de MySQL vienen con una política de validación, lo que significa que la nueva contraseña debe respetar unos requisitos mínimos para ser aceptada. Los requisitos por defecto son que las contraseñas deben tener al menos ocho caracteres e incluir:
-
Al menos un carácter numérico
-
Al menos un carácter en minúscula
-
Al menos un carácter en mayúscula
-
Al menos un carácter especial (no alfanumérico)
A continuación, te preguntará si quieres realizar algunos cambios en la configuración inicial. Para garantizar la máxima protección, te recomendamos que elimines los usuarios anónimos, desactives el inicio de sesión de root remoto y elimines la base de datos de prueba (es decir, que respondas afirmativamente a todas las opciones):
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Conectarse a MySQL
Este paso es opcional, pero lo utilizamos para verificar que hemos ejecutado todos los pasos correctamente. Utiliza este comando para conectarte al servidor MySQL:
# mysql -u root -p
Te pedirá la contraseña del usuario root. Escribe la contraseña y pulsa Intro:
Enter password:
Si tiene éxito, mostrará la línea de comandos MySQL:
mysql>
Instalación de MariaDB 10.5
Para instalar MariaDB 10.5 en CentOS 7, tendrás que ejecutar pasos similares a los de la distribución MySQL vainilla.
Ser root en Linux
En primer lugar, necesitamos convertirnos en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instalar el repositorio MariaDB
El siguiente conjunto de comandos descargará el repositorio de MariaDB y lo configurará para el siguiente paso. Ten en cuenta que en los comandos yum
, estamos utilizando la opción -y
. Esta opción le dice a Linux que asuma que la respuesta es sí para todas las preguntas siguientes:
# yum install wget -y # wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup # chmod +x mariadb_repo_setup # ./mariadb_repo_setup
Instalar MariaDB
Con el repositorio configurado, el siguiente comando instalará la última versión estable de MariaDB y sus dependencias:
# yum install MariaDB-server -y
El final de la salida será similar a esto:
Installed: MariaDB-compat.x86_64 0:10.5.8-1.el7.centos MariaDB-server.x86_64 0:10.5.8-1.el7.centos Dependency Installed: MariaDB-client.x86_64 0:10.5.8-1.el7.centos MariaDB-common.x86_64 0:10.5.8-1.el7.centos boost-program-options.x86_64 0:1.53.0-28.el7 galera-4.x86_64 0:26.4.6-1.el7.centos libaio.x86_64 0:0.3.109-13.el7 lsof.x86_64 0:4.87-6.el7 pcre2.x86_64 0:10.23-2.el7 perl.x86_64 4:5.16.3-299.el7_9 perl-Carp.noarch 0:1.26-244.el7 ... Replaced: mariadb-libs.x86_64 1:5.5.64-1.el7 Complete!
El símbolo ¡Completado! al final del registro indica que la instalación se ha realizado correctamente.
Iniciar MariaDB
Con MariaDB instalado, inicializa el servicio con el comando systemctl
:
# systemctl start mariadb.service
Puedes utilizar este comando para verificar su estado:
# systemctl status mariadb
mariadb.service - MariaDB 10.5.8 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled) ... Feb 07 12:55:04 ip-172-30-150-91.ec2.internal systemd[1]: Started MariaDB 10.5.8 database server.
MariaDB seguro
En este punto, MariaDB se ejecutará en modo inseguro. A diferencia de MySQL 8.0, MariaDB tendrá una contraseña de root vacía para que puedas acceder a ella al instante:
# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 44 Server version: 10.5.8-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Puedes ejecutar mysql_secure_installation
para asegurar MariaDB igual que lo harías para MySQL 8.0 (para más detalles, consulta la sección anterior). Hay una ligera variación en la salida, con una pregunta extra:
Switch to unix_socket authentication [Y/n] y Enabled successfully! Reloading privilege tables.. ... Success!
Responder sí cambia la conexión de modo TCP/IP a modo socket Unix. Hablaremos de los distintos tipos de conexión en "Archivos por defecto de MySQL 5.7".
Instalación de Percona Server 8.0
Instala Percona Server 8.0 en CentOS 7 siguiendo el siguiente paso.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instala el repositorio Percona
Puedes instalar el repositorio Percona yum ejecutando el siguiente comando como root o con sudo
:
# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
La instalación crea un nuevo archivo de repositorio, /etc/yum.repos.d/percona-original-release.repo. Ahora, activa el repositorio de Percona Server 8.0 utilizando este comando:
# percona-release setup ps80
Instalar Percona Server 8.0
Para instalar el servidor, ejecuta este comando:
# yum install percona-server-server
Inicializar Percona Server 8.0 con systemctl
Una vez que hayas instalado los binarios de Percona Server 8.0, inicia el servicio:
# systemctl start mysql
# systemctl status mysql
mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2021-02-07 13:22:15 UTC; 6s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 14472 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 14501 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 5789) Memory: 345.2M CGroup: /system.slice/mysqld.service └─14501 /usr/sbin/mysqld Feb 07 13:22:14 ip-172-30-92-109.ec2.internal systemd[1]: Starting MySQL Server... Feb 07 13:22:15 ip-172-30-92-109.ec2.internal systemd[1]: Started MySQL Server.
En este punto, los pasos son similares a los de la instalación vainilla. Consultalas secciones sobre la obtención de la contraseña temporal y la ejecución del comando mysql_secure_installation
en "Instalación de MySQL 8.0".
Instalación de MySQL 5.7
Instala MySQL 5.7 en CentOS 7 siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instalar el repositorio MySQL 5.7
Puedes instalar el repositorio yum de MySQL 5.7 ejecutando el siguiente comando como root o con sudo
:
# yum localinstall\ https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm -y
La instalación crea un nuevo archivo de repositorio, /etc/yum.repos.d/mysql-community.repo.
Instala los binarios de MySQL 5.7
Para instalar el servidor, ejecuta este comando:
# yum install mysql-community-server -y
Inicializar MySQL 5.7 con systemctl
Una vez que hayas instalado los binarios de MySQL 5.7, inicia el servicio:
# systemctl start mysqld
Y ejecuta este comando para validar su estado:
# systemctl status mysqld
En este punto, los pasos son similares a los de la instalación de MySQL 8.0 vainilla. Consultalas secciones sobre la obtención de la contraseña temporal y la ejecución del comando mysql_secure_installation
en "Instalación de MySQL 8.0".
Instalación de Percona Server 5.7
Instala Percona Server 5.7 en CentOS 7 siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instala el repositorio Percona
Puedes instalar el repositorio Percona yum ejecutando el siguiente comando como root o con sudo
:
# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
La instalación crea un nuevo archivo de repositorio, /etc/yum.repos.d/percona-original-release.repo. Utiliza este comando para activar el repositorio de Percona Server 5.7:
# percona-release setup ps57
Instala los binarios de Percona Server 5.7
Para instalar el servidor, ejecuta este comando:
# yum install Percona-Server-server-57 -y
Inicializar Percona Server 5.7 con systemctl
Una vez que hayas instalado los binarios de Percona Server 5.7, inicia el servicio:
# systemctl start mysql
Y valida su estatus:
# systemctl status mysql
En este punto, los pasos son similares a los de la instalación de MySQL 8.0 vainilla. Consultalas secciones sobre la obtención de la contraseña temporal y la ejecución del comando mysql_secure_installation
en "Instalación de MySQL 8.0".
Instalar MySQL en CentOS 8
La versión actual de CentOS es CentOS 8, y está construida sobre RHEL 8. Normalmente, CentOS disfruta del mismo ciclo de vida de soporte de diez años que el propio RHEL. Este ciclo de vida de soporte tradicional daría a CentOS 8 una fecha de fin de vida en 2029. Sin embargo, en diciembre de 2020, un anuncio de Red Hat señaló la intención de poner una lápida en la tumba de CentOS 8 mucho antes, en 2021. (Red Hat dará soporte a CentOS 7 junto con RHEL 7 hasta 2024.) Los usuarios actuales de CentOS tendrán que migrar al propio RHEL o al más reciente proyecto CentOS Stream. Están surgiendo algunos proyectos comunitarios, pero en este momento, el futuro de CentOS es incierto.
Sin embargo, compartiremos aquí los pasos de instalación, ya que muchos usuarios utilizan RHEL 8 y Oracle Linux 8 en la industria.
Instalar MySQL 8.0
La última versión de MySQL 8.0 es disponible para instalar desde el repositorio predeterminado de AppStream utilizando el módulo MySQL que los sistemas CentOS 8 y RHEL 8 activan por defecto. Por tanto, hay alguna variación con respecto al método tradicional yum
. Veamos los detalles.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instalar los binarios de MySQL 8.0
Ejecuta el siguiente comando para instalar el paquete mysql-server
y varias de sus dependencias:
# dnf install mysql-server
Cuando se te pida, pulsa y y luego Intro para confirmar que quieres continuar:
Output ... Transaction Summary ======================================================================= Install 50 Packages Upgrade 8 Packages Total download size: 50 M Is this ok [y/N]: y
Iniciar MySQL
Llegados a este punto, has instalado MySQL en tu servidor, pero aún no está operativo. El paquete que has instalado configura MySQL para que se ejecute como un servicio de systemd
llamado mysqld.service
. Para iniciar MySQL, debes utilizar el comando systemctl
:
# systemctl start mysqld.service
Comprueba si el servicio está funcionando
Para comprobar si el servicio funciona correctamente, ejecuta el siguiente comando:
# systemctl status mysqld
Si has iniciado MySQL correctamente, la salida mostrará que el servicio MySQL está activo:
# systemctl status mysqld
mysqld.service - MySQL 8.0 database server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-21 22:57:57 UTC; 6s ago Process: 15966 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 15887 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS) Process: 15862 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Main PID: 15924 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 23864) Memory: 373.7M CGroup: /system.slice/mysqld.service └─15924 /usr/libexec/mysqld --basedir=/usr Jun 21 22:57:57 ip-172-30-222-117.ec2.internal systemd[1]: Starting MySQL 8.0 database server... Jun 21 22:57:57 ip-172-30-222-117.ec2.internal systemd[1]: Started MySQL 8.0 database server.
MySQL 8.0 seguro
Al igual que al instalar MySQL 8.0 en CentOS 7, tienes que ejecutar el comando mysql_secure_installation
(para más detalles, consulta la sección correspondiente en "Instalar MySQL 8.0" ). La principal diferencia es que no existe una contraseñatemporal para CentOS 8, así que cuando el script te pida la contraseña de root, déjala en blanco y pulsa Intro.
Instalación de Percona Server 8.0
Para instalar Percona Server 8.0 en CentOS 8, primero tienes que instalar el repositorio. Veamos los pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instala los binarios de Percona Server 8.0
Ejecuta el siguiente comando para instalar el repositorio Percona:
# yum install https://repo.percona.com/yum/percona-release-latest.noarh.rpm
Cuando se te pida, pulsa y y luego Intro para confirmar que quieres continuar:
Last metadata expiration check: 0:03:49 ago on Sun 07 Feb 2021 01:16:41 AM UTC. percona-release-latest.noarch.rpm 109 kB/s | 19 kB 00:00 Dependencies resolved. <snip> Total size: 19 k Installed size: 31 k Is this ok [y/N]: y Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : percona-release-1.0-25.noarch 1/1 Running scriptlet: percona-release-1.0-25.noarch 1/1 * Enabling the Percona Original repository <*> All done! * Enabling the Percona Release repository <*> All done! The percona-release package now contains a percona-release script that can enable additional repositories for our newer products. For example, to enable the Percona Server 8.0 repository use: percona-release setup ps80 Note: To avoid conflicts with older product versions, the percona-release setup command may disable our original repository for some products. For more information, please visit: https://www.percona.com/doc/percona-repo-config/percona-release.html Verifying: percona-release-1.0-25.noarch 1/1 Installed: percona-release-1.0-25.noarch
Habilitar el repositorio para Percona 8.0
La instalación crea un nuevo archivo de repositorio en /etc/yum.repos.d/percona-original-release.repo. Habilita el repositorio de Percona Server 8.0 utilizando este comando:
# percona-release setup ps80
El comando te pide que desactives el módulo RHEL 8 para MySQL. Puedes hacerlo pulsando y:
* Disabling all Percona Repositories On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server Do you want to disable it? [y/N] y Disabling dnf module... Percona Release release/noarch YUM repository 6.4 kB/s | 1.4 kB 00:00 Dependencies resolved. <snip> Complete! dnf mysql module was disabled * Enabling the Percona Server 8.0 repository * Enabling the Percona Tools repository <*> All done!
O hazlo manualmente con el siguiente comando:
# dnf module disable mysql
Instala los binarios de Percona Server 8.0
Ya estás preparado para instalar Percona Server 8.0 en tu servidor CentOS 8/RHEL 8. Para evitar que se te pregunte de nuevo si quieres continuar, añade la dirección -y
a la línea de comandos:
# yum install percona-server-server -y
Comprueba el estado del servicio
Es importante validar que has completado todos los pasos correctamente. Utiliza este comando para comprobar el estado del servicio:
# systemctl status mysqld
mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2021-02-07 01:30:50 UTC; 28s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 12864 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 12942 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 5789) Memory: 442.6M CGroup: /system.slice/mysqld.service └─12942 /usr/sbin/mysqld Feb 07 01:30:40 ip-172-30-92-109.ec2.internal systemd[1]: Starting MySQL Server.. Feb 07 01:30:50 ip-172-30-92-109.ec2.internal systemd[1]: Started MySQL Server.
Instalación de MySQL 5.7
Instala MySQL 5.7 en CentOS 8 siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Desactivar el módulo MySQL por defecto
Sistemas como RHEL 8, Oracle Linux 8 y CentOS 8 activan el módulo MySQL por defecto. A menos que este módulo esté desactivado, enmascara los paquetes proporcionados por los repositorios de MySQL, impidiendo que instales una versión diferente a MySQL 8.0. Por tanto, utiliza estos comandos para eliminar este módulo por defecto:
# dnf remove @mysql # dnf module reset mysql && dnf module disable mysql
Configurar el repositorio MySQL 5.7
No hay repositorio MySQL para CentOS 8, así que utilizaremos el repositorio de CentOS 7 como referencia. Crea un nuevo archivo de repositorio:
# vi /etc/yum.repos.d/mysql-community.repo
Y pega los siguientes datos en el archivo:
[mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/ enabled=1 gpgcheck=0 [mysql-connectors-community] name=MySQL Connectors Community baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/ enabled=1 gpgcheck=0 [mysql-tools-community] name=MySQL Tools Community baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/ enabled=1 gpgcheck=0
Instala los binarios de MySQL 5.7
Con el módulo por defecto desactivado y el repositorio configurado, ejecuta el siguiente comando para instalar el paquete mysql-server
y sus dependencias:
# dnf install mysql-community-server
Cuando se te pida, pulsa y y luego Intro para confirmar que quieres continuar:
Output ... Install 5 Packages Total download size: 202 M Installed size: 877 M Is this ok [y/N]: y
Iniciar MySQL
Has instalado los binarios de MySQL en tu servidor, pero aún no está operativo. El paquete que has instalado configura MySQL para que se ejecute como un servicio de systemd
llamado mysqld.service
. Para iniciar MySQL, necesitas utilizar el comando systemctl
:
# systemctl start mysqld.service
Comprueba si el servicio está funcionando
Para comprobar que el servicio funciona correctamente, ejecuta el siguiente comando:
# systemctl status mysqld
Si has iniciado MySQL correctamente, la salida mostrará que el servicio MySQL está activo:
# systemctl status mysqld
mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2021-02-07 18:22:12 UTC; 9s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 14396 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS) Process: 8137 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 14399 (mysqld) Tasks: 27 (limit: 5789) Memory: 327.2M CGroup: /system.slice/mysqld.service └─14399 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid Feb 07 18:22:02 ip-172-30-36-53.ec2.internal systemd[1]: Starting MySQL Server... Feb 07 18:22:12 ip-172-30-36-53.ec2.internal systemd[1]: Started MySQL Server.
MySQL seguro 5.7
En este punto, los pasos son similares a los de la instalación de MySQL 8.0 vainilla. Consultalas secciones sobre la obtención de la contraseña temporal y la ejecución del comando mysql_secure_installation
en "Instalación de MySQL 8.0".
Instalar MySQL en Ubuntu 20.04 LTS (Focal Fossa)
Ubuntu es una distribución de Linux basada en Debian que se compone principalmente de software libre y de código abierto. Oficialmente, hay tres ediciones de Ubuntu: Escritorio, Servidor y Core para dispositivos IoT y robots. La versión con la que trabajaremos en este libro es la de Servidor.
Instalar MySQL 8.0
Para Ubuntu, el proceso es ligeramente diferente, ya que Ubuntu utiliza el repositorio apt. Veamos los pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instalar MySQL 8.0
A continuación, instala el paquete mysql-server
:
# apt install mysql-server -y
El comando apt install
instalará MySQL pero no te pedirá que establezcas una contraseña ni que hagas ningún otro cambio de configuración. A diferencia de la instalación de CentOS, Ubuntu inicializa MySQL en modo inseguro.
En instalaciones nuevas de MySQL, deberás ejecutar el script de seguridad incluido en el sistema de gestión de bases de datos (SGBD). Este script cambia algunas de las opciones por defecto menos seguras para los inicios de sesión de root remoto y la base de datos de prueba. Abordaremos este problema en el paso de seguridad después de inicializar MySQL.
Comprueba si el servicio está funcionando
Para comprobar que el servicio funciona correctamente, ejecuta el siguiente comando:
# systemctl status mysql
Si has iniciado MySQL correctamente, la salida mostrará que el servicio MySQL está activo:
mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-02-07 20:19:51 UTC; 22s ago Process: 3514 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 3522 (mysqld) Status: "Server is operational" Tasks: 38 (limit: 1164) Memory: 332.7M CGroup: /system.slice/mysql.service └─3522 /usr/sbin/mysqld Feb 07 20:19:50 ip-172-30-202-86 systemd[1]: Starting MySQL Community Server... Feb 07 20:19:51 ip-172-30-202-86 systemd[1]: Started MySQL Community Server.
MySQL 8.0 seguro
En este punto, los pasos son similares a los de la instalación vainilla en CentOS 7 (ver "Instalar MySQL 8.0"). Sin embargo, MySQL 8.0 en Ubuntu se inicializa sin asegurar, lo que significa que la contraseña de root está vacía. Para asegurarla, ejecuta mysql_secure_installation
:
# mysql_secure_installation
Esto te llevará a través de una serie de indicaciones para realizar algunos cambios en las opciones de seguridad de la instalación de MySQL, que son similares a las de la versión de CentOS descrita anteriormente.
Aquí hay una pequeña variación porque en Ubuntu es posible cambiar la política de validación, que gestiona la fortaleza de la contraseña. En este ejemplo, estamos estableciendo la política de validación en MEDIO (1):
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 50 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
Instalación de Percona Server 8
Instala Percona Server 8.0 en Ubuntu 20.04 LTS siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Instala el GNU Privacy Guard
Oracle firma los paquetes descargables de MySQL con GNU Privacy Guard (GnuPG), una alternativa de código abierto al conocido Pretty Good Privacy (PGP) creado por Phil Zimmermann. La mayoría de las distribuciones de Linux vienen con GnuPG instalado por defecto, pero en este caso tienes que instalarlo tú:
# apt-get install gnupg2 -y
Obtén los paquetes del repositorio del sitio web de Percona
A continuación, recupera los paquetes del repositorio Percona con el comando wget
:
# wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)\ _all.deb
Instala el paquete descargado con dpkg
Una vez descargado, instala el paquete con el siguiente comando:
# dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
A continuación, puedes comprobar el repositorio configurado en el archivo /etc/apt/sources.list.d/percona-original-release.list.
Habilitar el repositorio
El siguiente paso es habilitar Percona Server 8.0 en el repositorio y actualizarlo:
# percona-release setup ps80 # apt update
Instala los binarios de Percona Server 8.0
A continuación, instala el paquete percona-server-server
con el comando apt-get install
:
# apt-get install percona-server-server -y
Iniciar MySQL
Llegados a este punto, has instalado MySQL en tu servidor, pero aún no está operativo. Para iniciar MySQL, necesitas utilizar el comando systemctl
:
# systemctl start mysql
Comprueba si el servicio está funcionando
Para comprobar que el servicio funciona correctamente, ejecuta el siguiente comando:
# systemctl status mysql
En este punto, Percona Server se ejecutará en modo inseguro. Ejecutar mysql_secure_installation
te llevará a través de una serie de indicaciones para realizar algunos cambios en las opciones de seguridad de tu instalación MySQL, que son idénticas a las descritas para instalar MySQL 8.0 vainilla en la sección anterior.
Instalación de MariaDB 10.5
Instala MariaDB 10.5 en Ubuntu 20.04 LTS siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Actualiza el sistema con el gestor de paquetes apt
Asegúrate de que tu sistema está actualizado e instala el paquete software-properties-common
con los siguientescomandos:
# apt update && sudo apt upgrade # apt -y install software-properties-common
Este paquete contiene los archivos comunes para las propiedades del software, como el backend D-Bus y una abstracción de los repositorios apt utilizados.
Importar la clave GPG de MariaDB
Ejecuta el siguiente comando para añadir la clave del repositorio al sistema:
# apt-key adv --fetch-keys \ 'https://mariadb.org/mariadb_release_signing_key.asc'
Añade el repositorio MariaDB
Después de importar la clave GPG del repositorio, tienes que añadir el repositorio apt ejecutando el siguiente comando:
# add-apt-repository \ 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'
Nota
Existen diferentes espejos para descargar el repositorio de MariaDB. En este ejemplo, utilizamos http://mariadb.mirror.globo.tech.
Instalar los binarios de MariaDB 10.5
El siguiente paso es la instalación del Servidor MariaDB:
# apt install mariadb-server mariadb-client
Comprueba si el servicio está funcionando
Para comprobar si el servicio MariaDB se está ejecutando correctamente, ejecuta el siguiente comando:
# systemctl status mysql
En este punto, MariaDB 10.5 se ejecutará en modo inseguro. Ejecutar mysql_secure_installation
te llevará a través de una serie de indicaciones para realizar algunos cambios en las opciones de seguridad de tu instalación MySQL, que son idénticas a las descritas para instalar MySQL 8.0 vainilla en Ubuntu anteriormente en esta sección.
Instalación de MySQL 5.7
Instala MySQL 5.7 en Ubuntu 20.04 LTS siguiendo estos pasos.
Ser root en Linux
En primer lugar, necesitas convertirte en root. Consulta las instrucciones en "Instalación de MySQL 8.0".
Actualiza el sistema con el gestor de paquetes apt
Puedes asegurarte de que tu sistema está actualizado e instalar el paquete software-properties-common
con el siguiente comando:
# apt update -y && sudo apt upgrade -y
Añadir y configurar el repositorio MySQL 5.7
Añade el repositorio MySQL ejecutando los siguientes comandos:
# wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb # dpkg -i mysql-apt-config_0.8.12-1_all.deb
En el indicador, elige "ubuntu bionic" como se muestra en la Figura 1-1 y haz clic en Aceptar.
El siguiente indicador muestra MySQL 8.0 elegido por defecto(Figura 1-2). Con esta opción seleccionada, pulsa Intro.
En la siguiente opción, como se muestra en la Figura 1-3, elige MySQL 5.7 y haz clic en Aceptar.
Tras volver a la pantalla principal, pulsa Aceptar para salir, como se muestra en la Figura 1-4.
A continuación, tienes que actualizar los paquetes de MySQL:
# apt-get update -y
Valida la política de Ubuntu para instalar MySQL 5.7:
# apt-cache policy mysql-server
Comprueba la salida para ver qué versión de MySQL 5.7 está disponible:
# apt-cache policy mysql-server
mysql-server: Installed: (none) Candidate: 8.0.23-0ubuntu0.20.04.1 Version table: 8.0.23-0ubuntu0.20.04.1 500 500 http://br.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 500 http://br.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages 8.0.19-0ubuntu5 500 500 http://br.archive.ubuntu.com/ubuntu focal/main amd64 Packages 5.7.33-1ubuntu18.04 500 500 http://repo.mysql.com/apt/ubuntu bionic/mysql-5.7 amd64 Packages
Instala los binarios de MySQL 5.7
Ahora que has comprobado que la versión MySQL 5.7 está disponible(5.7.33-1ubuntu18.04), instálala:
# apt-get install mysql-client=5.7.33-1ubuntu18.04 -y # apt-get install mysql-community-server=5.7.33-1ubuntu18.04 -y # apt-get install mysql-server=5.7.33-1ubuntu18.04 -y
El proceso de instalación te pedirá que elijas la contraseña de root, como se muestra en la Figura 1-5.
Comprueba si el servicio está funcionando
Para comprobar si el servicio MySQL 5.7 se está ejecutando correctamente, ejecuta el siguiente comando:
# systemctl status mysql
En este punto, MySQL 5.7 tendrá una contraseña establecida para el usuario root. Sin embargo, aún querrás ejecutar mysql_secure_installation
para establecer la política de contraseñas, eliminar el inicio de sesión remoto de root y los usuarios anónimos, y eliminar la base de datos de prueba. Consulta "Proteger MySQL 8.0" para más detalles.
Instalar MySQL en macOS Big Sur
MySQL para macOS está disponible en varias formas diferentes. Dado que la mayoría de las veces MySQL se instala en macOS con fines de desarrollo, sólo mostraremos cómo instalarlo utilizando el instalador nativo de macOS (el archivo .dmg ). Ten en cuenta que también es posible utilizar el tarball para instalar MySQL en macOS.
Instalar MySQL 8
Primero, descarga el archivo .dmg de MySQL del sitio web de MySQL.
Consejo
Según Oracle, los paquetes de macOS Catalina funcionan para Big Sur.
Una vez descargado, ejecuta el paquete para iniciar el procedimiento de instalación, como se muestra en la Figura 1-6.
A continuación, debes autorizar la ejecución de MySQL, como se muestra en la Figura 1-7.
La Figura 1-8 muestra la pantalla de bienvenida del instalador.
La Figura 1-9 muestra el acuerdo de licencia. Incluso con el software de código abierto, es necesario aceptar los términos de la licencia; de lo contrario, no podrás continuar.
Ahora puedes definir la ubicación y personalizar la instalación, como se muestra en la Figura 1-10.
Vas a proceder con la instalación estándar. Tras hacer clic en Instalar, es posible que se te pida que introduzcas la contraseña de usuario de macOS para ejecutar la instalación con privilegios superiores, como muestra la Figura 1-11.
Una vez que hayas instalado MySQL, el proceso de instalación te pedirá que elijas la encriptación de la contraseña. Deberías utilizar el método de autenticación más reciente (la opción por defecto), como se muestra en la Figura 1-12, que es más seguro.
El último paso consiste en crear la contraseña de root e inicializar MySQL, como se muestra en la Figura 1-13.
Ya has instalado MySQL Server, pero no se carga (ni se inicia) por defecto. Para iniciarlo, abre Preferencias del Sistema y busca el icono de MySQL, como se muestra en la Figura 1-14.
Haz clic en el icono para abrir el panel MySQL. Deberías ver algo similar a la Figura 1-15.
Además de la opción obvia, que es iniciar el proceso MySQL, hay un panel de configuración (con la ubicación de los archivos MySQL) y una opción para reinicializar la base de datos (ya la inicializaste durante la instalación). Inicia el proceso MySQL. Puede que se te pida de nuevo la contraseña de administrador.
Con MySQL en marcha, es posible validar la conexión y confirmar que MySQL Server funciona correctamente. Puedes utilizar MySQL Workbench para comprobarlo, o instalar el cliente MySQL utilizando brew
:
$ brew install mysql-client
Una vez que hayas instalado el cliente MySQL, puedes conectarte con la contraseña que definiste en la Figura 1-13. En el terminal, ejecuta el siguiente comando:
$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.23 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type help; or \h for help. Type \c to clear the current input statement.
mysql
>
SELECT
@
@
version
;
+-----------+ | @@version | +-----------+ | 8.0.23 | +-----------+ 1 row in set (0.00 sec)
Instalar MySQL en Windows 10
Oracle proporciona un Instalador de MySQL para Windows para facilitar la instalación. Ten en cuenta que el Instalador de MySQL es una aplicación de 32 bits, pero puede instalar MySQL en binarios de 32 y 64 bits. Para iniciar el proceso de instalación, debes ejecutar el archivo instalador y elegir el tipo de instalación, como se muestra en la Figura 1-16.
Elige el tipo de configuración Predeterminado de Desarrollador y haz clic en Siguiente. No entraremos en detalles sobre las demás opciones porque no recomendamos utilizar MySQL para sistemas de producción, principalmente porque el ecosistema MySQL está desarrollado para Linux.
A continuación, el instalador comprueba si se cumplen todos los requisitos(Figura 1-17).
Haz clic en Ejecutar. Puede que sea necesario instalar Microsoft Visual C++(Figura 1-18).
Haz clic en Siguiente, y el instalador mostrará los productos que están listos para instalar(Figura 1-19).
Haz clic en Ejecutar y llegarás a la pantalla donde puedes configurar las propiedades de MySQL. Puedes utilizar la configuración por defecto para TCP/IP y el puerto del Protocolo X, como se muestra en la Figura 1-20, o puedes personalizarlos si lo deseas.
A continuación, elegirás el método de autenticación. Selecciona la versión más nueva que es más segura, como se muestra en la Figura 1-21.
A continuación, especifica la contraseña del usuario root y si quieres añadir usuarios adicionales a la base de datos MySQL, como se muestra en la Figura 1-22.
Con los usuarios configurados, define el nombre del servicio y el usuario que ejecutará el servicio, como se muestra en la Figura 1-23.
Cuando hagas clic en Siguiente, el instalador comenzará a configurar MySQL. Una vez que el instalador de MySQL finalice su ejecución, deberías ver algo parecido a la Figura 1-24.
Ahora tu servidor de base de datos está operativo. Como has seleccionado el perfil Desarrollador, el instalador realizará la instalación del Enrutador MySQL. El Enrutador MySQL no es esencial para esta configuración, y como no recomendamos Windows para producción, nos saltaremos esta parte. Nos sumergiremos en los detalles del router en "Router MySQL".
Ahora puedes validar tu servidor utilizando MySQL Workbench, como se muestra en la Figura 1-25. Deberías ver una opción de conexión MySQL.
Haz doble clic en la conexión y Workbench te pedirá que introduzcas la contraseña, como se muestra en la Figura 1-26.
Ya puedes empezar a utilizar MySQL en tu plataforma Windows, como se muestra en la Figura 1-27.
Contenido del directorio MySQL
Durante el proceso de instalación, MySQL crea todos los archivos necesarios para poner en marcha el servidor. MySQL almacena sus archivos en un directorio llamado directorio de datos. Los administradores de bases de datos (DBA) suelen referirse a él como datadir, que es el nombre del parámetro de MySQL que almacena la ruta a este directorio. La ubicación por defecto en las distribuciones Linux es /var/lib/mysql. Puedes comprobar su ubicación ejecutando el siguiente comando en la instancia de MySQL:
mysql
>
SELECT
@
@
datadir
;
+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
Archivos por defecto de MySQL 5.7
La siguiente lista describe brevemente los archivos y subdirectorios que suelen encontrarse en el directorio de datos:
- Los archivos de registro REDO
-
MySQL crea los archivos de registro de rehacer como ib_logfile0 y ib_logfile1 en el directorio de datos. Escribe en los archivos de registro de rehacer de forma circular, para que los archivos no crezcan más allá de su tamaño de configuración (configurado por
innodb_log_file_size
). Como en cualquier otro sistema de gestión de bases de datos relacionales (RDBMS) compatible con ACID, los archivos de rehacer son fundamentales para proporcionar durabilidad a los datos y capacidad de recuperación en caso de fallo.
- El archivo auto.cnf
-
MySQL 5.6 introdujo el archivo auto.cnf. Sólo tiene una sección
[auto]
que contiene una únicaserver_uuid
y un valor. Elserver_uuid
crea una firma única para el servidor, y la capa de replicación la utiliza para comunicarse con diferentes servidores para replicar datos.
Advertencia
MySQL crea automáticamente el archivo auto.cnf en el directorio de datos cuando se inicializa, y este archivo no debe modificarse. Explicamos los detalles en el Capítulo 9.
- Los archivos *.pem
-
En resumen, estos archivos permiten utilizar conexiones cifradas para la comunicación entre un cliente y el servidor MySQL. Las conexiones cifradas son una parte fundamental de la capa de seguridad de la red para evitar accesos no autorizados mientras los datos están en tránsito desde la aplicación al servidor MySQL. MySQL 5.7 habilita SSL por defecto y crea también los certificados. Sin embargo, es posible utilizar certificados proporcionados por diferentes autoridades de certificación (CA) del mercado.
- El subdirectorio performance_schema
-
El Esquema de Rendimiento de MySQL es una función para que permite monitorizar la ejecución del Servidor MySQL a bajo nivel durante el tiempo de ejecución. Cuando podemos utilizar el Esquema de Rendimiento para monitorizar una métrica concreta, decimos que MySQL tiene instrumentación. Por ejemplo, los instrumentos del Esquema de Rendimiento pueden proporcionar el número de usuariosconectados:
mysql
>
SELECT
*
FROM
performance_schema
.
users
;
+-----------------+---------------------+-------------------+ | USER | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS | +-----------------+---------------------+-------------------+ | NULL | 40 | 46 | | event_scheduler | 1 | 1 | | root | 0 | 1 | | rsandbox | 2 | 3 | | msandbox | 1 | 2 | +-----------------+---------------------+-------------------+ 5 rows in set (0.03 sec)
Nota
Mucha gente se sorprende al ver
NULL
en la columnauser
. El valorNULL
se utiliza para hilos internos o para una sesión de usuario que no ha podido autenticarse. Lo mismo ocurre con la columnahost
de la tablaperformance_schema.accounts
:mysql
>
SELECT
user
,
host
,
total_connections
AS
cxns
-
>
FROM
performance_schema
.
accounts
ORDER
BY
cxns
DESC
;
+-----------------+-----------+------+ | user | host | cxns | +-----------------+-----------+------+ | NULL | NULL | 46 | | rsandbox | localhost | 3 | | msandbox | localhost | 2 | | event_scheduler | localhost | 1 | | root | localhost | 1 | +-----------------+-----------+------+ 5 rows in set (0.00 sec)
Aunque la instrumentación existe desde MySQL 5.6, fue en MySQL 5.7 cuando obtuvo muchas mejoras y se convirtió en una parte fundamental de las herramientas del DBA para investigar y solucionar problemas a nivel de MySQL.
- El archivo ibtmp1
-
Cuando la aplicación necesita crear tablas temporales o MySQL necesita utilizar una tabla temporal interna en disco, MySQL las crea en un espacio de tablas temporales compartido. El comportamiento por defecto es crear un archivo de datos autoampliable llamado ibtmp1 que es ligeramente superior a 12 MB (su tamaño se controla con el parámetro
innodb_temp_data_file_path
). - El archivo ibdata1
-
El archivo ibdata1 es probablemente el archivo más famoso del ecosistema MySQL. En MySQL 5.7 y versiones anteriores, contiene los datos del diccionario de datos InnoDB, el búfer de doble escritura, el búfer de cambios y los registros de deshacer. También puede contener datos de tablas e índices si desactivamos la opción
innodb_file_per_table
. Cuandoinnodb_file_per_table
está activado, cada tabla de usuario tiene untablespace y un archivo dedicado. Ten en cuenta que es posible tener varios archivos ibdata en el directorio de datos de MySQL.
Nota
En MySQL 8.0, algunos de estos componentes se eliminaron de ibdata1 y se asignaron a archivos independientes. Los componentes restantes son la tabla de búfer de cambios y los datos de índice si las tablas secrean en el espacio de tablas del sistema (desactivando el innodb_file_per_table
).
- El archivo mysql.sock
-
Se trata de un archivo de socket Unix que el servidor utiliza para la comunicación con los clientes locales. Este archivo sólo existe cuando MySQL se está ejecutando, y eliminarlo o crearlo manualmente puede provocar problemas.
Nota
Un socket Unix es un mecanismo de comunicación entre procesos que permite el intercambio bidireccional de datos entre procesos que se ejecutan en la misma máquina. Los sockets IP (principalmente los sockets TCP/IP) son un mecanismo que permite la comunicación entre procesos a través de la red.
Puedes conectarte al Servidor MySQL en Linux utilizando dos métodos: el protocolo TCP o un socket. Por motivos de seguridad, si la aplicación y MySQL están en el mismo servidor, puedes desactivar las conexiones TCP remotas. Hay dos formas de hacerlo en el Servidor MySQL: establecer el protocolo bind-address
a 127.0.0.1
en lugar del valor por defecto *
(que acepta conexiones TCP/IP de todo el mundo), o modificar el parámetroskip-networking
, que desactiva las conexiones de red a MySQL.
- El subdirectorio mysql
-
El directorio mysql corresponde al esquema del sistema MySQL, que contiene la información del Servidor MySQL mientras se ejecuta. Por ejemplo, incluye información sobre los usuarios y sus privilegios, las tablas de zonas horarias y la replicación. Puedes ver los archivos nombrados según sus respectivos nombres de tabla con el comando
ls
:
# cd /var/lib/mysql # ls -l mysql/ -rw-r-----. 1 vinicius.grippa percona 8820 Feb 20 15:51 columns_priv.frm -rw-r-----. 1 vinicius.grippa percona 0 Feb 20 15:51 columns_priv.MYD -rw-r-----. 1 vinicius.grippa percona 4096 Feb 20 15:51 columns_priv.MYI -rw-r-----. 1 vinicius.grippa percona 9582 Feb 20 15:51 db.frm -rw-r-----. 1 vinicius.grippa percona 976 Feb 20 15:51 db.MYD -rw-r-----. 1 vinicius.grippa percona 5120 Feb 20 15:51 db.MYI -rw-r-----. 1 vinicius.grippa percona 65 Feb 20 15:51 db.opt -rw-r-----. 1 vinicius.grippa percona 8780 Feb 20 15:51 engine_cost.frm -rw-r-----. 1 vinicius.grippa percona 98304 Feb 20 15:51 engine_cost.ibd ... -rw-r-----. 1 vinicius.grippa percona 10816 Feb 20 15:51 user.frm -rw-r-----. 1 vinicius.grippa percona 1292 Feb 20 15:51 user.MYD -rw-r-----. 1 vinicius.grippa percona 4096 Feb 20 15:51 user.MYI
Archivos por defecto de MySQL 8.0
MySQL 8.0 introdujo algunos cambios en el núcleo de los datos estructura de directorios. Algunos de estos cambios están relacionados con la implementación del nuevo diccionario de datos, y otros con la mejora de la gestión de la base de datos. La siguiente lista describe los nuevos archivos y cambios:
- Los archivos del tablespace de deshacer
-
MySQL (InnoDB) utiliza archivos de deshacer para deshacer las transacciones de que necesitan ser revertidas y asegurar transacciones aisladas siempre que necesite realizar una lectura consistente.
A partir de MySQL 8.0, los archivos de registro de deshacer se separaron del tablespace del sistema(ibdata1) y se colocaron en el directorio de datos. También es posible establecer otra ubicación cambiando el parámetro
innodb_undo_directory
. - Los archivos .dblwr (introducidos en la versión 8.0.20)
-
El búfer de doble escritura se encarga de escribir en el disco las páginas arrastradas desde el conjunto de búferes antes de que MySQL escriba las páginas en los archivos de datos. Los nombres de archivo de doble escritura tienen el siguiente formato: #ib_<tamaño_de_página>_<número_de_archivo>.dblwr (por ejemplo, #ib_16384_0.dblwr, #ib_16384_0.dblwr). Es posible cambiar la ubicación de estos archivos modificando el parámetro
innodb_doublewrite_dir
.
- El archivo mysql.ibd (introducido en la versión 8.0)
-
En MySQL 5.7, las tablas de diccionario y las tablas de sistema almacenaban los datos y metadatos en el directorio mysql dentro del datadir. En MySQL 8.0, todo esto se almacena en el archivo mysql.ibd y está protegido por los mecanismos InnoDB para garantizar la coherencia.
Utilizar la interfaz de línea de comandos
El binario mysql es un sencillo intérprete de comandos SQL con funciones de edición de la línea de entrada . Su uso es sencillo (ya lo hemos utilizado unas cuantas veces durante el proceso de instalación). Para invocarlo, ejecuta el siguiente comando:
# mysql
Podemos ampliar su funcionalidad ejecutando consultas en él:
# mysql -uroot -pseKret -e "SHOW ENGINE INNODB STATUS\G"
Y podemos ejecutar comandos más avanzados, enlazándolos con otros comandos para realizar tareas más complejas. Por ejemplo, podemos extraer un volcado de unabase de datos, enviarlo a través de la red y restaurarlo en otro servidor MySQL en la misma línea de comandos:
# mysql -e "SHOW MASTER STATUS\G" && nice -5 mysqldump \ --all-databases --single-transaction -R --master-data=2 --flush-logs \ --log-error=/tmp/donor.log --verbose=TRUE | ssh mysql@192.168.0.1 mysql \ 1> /tmp/receiver.log 2>&1
MySQL 8.0 introdujo MySQL Shell, que es mucho más potente que su predecesor. MySQL Shell soporta los lenguajes JavaScript, Python y SQL, proporcionando capacidades de desarrollo y administración para el Servidor MySQL. Entraremos en más detalle sobre esto en "MySQL Shell".
Utilizar Docker
Con la llegada de la virtualización y su popularización con los servicios en la nube , han surgido muchas plataformas, entre ellas Docker. Nacido en 2013, Docker es una solución que ofrece una forma portátil y flexible de implementar software. Proporciona aislamiento de recursos mediante el uso de funciones de Linux como los cgroups y los espacios de nombres del núcleo.
Docker es útil para los DBA que a menudo necesitan instalar una versión específica de MySQL, MariaDB o Percona Server para MySQL para realizar algunos experimentos. Con Docker, es posible implementar una instancia MySQL en segundos para realizar algunas pruebas. Una vez terminadas las pruebas, puedes destruir la instancia y liberar los recursos del sistema operativo para otras tareas. Todos los procesos de despliegue de una máquina virtual (VM), instalación de paquetes y configuración de la base de datos son más sencillos cuando se utiliza Docker.
Instalar Docker
Una ventaja de utilizar Docker es que una vez que el servicio está en marcha, los comandos son los mismos en todos los sistemas operativos. Que los comandos sean los mismos significa que la curva de aprendizaje para utilizar Docker es más rápida en comparación con el aprendizaje de diferentes versiones de Linux como CentOS y Ubuntu, por ejemplo.
El proceso de instalación de Docker es, en algunos aspectos, similar al de instalación de MySQL. Para Windows y macOS basta con instalar los binarios, y después el servicio está en marcha. Para los sistemas operativos basados en Linux sin interfaz gráfica, el proceso requiere configurar el repositorio.
Instalar Docker en CentOS 7
Los paquetes de CentOS para Docker son, en general, más antiguos que los disponibles para RHEL y en los repositorios oficiales de Docker. En el momento de escribir estas líneas, la versión de Docker que proporcionan los repositorios normales de CentOS es la 1.13.1, mientras quela versión estable del upstream es la 20.10.3. No hay diferencia a efectos de este libro, pero siempre recomendamos utilizar la última versión para entornos de producción.
Ejecuta el siguiente comando para instalar el paquete Docker desde el repositorio CentOS por defecto:
# yum install docker -y
Si quieres instalar Docker desde el repositorio upstream para asegurarte de que utilizas la última versión, sigue estos pasos:
-
Instala
yum-utils
para activar el comandoyum-config-manager
:# yum install yum-utils -y
-
Utiliza
yum-config-manager
para añadir el repositorio docker-ce:# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
Instala los paquetes necesarios:
# yum install docker-ce docker-ce-cli containerd.io -y
-
Inicia el servicio Docker:
# systemctl start docker
-
Activa el autoarranque del servicio Docker tras reiniciar el sistema:
# systemctl enable --now docker
-
Para validar si el servicio Docker se está ejecutando, ejecuta el comando
systemctl status
:# systemctl status docker
-
Para verificar que Docker Engine está instalado correctamente, puedes ejecutar el contenedor hello-world:
# docker run hello-world
Instalar Docker en Ubuntu 20.04 (Focal Fossa)
Para instalar la última versión de Docker desde el repositorio upstream, elimina primero cualquier versión anterior de Docker (llamada docker, docker.io o docker-engine). Desinstálalas con este comando:
# apt-get remove -y docker docker-engine docker.io containerd runc
Con el repositorio por defecto eliminado, puedes iniciar el proceso de instalación:
-
Asegúrate de que Ubuntu está actualizado con este comando:
# apt-get update -y
-
Instala paquetes para permitir que apt utilice un repositorio a través de HTTPS:
# apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
-
A continuación, añade la clave GPG oficial de Docker:
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo \ apt-key add -
-
Con la clave en su sitio, añade el repositorio estable de Docker:
# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
-
Ahora, utiliza el comando
apt
para instalar los paquetes Docker:# apt-get install -y docker-ce docker-ce-cli containerd.io
-
Ubuntu iniciará el servicio por ti, pero puedes comprobarlo ejecutando este comando:
# systemctl status docker
-
Para hacer que el servicio Docker se inicie automáticamente cuando se reinicie el SO, utiliza:
# systemctl enable --now docker
-
Comprueba la versión de Docker con la que instalaste:
# docker --version
-
Para verificar que Docker Engine está instalado correctamente, puedes ejecutar el contenedor hello-world:
# docker run hello-world
Implementación del contenedor MySQL
Una vez que tengas el motor Docker instalado y en funcionamiento, el siguiente paso es la implementación del contenedor Docker MySQL.
Advertencia
Hemos diseñado las siguientes instrucciones para que una instancia de prueba funcione rápida y fácilmente; ¡no las utilices para unaimplementación de producción!
Para implementar la última versión de MySQL con Docker, ejecuta este comando:
# docker run --name mysql-latest \ -p 3306:3306 -p 33060:33060 \ -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD='learning_mysql' \ -d mysql/mysql-server:latest
Docker Engine lanzará la última versión de la instancia MySQL y será accesible remotamente desde cualquier lugar con la contraseña de root especificada. Instalar MySQL con Docker significa que no tienes acceso a ninguna de las herramientas, utilidades o bibliotecas estándar disponibles en un host tradicional (bare metal o VM). Tendrás que implementar estas herramientas por separado o utilizar los comandos incluidos en la imagen Docker si los necesitas.
A continuación, conéctate al contenedor MySQL utilizando el cliente MySQL:
# docker exec -it mysql-latest mysql -uroot -plearning_mysql
Como has mapeado el puerto TCP 3306 en el contenedor al puerto 3306 en el host Docker con el parámetro -p 3306:3306
, puedes conectarte a la base de datos MySQL desde cualquier cliente MySQL (Workbench, MySQL Shell) disponible que pueda alcanzar el host (nombre de host o IP) y ese puerto.
Veamos algunos comandos para gestionar el contenedor.
Para detener el contenedor Docker MySQL, ejecuta:
# docker stop mysql-latest
No intentes utilizar docker run
para iniciar de nuevo el contenedor. En su lugar, utiliza esto:
# docker start mysql-latest
Para investigar un problema -por ejemplo, si el contenedor no se inicia- accede a sus registros utilizando este comando:
# docker logs mysql-latest
Para eliminar el contenedor Docker que has creado, ejecuta
# docker stop mysql-latest # docker rm mysql-latest
Para comprobar cuáles y cuántos contenedores Docker se están ejecutando en el host, utiliza
# docker ps
Es posible personalizar la parametrización de MySQL utilizando opciones de la línea de comandos de Docker Engine. Para configurar el tamaño del buffer pool de InnoDB y el método de descarga, ejecuta lo siguiente:
# docker run --name mysql-latest \ -p 3306:3306 -p 33060:33060 \ -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD='strongpassword' \ -d mysql/mysql-server:latest \ --innodb_buffer_pool_size=256M \ --innodb_flush_method=O_DIRECT
Para ejecutar una versión de MySQL distinta de la última, comprueba primero que está disponible en Docker Hub. Por ejemplo, supongamos que quieres ejecutar MySQL 5.7.31. El primer paso es comprobar la lista oficial de Imágenes Docker de MySQL en Docker Hub para ver si existe.
Una vez hayas confirmado su existencia, ejecútalo con el siguiente comando:
# docker run --name mysql-5.7.31 \ -p 3307:3306 -p 33061:33060 \ -e MYSQL_ROOT_HOST=% -e \ MYSQL_ROOT_PASSWORD='learning_mysql' \ -d mysql/mysql-server:5.7.31
Es posible ejecutar varias instancias Docker de MySQL al mismo tiempo, pero un problema potencial son los conflictos de puertos TCP. En el ejemplo anterior, fíjate en que hemos mapeado diferentes puertos host para el contenedor mysql-5.7.31 (3307 y 33061). Además, el nombre del contenedor debe ser único.
Implementación de contenedores MariaDB y Percona Server
Sigue los mismos pasos descritos en la sección anterior para desplegar un contenedor MySQL para desplegar un contenedor MariaDB o Percona Server. La principal diferencia es que utilizan imágenes Docker diferentes y tienen sus propios repositorios oficiales.
Para implementar un contenedor MariaDB, ejecuta:
# docker run --name maria-latest \ -p 3308:3306 \ -e MYSQL_ROOT_HOST=% -e \ MYSQL_ROOT_PASSWORD='learning_mysql' \ -d mariadb:latest
Y para Percona Server, ejecuta
# docker run --name ps-latest \ -p 3309:3306 -p 33063:33060 \ -e MYSQL_ROOT_HOST=% -e \ MYSQL_ROOT_PASSWORD='learning_mysql' \ -d percona/percona-server:latest \ --innodb_buffer_pool_size=256M \ --innodb_flush_method=O_DIRECT
Nota
Estamos asignando puertos diferentes para MariaDB (-p 3308:3306
) y Percona (-p 3309:3306
) porque estamos implementando todos los contenedores en el mismo host:
# docker ps
CONTAINER ID IMAGE 5e487dd41c3e percona/percona-server:latest COMMAND CREATED STATUS "/docker-entrypoint..." About a minute ago Up 51 seconds "docker-entrypoint..." 2 minutes ago Up 2 minutes PORTS NAMES 0.0.0.0:3309->3306/tcp, ps-latest 0.0.0.0:33063->33060/tcp f5a217f1537b mariadb:latest 0.0.0.0:3308->3306/tcp maria-latest
Si estás implementando un único contenedor, puedes utilizar el puerto 3306 o cualquier puerto personalizado que desees utilizar.
Utilizar Sandboxes
En el desarrollo de software, un sandbox es un entorno de pruebas que aísla los cambios de código y permite la experimentación y las pruebas antes de su implementación en producción. Los DBA utilizan principalmente los sandboxes para probar nuevas versiones de software, pruebas de rendimiento y análisis de errores, y los datos presentes en MySQL son desechables.
Nota
En el contexto de las bases de datos MySQL es frecuente oír los términos maestro y esclavo en . El origen de estas palabras es claramente negativo. Por ello, Oracle, Percona y MariaDB han decidido cambiar esta terminología y utilizar en su lugar fuente y réplica. En este libro, utilizaremos ambos conjuntos de términos porque te encontrarás con los dos, pero ten en cuenta que estas empresas implementarán la siguiente terminología en las próximas versiones:
Antiguo |
Nuevo |
maestro |
fuente |
esclavo |
réplica |
lista negra |
lista de bloqueo |
lista blanca |
allowlist |
En 2018, Giuseppe Maxia presentó DBdeployer, una herramienta de que proporciona una forma fácil y rápida de implementar MySQL y sus bifurcaciones. Soporta diversas topologías de MySQL, como maestro/esclavo (fuente/replica), maestro/maestro (fuente/fuente), Galera Cluster y Replicación de Grupos.
Instalar DBdeployer
La herramienta está desarrollada en lenguaje Go y funciona con macOS y Linux (Ubuntu y CentOS), y se proporcionan ejecutables independientes. Consigue la última versión aquí:
# wget https://github.com/datacharmer/dbdeployer/releases/download/v1.58.2/ \ dbdeployer-1.58.2.linux.tar.gz # tar -xvf dbdeployer-1.58.2.linux.tar.gz # mv dbdeployer-1.58.2.linux /usr/local/bin/dbdeployer
Si tienes tu directorio /usr/local/bin/ en la variable $PATH
, ahora deberías poder ejecutar los comandos dbdeployer
:
# dbdeployer --version dbdeployer version 1.58.2
Utilizar DBdeployer
El primer paso para utilizar DBdeployer es descargar el binario de MySQL que quieras ejecutar y descomprimirlo en el directorio donde almacenes tus binarios. Nosotros utilizaremos Linux - Generic tarballs ya que son compatibles con la mayoría de las distribuciones de Linux, y almacenaremos nuestros binarios en el directorio /opt/mysql:
# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/ \ mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz # mkdir /opt/mysql # dbdeployer --sandbox-binary=/opt/mysql/ unpack \ mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
El comando unpack
extraerá y moverá los archivos al directorio especificado. El resultado esperado de esta operación es:
# dbdeployer --sandbox-binary=/opt/mysql/ unpack
mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz Unpacking tarball mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz to /opt/mysql/8.0.11 .........100.........200........289 Renaming directory /opt/mysql/mysql-8.0.11-linux-glibc2.12-x86_64 to /opt/mysql/8.0.11
Ahora podemos utilizar el siguiente comando para crear un nuevo sandbox MySQL independiente con el binario recién extraído:
# dbdeployer --sandbox-binary=/opt/mysql/ deploy single 8.0.11
Y podemos observar cómo DBdeployer inicializa MySQL:
# dbdeployer --sandbox-binary=/opt/mysql/ deploy single 8.0.11
Creating directory /root/sandboxes Database installed in $HOME/sandboxes/msb_8_0_11 run 'dbdeployer usage single' for basic instructions' . sandbox server started
Confirma que MySQL se está ejecutando con el comando ps
:
# ps -ef | grep mysql
root 4249 1 0 20:18 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/root/sandboxes/msb_8_0_11/my.sandbox.cnf root 4470 4249 1 20:18 pts/0 00:00:00 /opt/mysql/8.0.11/bin/mysqld --defaults-file=/root/sandboxes/msb_8_0_11/my.sandbox.cnf --basedir=/opt/mysql/8.0.11 --datadir=/root/sandboxes/msb_8_0_11/data --plugin-dir=/opt/mysql/8.0.11/lib/plugin --user=root --log-error=/root/sandboxes/msb_8_0_11/data/msandbox.err --pid-file=/root/sandboxes/msb_8_0_11/data/mysql_sandbox8011.pid --socket=/tmp/mysql_sandbox8011.sock --port=8011 root 4527 3836 0 20:18 pts/0 00:00:00 grep --color=auto mysql
Ahora podemos conectarnos a MySQL utilizando el comando use
de DBdeployer:
# cd sandboxes/msb_8_0_11/ # ./use
o utilizando las credenciales raíz por defecto:
# mysql -uroot -pmsandbox -h 127.0.0.1 -P 8011
Nota
Obtuvimos la información del puerto del comando anterior ps
. Recuerda que hay dos formas de conectarse a MySQL: mediante TCP/IP o utilizando un socket. También podemos obtener la ubicación del archivo de socket de la salida del comando ps
y conectarnos con él, como se muestra aquí:
# mysql -uroot -pmsandbox -S/tmp/mysql_sandbox8011.sock
Si queremos configurar un entorno de replicación con una topología fuente/réplica, podemos hacerlo con la siguiente línea de comandos:
# dbdeployer --sandbox-binary=/opt/mysql/ deploy replication 8.0.11
Y tendremos tres procesos mysqld
en marcha:
# ps -ef | grep mysql
root 4673 1 0 20:26 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/root/sandboxes/rsandbox_8_0_11/master/my.sandbox.cnf root 4942 4673 1 20:26 pts/0 00:00:00 /opt/mysql/8.0.11/bin/mysqld ... --pid-file=/root/sandboxes/rsandbox_8_0_11/master/data/mysql_sandbox201 12.pid --socket=/tmp/mysql_sandbox20112.sock --port=20112 root 5051 1 0 20:26 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/root/sandboxes/rsandbox_8_0_11/node1/my.sandbox.cnf root 5320 5051 1 20:26 pts/0 00:00:00 /opt/mysql/8.0.11/bin/mysqld --defaults-file=/root/sandboxes/rsandbox_8_0_11/node1/my.sandbox.cnf ... --pid-file=/root/sandboxes/rsandbox_8_0_11/node1/data/mysql_sandbox2011 3.pid --socket=/tmp/mysql_sandbox20113.sock --port=20113 root 5415 1 0 20:26 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/root/sandboxes/rsandbox_8_0_11/node2/my.sandbox.cnf root 5684 5415 1 20:26 pts/0 00:00:00 /opt/mysql/8.0.11/bin/mysqld ... --pid-file=/root/sandboxes/rsandbox_8_0_11/node2/data/mysql_sandbox2011 4.pid --socket=/tmp/mysql_sandbox20114.sock --port=20114
Otra topología que DBdeployer puede configurar es la Replicación en Grupo. Para este ejemplo, definiremos un base-port
. Al hacerlo, ordenaremos a DBdeployer que configure nuestros servidores a partir del puerto 49007:
# dbdeployer deploy --topology=group replication --sandbox-binary=/opt/mysql/\ 8.0.11 --base-port=49007
Veamos ahora un ejemplo de implementación de Galera Cluster utilizando Percona XtraDB Cluster 5.7.32. Indicaremos el base-port
, y queremos que nuestros nodos se configuren con la opciónlog-slave-updates
:
# wget https://downloads.percona.com/downloads/Percona-XtraDB-Cluster-57/\ Percona-XtraDB-Cluster-5.7.32-31.47/binary/tarball/Percona-XtraDB-Cluster-\ 5.7.32-rel35-47.1.Linux.x86_64.glibc2.17-debug.tar.gz # dbdeployer --sandbox-binary=/opt/mysql/ unpack\ Percona-XtraDB-Cluster-5.7.32-rel35-47.1.Linux.x86_64.glibc2.17-debug.tar.gz # dbdeployer deploy --topology=pxc replication\ --sandbox-binary=/opt/mysql/ 5.7.32 --base-port=45007 -c log-slave-updates
Como hemos visto, es posible personalizar los parámetros de MySQL. Una opción interesante es habilitar la replicación MySQL utilizando identificadores globales de transacción, o GTIDs (hablaremos de los GTIDs con más detalle en el Capítulo 13):
# dbdeployer deploy replication --sandbox-binary=/opt/mysql/ 5.7.32 --gtid
Nuestro último ejemplo muestra que es posible implementar varias versiones independientes a la vez: aquí creamos cinco instancias independientes:
# dbdeployer deploy multiple --sandbox-binary=/opt/mysql/ 5.7.32 -n 5
Los ejemplos anteriores son sólo una pequeña muestra de las capacidades de DBdeployer. La documentación completa está disponible en GitHub. Otra opción para comprender el universo de posibilidades es utilizar --help
en la línea de comandos:
# dbdeployer --help
dbdeployer makes MySQL server installation an easy task. Runs single, multiple, and replicated sandboxes. Usage: dbdeployer [command] Available Commands: admin sandbox management tasks cookbook Shows dbdeployer samples defaults tasks related to dbdeployer defaults delete delete an installed sandbox delete-binaries delete an expanded tarball deploy deploy sandboxes downloads Manages remote tarballs export Exports the command structure in JSON format global Runs a given command in every sandbox help Help about any command import imports one or more MySQL servers into a sandbox info Shows information about dbdeployer environment samples sandboxes List installed sandboxes unpack unpack a tarball into the binary directory update Gets dbdeployer newest version usage Shows usage of installed sandboxes versions List available versions Flags: --config string configuration file (default "/root/.dbdeployer/config.json") -h, --help help for dbdeployer --sandbox-binary string Binary repository (default "/root/opt/mysql") --sandbox-home string Sandbox deployment directory (default "/root/sandboxes") --shell-path string Which shell to use for generated scripts (default "/usr/bin/bash") --skip-library-check Skip check for needed libraries (may cause nasty errors) --version version for dbdeployer Use "dbdeployer [command] --help" for more information about a command.
Actualizar el servidor MySQL
Si la pregunta más común que surge es sobre la replicación, la segunda más común es sobre cómo actualizar una instancia MySQL. Si el procedimiento no está bien probado antes de realizarlo en producción, las posibilidades de tener un problema son altas. Hay dos tipos de actualizaciones que puedes realizar:
-
Una actualización mayor en MySQL sería cambiar las versiones de 5.6 a 5.7 o de 5.7 a 8.0. Una actualización de este tipo es más complicada y compleja que una actualización menor, porque los cambios en la arquitectura son más sustanciales. Por ejemplo, un cambio considerable en MySQL 8.0 consistió en modificar el diccionario de datos, que ahora es transaccional y está encapsulado por InnoDB.
-
Una actualización menor sería cambiar de MySQL 5.7.29 a 5.7.30 o de MySQL 8.0.22 a MySQL 8.0.23. La mayoría de las veces, tendrás que instalar la nueva versión utilizando el gestor de paquetes de tu distribución. Una actualización menor es más sencilla que una mayor porque no implica cambios en la arquitectura. Las modificaciones se centran en corregir errores, mejorar el rendimiento y optimizar el código.
Para empezar a planificar una actualización, elige primero entre dos estrategias. Éstas son las estrategias recomendadas según la documentación y son las que utilizamos nosotros:
- Mejora in situ
-
Esto implica cerrar MySQL, sustituir los antiguos binarios o paquetes de MySQL por los nuevos, reiniciar MySQL en el directorio de datos existente y ejecutar
mysql_upgrade
.
Nota
A partir de MySQL 8.0.16, el binario mysql_upgrade está obsoleto, y el propio servidor MySQL ejecuta su funcionalidad (puedes pensar en ello como una "actualización del servidor"). MySQL añadió este cambio junto con la actualización del diccionario de datos (actualización DD), que es un proceso para actualizar las definiciones de las tablas del diccionario de datos. Las ventajas del nuevo proceso incluyen:
-
Mejoras más rápidas
-
Proceso más sencillo
-
Mayor seguridad
-
Reducción significativa de los pasos de actualización
-
Más fácilmente automatizable
-
Sin reinicios
-
Plug and play
- Actualización lógica
-
Esto implica exportar los datos en formato SQL desde la versión antigua de MySQL utilizando una utilidad de copia de seguridad o de exportación como mysqldump o mysqlpump, instalar la nueva versión de MySQL y aplicar los datos SQL a la nueva versión de MySQL. En otras palabras, este proceso implica reconstruir todo el diccionario de datos y los datos de usuario. Una actualización lógica suele llevar más tiempo que una actualización in situ.
Independientemente de la estrategia que elijas, es esencial establecer una estrategia de reversión en caso de que algo vaya mal. La estrategia de reversión variará en función del plan de actualización que elijas, y el tamaño de la base de datos y la topología presente (si utilizas réplicas o Galera Cluster, por ejemplo) influirán en esta decisión.
Aquí tienes algunos puntos adicionales que debes tener en cuenta al planificar una actualización:
-
Se admite la actualización de MySQL 5.7 a 8.0. Sin embargo, la actualización sólo se admite entre versiones GA. Para MySQL 8.0, es necesario que actualices desde una versión MySQL 5.7 GA (5.7.9 o superior). No se admiten actualizaciones desde versiones de MySQL 5.7 que no sean GA.
-
Se recomienda actualizar a la última versión antes de actualizar a la siguiente. Por ejemplo, actualiza a la última versión de MySQL 5.7 antes de actualizar a MySQL 8.0.
-
No se admiten actualizaciones que se salten versiones. Por ejemplo, no se admite la actualización directa de MySQL 5.6 a 8.0.
Nota
Según nuestra experiencia, pasar de MySQL 5.6 a MySQL 5.7 es la actualización que causa más problemas de rendimiento, especialmente si la aplicación utiliza tablas derivadas (consulta "Consultas anidadas en la cláusula FROM"). MySQL 5.7 modificó la variable de sistemaoptimizer_switch
, activando por defecto la opciónderived_merge
, y esto puede perjudicar el rendimiento de las consultas.
Otro cambio que complica las cosas es que MySQL 5.7 implementa el cifrado de red por defecto (SSL). Las aplicaciones que no utilizaban SSL en MySQL 5.6 pueden sufrir un impacto sustancial en el rendimiento.
Finalmente, MySQL 5.7 cambió el sync_binlog
por defecto al modo síncrono. Este modo es el más seguro, pero puede perjudicar el rendimiento debido al mayor número de escrituras en disco.
Veamos un ejemplo de actualización de MySQL 5.7 upstream a MySQL 8.0 upstream utilizando el método in-place:
-
Detén el servicio MySQL. Realiza un apagado limpio utilizando
systemctl
:# systemctl stop mysqld
-
Elimina los binarios antiguos:
# yum erase mysql-community -y
Este proceso sólo elimina los binarios y no toca el datadir (ver "El contenido del directorio MySQL").
-
Sigue los pasos habituales para el proceso de instalación (consulta "Instalación de MySQL en Linux"). Por ejemplo, para utilizar MySQL 8.0 Versión Comunidad en CentOS 7 utilizando
yum
:# yum-config-manager --enable mysql80-community
-
Instala los nuevos binarios:
# yum install mysql-community-server -y
-
Inicia el servicio MySQL:
# systemctl start mysqld
Podemos observar en los registros que MySQL actualizó el diccionario de datos y que ahora estamos ejecutando MySQL 8.0.21:
# tail -f /var/log/mysqld.log
2020-08-09T21:20:10.356938Z 2 [System] [MY-011003] [Server] Finished populating Data Dictionary tables with data. 2020-08-09T21:20:11.734091Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80021' started. 2020-08-09T21:20:17.342682Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80021' completed. ... 2020-08-09T21:20:17.463685Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
Nota
Te recomendamos encarecidamente que antes de actualizar MySQL consultes las notas de la versión. Contienen un resumen de los cambios realizados y las correcciones de errores. Las notas de la versión están disponibles para MySQL upstream, Percona Server y MariaDB.
Una pregunta habitual es si es seguro actualizar a la última versión principal. La respuesta es... depende. Como ocurre con cualquier producto nuevo en la industria, los primeros en adoptarlo tienden a beneficiarse de las nuevas funciones, pero también son probadores, y pueden descubrir y verse afectados por nuevos errores. Cuando se lanzó MySQL 8.0, nuestra recomendación fue esperar tres versiones menores antes de plantearse el cambio. La regla de oro de este libro es probarlo todo por adelantado antes de ejecutar el siguiente paso. Si aprendes precisamente eso de este libro, consideraremos cumplida nuestra misión.
Get Aprender MySQL, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.