La instalación y configuración básica de un servidor MySQL no es nada complicada, leyendo la documentación online o algún que otro tutorial se puede conseguir en unos minutos. Sin embargo, las distintas opciones de configuración que nos ofrece MySQL hacen que dominar completamente la configuración de dicho servidor requiera más tiempo y dedicación.

En este post voy a mostrar cómo instalar, configurar y administrar tres instancias completamente independientes del servidor MySQL en la misma máquina. Ya que en el anterior post de instalación de MySQL mostré la instalación con apt-get, esta vez voy a mostrar la instalación descargando los fuentes para su posterior compilación.

Lo primero que hay que hacer es descargar los ficheros con el código fuente del servidor de la página de descargas de MySQL. Una vez descargados, hay que descomprimirlos y entrar en la carpeta que se acaba de crear para poder ejecutar el comando de compilación:

#creación de la carpeta que contendrá los binarios y las bases de datos
mkdir /root/mysql_multi
#compilación e instalación personalizada de la primera instancia de MySQL para utilizar el puerto 3307, la carpeta que acabamos de crear como directorio base y la carpeta /root/mysql_multi/var/ como directorio que contendrá las bases de datos.
./configure –with-tcp-port=3307 –with-unix-socket-path=/root/mysql_multi/mysql_1.sock –prefix=/root/mysql_multi/ –localstatedir=/root/mysql_multi/var/
make
make install

El siguiente paso es crear las carpetas que utilizarán las otras dos instancias de MySQL para guardar las bases de datos:

cd /root/mysql_multi/
mkdir var # ya está creada en instalación
mkdir var2
mkdir var3

Ahora hay que inicializar la estructura de las bases de datos utilizada por cada instancia de MySQL:

/root/mysql_multi/bin/mysql_install_db –user=mysql –basedir=/root/mysql_multi/ –datadir=/root/mysql_multi/var/
/root/mysql_multi/bin/mysql_install_db –user=mysql –basedir=/root/mysql_multi/ –datadir=/root/mysql_multi/var2/
/root/mysql_multi/bin/mysql_install_db –user=mysql –basedir=/root/mysql_multi/ –datadir=/root/mysql_multi/var3/

Establecer el password de root para las tres instancias. Para lo cual hay que arrancar el servidor y luego conectarse con mysqladmin:

/root/mysql_multi/bin/mysqld_safe –socket=/root/mysql_multi/mysql_1.sock –port=3307 –datadir=/root/mysql_multi/var/ &
/root/mysql_multi/bin/mysqladmin -u root password ‘changeme’
killall mysqld

/root/mysql_multi/bin/mysqld_safe –socket=/root/mysql_multi/mysql_2.sock –port=3308 –datadir=/root/mysql_multi/var2/ &
/root/mysql_multi/bin/mysqladmin -u root password ‘changeme’
killall mysqld

/root/mysql_multi/bin/mysqld_safe –socket=/root/mysql_multi/mysql_3.sock –port=3309 –datadir=/root/mysql_multi/var3/ &
/root/mysql_multi/bin/mysqladmin -u root password ‘changeme’
killall mysqld

En este momento ya están las tres instancias de MySQL listas para funcionar. El siguiente paso es crear un archivo de configuración que nos permita manejar estas tres instancias de una forma cómoda y simple.

#Archivo de configuración /root/mysql_multi/my_multi.cnf
[mysqld_multi]
#valores por defecto para las tres instancias de MySQL
mysqld     = /root/mysql_multi/bin/mysqld_safe
mysqladmin = /root/mysql_multi/bin/mysqladmin
user       = root
password   = changeme

#instancia 1
[mysqld1]
socket     = /root/mysql_multi/mysql_multi.sock
port       = 3307
pid-file   = /root/mysql_multi/var/alberto.pid
datadir    = /root/mysql_multi/var/
language   = /root/mysql_multi/share/mysql/english
user       = mysql

#instancia 2
[mysqld2]
socket     = /root/mysql_multi/mysql_2.sock
port       = 3308
pid-file   = /root/mysql_multi/var2/alberto.pid
datadir    = /root/mysql_multi/var2/
language   = /root/mysql_multi/share/mysql/english
user       = mysql

#instancia 3
[mysqld3]
socket     = /root/mysql_multi/mysql_3.sock
port       = 3309
pid-file   = /root/mysql_multi/var3/alberto.pid
datadir    = /root/mysql_multi/var3/
language   = /root/mysql_multi/share/mysql/english
user       = mysql

Una vez creado este archivo podemos utilizar el programa mysqld_multi para manejar nuestras instancias:

/root/mysql_multi/bin/mysqld_multi –defaults-file=/root/mysql_multi/my_multi.cnf report
/root/mysql_multi/bin/mysqld_multi –defaults-file=/root/mysql_multi/my_multi.cnf start 2

El acceso con los clientes sería de la siguiente manera:

#Utilizando el socket UNIX
mysql -u root -pchangeme -S /root/mysql_multi/mysql_multi.sock
#utilizando el puerto TCP para restaurar un backup
mysql -u root -pchangeme -h 127.0.0.1 -P 3308 esquema < backaup.sql &

¿Algunas recomendaciones extras?

  • Lo primero es no utilizar el usuario root para la instalación y ejecución del servidor MySQL. Yo lo he utilizado para no complicar más la instalación.
  • Para encontrar información adicional sobre el manejo de múltiples instancias de MySQL es recomendable leer la documentación oficial sobre la instalación de múltiples instancias de MySQL en la misma máquina o la utilización de mysqld_multi.
  • Este howto se puede adaptar para utilizar diferentes versiones de MySQL, yo he utilizado la misma versión en las tres instancias para no complicar demasiado la explicación.
  • Recordad que si algo no funciona cuando todos los archivos de configuración parecen estar bien, siempre es un problema de permisos.
  • Es posible que las herramientas gráficas de administración de MySQL ignoren momentáneamente el puerto y se conecten a la primera instancia de MySQL. Para solucionarlo le tenemos que decir dónde se encuentra el socket UNIX de la instancia en cuestión.
MySQL Administrator

Especificando el socket UNIX en MySQL Administrator

Espero que el artículo os haya gustado. Hasta pronto.