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.
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.
apt update
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:
mkdir /var/lib/mysql2
mkdir /var/lib/mysql3
chown -R mysql:mysql /var/lib/mysql2/
chown -R mysql:mysql /var/lib/mysql3/
mkdir /var/log/mysql2
mkdir /var/log/mysql3
chown -R mysql:mysql /var/log/mysql2
chown -R mysql:mysql /var/log/mysql3
Los ficheros de configuración están ubicados en /etc/mysql, vamos a crear dos más:
mkdir /etc/mysql2
mkdir /etc/mysql3
Copiamos el fichero principal de configuración my.cnf, en ambas carpetas, para a posteriori modificarlo:
cp -p /etc/mysql/my.cnf /etc/mysql2/
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.
mysql_install_db --datadir=/var/lib/mysql2
mysql_install_db --datadir=/var/lib/mysql3
Para muestra un botón:
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:
Para arrancar cada instancia de manera manual:
/usr/bin/mysqld_safe --defaults-file=/etc/mysql2/my.cnf &
/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:
#Mediante el socket
mysql -S /var/run/mysqld/mysqld2.sock
#o
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: