En esta entrada vamos a ver cómo instalar MySQL en CentOS 7 paso a paso para poder trabajar con este motor de bases de datos relacionales. Imprescindible en tu servidor o VPS CentOS ya que es la base de muchas aplicaciones complejas como los CMS más populares, etc. Si te lo estás preguntando, trataremos con la implementación oficial de Oracle, es decir, instalaremos MySQL Server 100% original.
Contenido
Antes de instalar MySQL en CentOS 7
Para seguir esta guía de instalación y configuración de MySQL en CentOS 7 partiremos de estos requisitos mínimos:
- Una instalación de CentOS 7 actualizada.
- Un usuario con permisos de sudo o el mismo root.
- Conexión a Internet.
Necesitaremos además algunas utilidades del sistema, que podemos obtener desde los repositorios de CentOS 7, por lo que actualizamos las listas de paquetes:
~$ sudo yum update
Y las instalamos:
~$ sudo yum install -y yum-utils
Cómo instalar MySQL en CentOS 7
Si has intentado instalar MySQL en CentOS 7 desde los repositorios de la distribución es posible que hayas comprobado que sólo está disponible la implementación libre de MariaDB. A pesar de que intentes instalar el paquete mysql con yum el paquete que se instala realmente es mariadb.
¿Qué podemos hacer? Es sencillo. En la página de descargas de la comunidad de MySQL nos ofrecen paquetes para actualizar los repositorios de diversas distribuciones de Linux añadiendo el repositorio oficial de MySQL.
Entre ellos está el repositorio para Yum que es la herramienta que usan distribuciones como Red Hat, Fedora y, lo que nos interesa en este caso, CentOS.
Entre los paquetes que aparecen disponibles no existe uno específico para CentOS 7, pero no hay problema. Elegiremos el paquete para Red Hat 7 y nos llevará a una pantalla donde nos da la opción de registrarnos en MySQL o entrar en nuestra cuenta.
No es necesario ni registrarse ni entrar en nuestra cuenta (si la tenemos), ya que más abajo tenemos un enlace «No thanks, just start my dowload«. Podemos pinchar para descargar, o copiar el enlace para pegarlo en consola, que es lo que haremos en este tutorial.
Con el comando yum instalaremos directamente este paquete .rpm desde Internet:
~$ sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
Ahora tenemos más repositorios desde donde vamos a poder descargar MySQL 8 para CentOS 7 a través de yum. Concretamente son 3 repositorios que podemos ver fácilmente listando los repositorios activos y filtrando por los que contengan la palabra mysql:
~$ sudo yum repolist enabled |grep mysql mysql-connectors-community/x86_64 MySQL Connectors Community 230 mysql-tools-community/x86_64 MySQL Tools Community 138 mysql80-community/x86_64 MySQL 8.0 Community Server 321
Podemos ver que está activado por defecto el repositorio para MySQL Server 8.0, pero disponemos también de las versiones 5.5, 5.6 y 5.7. Si quieres ver qué otros repositorios de MySQL podrías activar échales un vistazo:
~$ sudo yum repolist disabled |grep -i mysql mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - Source mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - Source mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - Source mysql-connectors-community-source MySQL Connectors Community - Source mysql-tools-community-source MySQL Tools Community - Source mysql-tools-preview/x86_64 MySQL Tools Preview mysql-tools-preview-source MySQL Tools Preview - Source mysql57-community/x86_64 MySQL 5.7 Community Server mysql57-community-source MySQL 5.7 Community Server - Source mysql80-community-source MySQL 8.0 Community Server - Source
MySQL Server 8 y CentOS 7 32 bits
En el caso de estar trabajando sobre CentOS 7 32 bits no hay versiones de MySQL Server 8.0, por lo que debemos activar alguna versión anterior, como la 5.7:
~$ sudo yum-config-manager --enable mysql57-community
Y desactivar la 8.0:
~$ sudo yum-config-manager --disable mysql80-community
Cómo instalar MySQL Community Server en CentOS 7
Sea cual sea la versión elegida, el paquete que debemos instalar es mysql-community-server, y yum se encargará de descargarlo e instalarlo junto a todas sus dependencias:
~$ sudo yum install -y mysql-community-server
Tras este proceso se crea un nuevo servicio en CentOS 7, llamado mysqld.service o simplemente mysqld. Pero este servicio no está iniciado ni activado para arrancar cada vez que inicie CentOS 7. Arrancamos MySQL Server por primera vez:
~$ sudo systemctl start mysqld
Y también podemos activar MySQL Server para que inicie automáticamente cada vez que arranque CentOS 7:
~$ sudo systemctl enable mysqld
Activar el servicio de MySQL para que arranque junto al sistema, no lo inicia; hay que iniciarlo manualmente para tenerlo disponible de inmediato sin reiniciar el sistema.
Para comprobar en cualquier momento que MySQL Server está funcionando en CentOS 7 podemos usar el comando systemctl status mysqld
:
Para comprobar la versión exacta de MySQL Server que hemos instalado en CentOS 7 basta con comprobarlo desde consola con el comando mysqld -V
:
~$ mysqld -V /usr/sbin/mysqld Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
Ya tenemos instalado e iniciado MySQL Server en CentOS 7, y podemos empezar a trabajar con el servicio.
Cómo configurar MySQL en CentOS 7
Una vez funcionando el servidor MysQL en nuestro sistema CentOS 7 es hora de retocar su configuración para dejarla con unos valores óptimos para nuestras necesidades de trabajo.
Cómo encontrar la contraseña inicial de root en MySQL Server
Una particularidad de MySQL Server para CentOS 7 es que la cuenta de root de MySQL se crea con una contraseña temporal aleatoria que se guarda en los logs del servicio mysqld. Para encontrar dicha contraseña tendremos que revisar los logs o filtrarlos fácilmente desde consola:
~$ sudo grep 'temporary password' /var/log/mysqld.log ... 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: gBdv!=b./53i
Cómo hacer más segura la instalación de MySQL en CentOS 7
Habiendo localizado la contraseña temporal, enseguida la vamos a cambiar, ya que esta es una de las tareas que realiza el script mysql_secure_installation que ejecutaremos a continuación:
~$ sudo mysql_secure_installation
Este script interactivo en primer lugar nos solicita la contraseña temporal de root para acto seguido obligarnos a cambiarla. La nueva contraseña debe ser fuerte, por lo que debe contener caracteres alfanuméricos, alguna mayúscula y algún carácter especial (fíjate en la propia contraseña temporal).
Además, se nos preguntará si deseamos:
- Eliminar los usuarios anónimos.
- Desactivar el acceso remoto para root.
- Eliminar la base de datos de pruebas.
- Actualizar los permisos del sistema de bases de datos.
Para una instalación lo más segura posible lo recomendable es contestar afirmativamente a todas estas cuestiones.
Una vez terminado este paso podemos comprobar que todo funciona conectando desde consola con el cliente mysql y el usuario root:
~$ mysql -u root -p
Se nos solicitará la nueva contraseña y accederemos a la interfaz del cliente. Podremos cerrar la conexión con el comando exit.
Cómo configurar acceso remoto a MySQL en CentOS 7
Para acceder remotamente a MySQL Server, por ejemplo desde MySQL Workbench, tenemos que seguir dos pasos:
- Permitir el acceso remoto en la propia configuración de MySQL Server
- Configurar el acceso a través del firewall de CentOS 7
Configurar MySQL Server para acceso remoto
Si te interesa esta posibilidad, las buenas noticias son que MySQL Server en CentOS 7 permite el acceso remoto en su configuración por defecto.
El archivo de configuración principal del servicio MySQL en CentOS 7 es /etc/my.cnf.
~$ sudo nano /etc/my.cnf
Si lo editamos en principio no deberíamos encontrar la directiva bind-address de la sección [mysqld]. Cuando esta directiva no aparece en el archivo de configuración, bind-address toma un valor por defecto que es 0.0.0.0, lo que significa que el servicio de MySQL escucha peticiones a través de todas las interfaces de red del sistema, que es lo que queremos para un acceso remoto.
Sin embargo, si lo que queremos es desactivar el acceso remoto a MySQL Server, podríamos editar /etc/my.cnf y añadir la directiva bind-address con el valor adecuado para que sólo se escuchen peticiones desde la propia máquina, o localhost:
... [mysqld] ... bind-address=127.0.0.1 ...
Tras lo cual debemos reiniciar el servicio para que los cambios tomen efecto. A diferencia de otros servicios, MySQL Server no dispone de la opción de recargar la configuración sin reiniciar el servicio.
~$ sudo systemctl restart mysqld
MySQL Server no dispone de la opción de recargar su configuración. Es necesario reiniciar el servicio.
Configurar el nivel de seguridad de la política de contraseñas de MySQL en CentOS 7
Por defecto MySQL utiliza un nivel alto de seguridad en su política de contraseñas, lo que exigirá contraseñas fuertes a la hora de crear usuarios o modificar sus credenciales.
Para modificar dicho nivel de seguridad editaremos el archivo de configuración de MySQL en CentOS 7:
~$ sudo nano /etc/my.cnf
Dentro de la sección mysqld añadiremos la directiva validate_password.policy con el valor del nivel de seguridad que nos interese (LOW, MEDIUM o HIGH):
... [mysqld] ... validate_password.policy = LOW ...
Una vez guardados los cambios en el archivo habrá que reiniciar el servicio MySQL.
Configurar el firewall de CentOS 7 para el acceso remoto de MySQL Server
CentOS 7 viene con el firewall activo por defecto, por lo que aunque tengamos configurado el servicio MySQL para recibir conexiones remotas, el firewall no las permitirá. Debemos, por tanto, configurar el firewall surgiendo dos posibilidades.
Acceso remoto permanente
En esta situación permitiremos las conexiones entrantes a MySQL Server todo el tiempo, incluso después de reiniciar el sistema. En ambientes controlados o seguros puede ser una opción bastante cómoda.
Para ello configuraremos el firewall de CentOS 7 así:
~$ sudo firewall-cmd --permanent --add-service=mysql
Y aplicaremos la nueva configuración:
~$ sudo firewall-cmd --reload
Y quedará abierto el firewall para las conexiones remotas hacia el servidor MySQL.
Acceso remoto temporal
En esta situación, permitiremos el acceso remoto a MySQL Server antes de realizar la conexión. Terminada la conexión remota, cerraremos el acceso.
Para ello, antes de conectar al servicio MySQL, a través de un acceso remoto por consola configuraremos el firewall de forma temporal:
~$ sudo firewall-cmd --add-service=mysql success ~$ sudo firewall-cmd --reload success ~$
Realizaremos nuestro trabajo con el servidor MySQL, por ejemplo a través de MySQL Workbench, y al terminarlo, desde consola dejaremos cerrado el firewall de nuevo:
~$ sudo firewall-cmd --remove-service=mysql success ~$ sudo firewall-cmd --reload success ~$
Quedando la puerta cerrada para visitantes no deseados.
Conclusión
Ya has visto cómo instalar MySQL en CentOS 7, es tan sencillo como añadir algunos repositorios, configurar la versión que nos interese o esté disponible, descargar y configurar.
Ahora tú decides si quieres trabajar con la versión del servidor de MySQL oficial o con implementaciones libres como MariaDB.
Si tienes alguna corrección, duda, pregunta o sugerencia para algún otro tutorial, déjame algún comentario.
¡Apoya comoinstalar.me!
Si este artículo te ha servido, puedes apoyarnos con una mínima aportación para ayudarnos en la tarea de hacer más y mejores tutoriales de este tipo, y puedes hacerlo dejando una pequeña propina de 1 $ en PayPal:
O, si te sientes especialmente agradecido, invitándonos a un café:
¡Gracias!
¡Excelente! Instalado en una Toshiba Satellite C645D de 32 bits. Muy buen tutorial, vigente en 2023. ¡¡Gracias, bro!!
¡De nada!
Actualizado a la versión 8.0.28.
Actualizado a la versión 8.0.27.
Excelente tutorial, todo calzó perfecto y muy buenos tips. Gracias por compartir.
¡De nada, Jorge Luis!
Excelente guía, completa y fácil de seguir, todo jala, te felicito por ser compartido. Excelente.
¡Me alegro de que te sirva, Daniel!
Saludos.
Muy agradecido por compartir conocimiento, adicional luego de instalar ya los primeros pasos, no arranca el mysqld, da un error no sé por qué si están realizados tal cual los procedimientos. El error dice:
# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See «systemctl status mysqld.service» and «journalctl -xe» for details.
# systemctl status mysqld
● mysqld.service – MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since mié 2019-11-27 10:39:27 -05; 19s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3575 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 3547 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3575 (code=exited, status=1/FAILURE)
Status: «Data Dictionary upgrade from MySQL 5.7 in progress»
nov 27 10:39:25 igmsigeftbddnodo01.local systemd[1]: Starting MySQL Server…
nov 27 10:39:27 igmsigeftbddnodo01.local systemd[1]: mysqld.service: main process e…E
nov 27 10:39:27 igmsigeftbddnodo01.local systemd[1]: Failed to start MySQL Server.
nov 27 10:39:27 igmsigeftbddnodo01.local systemd[1]: Unit mysqld.service entered fa….
nov 27 10:39:27 igmsigeftbddnodo01.local systemd[1]: mysqld.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
¿Cómo puedo solucionar este inconnveniente? Gracias de antemano.
GERMÁN ENCALADA
¿Es una instalación limpia de MySQL o existía alguna versión anterior? ¿Se trata de CentOS 7 de 32 bits ó de 64? Parece que se trata de MySQL 5.7. Consulta el registro de MySQL en /var/log/mysqld.log, ya que ahí se encuentran todos los mensajes de inicio del servicio, y seguramente aparecerá registrado el error con más pistas para solucionarlo.
Justo lo que andaba buscando, me salvaste. Muy Agradecido