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