Trabajar con diferentes instancias MySQL

El artículo de hoy es cien por cien para técnicos de sistemas, trata sobre la manera de trabajar con diferentes instancias MySQL en un mismo servidor, concretamente, sobre una distribución GNU Linux.

logo-mysql

Sobre las instancias MySQL

En muchos casos, podemos tener apuros económicos y no disponer de la suficiente infraestructura para tener cada motor de base de datos en servidores dedicados, por lo que, si somos un proveedor de servicios en Internet, tendremos cada motor de base de datos separado por instancias, que cada una de ellas corresponderá a un cliente. También nos puede servir para crear un entorno de test en un mismo servidor escuchando por un puerto diferente al de producción.

Hay que tener en cuenta eso sí, que aunque tiene muchas ventajas, además de las expuesta en el párrafo anterior, como la posibilidad de configurarlas de manera totalmente independiente, tiene también desventajas, por ejemplo, el uso de recursos se multiplica ya que cada una de ellas corre en un proceso diferente del sistema, además se tenemos que aplicar parches de seguridad o actualizaciones, las debemos hacer una por una.

La mejor manera de decir es hacer o al menos eso pienso yo, por lo que veamos su funcionamiento.

Laboratorio de pruebas

Para las pruebas voy a utilizar un servidor VPS en la llamada nube, con Debian Jessie, me conectaré a él vía ssh.

Antes de nada vamos a instalar el motor de base de datos.

  1. apt update
  2. apt install mysql-server

Vamos a crear dos instancias más, además de la principal, debemos crear una carpeta para los datos y otra para los logs, por cada instancia:

  1. mkdir /var/lib/mysql2
  2. mkdir /var/lib/mysql3
  3. chown -R mysql:mysql /var/lib/mysql2/
  4. chown -R mysql:mysql /var/lib/mysql3/
  5. mkdir /var/log/mysql2
  6. mkdir /var/log/mysql3
  7. chown -R mysql:mysql /var/log/mysql2
  8. chown -R mysql:mysql /var/log/mysql3

Los ficheros de configuración están ubicados en /etc/mysql, vamos a crear dos más:

  1. mkdir /etc/mysql2
  2. mkdir /etc/mysql3

Copiamos el fichero principal de configuración my.cnf, en ambas carpetas, para a posteriori modificarlo:

  1. cp -p /etc/mysql/my.cnf /etc/mysql2/ 
  2. cp -p /etc/mysql/my.cnf /etc/mysql3/

Ahora en cada uno de los ficheros copiados, debemos modificar varios aspectos, para que pueda todo funcionar correctamente, cada una de ellas escuchará por un puerto diferente, esto es, 3306, 3307 y 3308. También se modificará el socket, el pidfile, y los directorios data y log.

  1. mysql_install_db --datadir=/var/lib/mysql2
  2. mysql_install_db --datadir=/var/lib/mysql3

Para muestra un botón:

Iniciar e instalar la instancia

Iniciar e instalar la instancia

Si leemos los mensajes de la imagen, nos recuerda que el usuario ‘root‘ de la instancia no tiene contraseña y que podemos utilizar el guión mysql_secure_installation, para crearla y asegurar el servidor.

La configuración de la instancia para el artículo es la siguiente, para cada fichero:

Muestra fichero my.cnf por instancia

Muestra fichero my.cnf por instancia

Para arrancar cada instancia de manera manual:

  1. /usr/bin/mysqld_safe --defaults-file=/etc/mysql2/my.cnf &
  2. /usr/bin/mysqld_safe --defaults-file=/etc/mysql3/my.cnf &

Para comprobar que efectivamente las instancias están funcionando, nos podemos conectar a ellas de dos maneras:

  1. #Mediante el socket
  2. mysql -S /var/run/mysqld/mysqld2.sock
  3. #o
  4. mysql -h 127.0.0.1 -P 3307

Por último y no menos importante, para que nos arranque cada instancia de manera automática al iniciar el servidor, debemos copiar el fichero /etc/init.d/mysql, y crear los necesarios según las instancias creadas, adaptándolos a cada configuración.

Con esto ya la tendríamos listo.

Espero que os haya parecido interesante. Nos leemos en la próxima ^.^

Os dejo una serie de enlaces sobre el tema con varios ejemplos de configuración:

rm-rf.es | MDLog:/sysadmin | naveensnayak

12 Respuestas

  1. Percaff_TI99 dice:

    No soy para nada un técnico, pero la claridad conque expones los artículos hace que sean fáciles de entender. Se agradece este tipo de artículos, no soy muy dado a las bases de datos pero aquí veo una buena oportunidad de aprender algo más.

    Saludos.

  2. Gaspar dice:

    Yo para tener varias versiones de mysql suelo usar mysql-sandbox que nos permite incluso tener varias versiones de mysql instaladas, incluso una MariaDB por ahí y todas corriendo a la vez. Está muy chulo también.

  3. DamiánLD dice:

    Interesante post… Una pregunta.

    A parte de mysql, ¿se pueden crear instancias de otros programas?

    ¿Cómo por ejemplo Teamspeak3?

    Hace unos meses he querido crear varios servidores de Teamspeak 3 cambiando los puertos, pero solo me funcionaba 1.

  4. Hey David,
    Sólo para darte las gracias por el post. Aunque yo utilizaba mysql-sandbox para esto en modo usuario, en el trabajo he necesitado meter hasta 4 servidores MySQL siguiendo tu guía, ya sabes que siempre le doy un toque personal y eso, pero has sido de grandísima ayuda !!

  5. MIGUEL PEREZ RUIZ dice:

    Gracias por la información. Ha sido de mucha utilidad.

  6. Hola, tengo el siguiente error sabrás pro que sale o que me falta
    root@raloy:/etc/mysql2# mysql_install_db –datadir=/var/lib/mysql3
    2020-05-11 10:47:49 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld –initialize
    2020-05-11 10:47:49 [ERROR] Can’t locate the server executable (mysqld).

    • Hola Javier,

      Tienes mysql instalado? O encendido?

      Ten en cuenta que esta entrada tiene cuatro años, quizás algunas cosas hayan cambiado. Has probado con la recomendación de «mysqld -initialize» ?

      Saludos

Deja un comentario

This site uses Akismet to reduce spam. Learn how your comment data is processed.