Instalar un servidor MySQL 8.0 desde el paquete binario

Aprendemos en esta entrada a instalar un servidor MySQL 8.0 desde el paquete binario en un servidor Debian 11. Esto nos permitirá tener más facilidades en su configuración, sin necesidad de compilar desde las fuentes. Entre otras cosas nos permite setear un servidor MySQL en una localización personalizada y con opciones y parámetros custom. Aunque he utilizado Debian, esta entrada también serviría para distribuciones derivadas, como Ubuntu o Linux Mint.

Cabe decir que la idea de esta entrada ha surgido de la necesidad y de acordarme que en su día el amigo Linuxito, ya había hablado de esto en su ya desaparecida web. Por lo que he utilizado Internet Archive para recuperar su artículo, que he utilizado como fuente. Al césar lo que es del césar.

Para esta entrada he utilizado un VPS creado en mi proveedor de confianza Clouding.io

Instalar un servidor MySQL 8.0 desde el paquete binario

Lo primero que tenemos que hacer es descargar y extraer el paquete binario:

cd /usr/local/src
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar
tar xvf mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar
tar axf mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz
rm *tar.xz
mv mysql-8.0.28-linux-glibc2.17-x86_64-minimal/ ..
cd ..
ln -s mysql-8.0.28-linux-glibc2.17-x86_64-minimal/ mysql

Instalamos dependencias de MySQL y verificamos que no quedan binarios con librerías faltantes:

apt install libncurses5 libtinfo5 libnuma1
ldd mysql/bin/* | grep 'not found'
echo $?
1

Ahora toca una parte muy importante, que es crear el usuario «mysql», con el que trabajar este motor de base de datos

Para ello hemos de seguir estos pasos:

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

Creamos los directorios «mysql-files» y el datadir:

cd /usr/local/mysql
mkdir {mysql-files,data}
chown mysql:mysql mysql-files
chmod 750 mysql-files
chown mysql:mysql data
chmod 750 data

Instalamos y personalizamos los scripts de inicio:

cp support-files/mysql.server /etc/init.d/mysql8
vim /etc/init.d/mysql8

Yo he utilizado vim, pero aquí podemos utilizar nuestro editor favorito.

Definimos el directorio base, el datadir y el archivo de configuración «my.cnf»:

basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
mycnf=$basedir/etc/my.cnf

Además, en la línea 208 cambiamos:

conf=/etc/my.cnf

Por:

conf=$mycnf

Guardamos y salimos.

A continuación, creamos el fichero «my.cnf»

mkdir -p /usr/local/mysql/etc
vim /usr/local/mysql/etc/my.cnf

Indicamos la siguiente configuración con datadir, socket, archivo de PID, archivo de log de errores y puerto personalizado:

[mysqld]
basedir         = /usr/local/mysql
pid-file        = /var/run/mysqld/mysqld8.pid
socket          = /var/run/mysqld/mysqld8.sock
datadir         = /usr/local/mysql/data
log-error       = /usr/local/mysql/error.log
bind-address    = 0.0.0.0
port            = 3307
symbolic-links  = 0

Creamos el archivo de log de errores vacío:

touch /usr/local/mysql/error.log
chown mysql:mysql /usr/local/mysql/error.log

Creamos el directorio para el pid:

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

Iniciamos el datadir e inciamos el servicio por primera vez:

/usr/local/mysql/bin/mysqld \
--initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
cd /usr/local/mysql
bin/mysqld_safe –-user=mysql &

Si todo ha ido bien, deberíamos ver algo similar a esto:

Iniciamos MySQL

En el fichero «error.log» se encuentra la clave de root temporal generada al ejecutar «–initialize»

La apuntamos, y ahora reiniciamos el servicio utilizando el script ubicado en «/etc/init.d»

/etc/init.d/mysql8 restart

Nos conectamos por primera vez:

cd /usr/local/mysql/bin
./mysql -u root -P 3307 -h 127.0.0.1 -p

Para muestra un botón:

Accedemos a MySQL

Cambiamos el password de root:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'contrasea';
flush privileges;
exit

Con esto ya lo tendríamos.

Como es un engorro ir hasta el directorio del binario para llamar al comando mysql, creamos un enlace simbólico para que lo podamos llamar desde cualquier parte:

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/

Espero que esta entrada os pueda ser de ayuda en algún momento.

Durante todos estos años hemos hablado largo y tendido sobre MySQL, podéis consultar todas las entradas aquí.

Fuentes consultadas:

Installing MySQL on Unix/Linux Using Generic Binaries