MySQL Multi
NOTA: Página en construcción aún.
Contenido
Introducción a MySQL Multi
En un mismo servidor se pueden tener múltiples instancias de MySQL. En general estas instancias deberían apuntar a distintos repositorios de datos (varias a un mismo repositorio de datos lo único que trae es problemas). Esto permitiría poder manejar el prendido y apagado de cada instancia en forma independiente. Otra ventaja que permite tener varias instancias, es dejar que cada usuario maneje su propia instancia de MySQL.
MySQL proporciona el comando mysqld_multi para manejar múltiples instancias. Además, en el archivo my.cnf es que se configuran las instancias. El my.cnf general se pone en /etc, y los archivos my.cnf por usuario, pueden ir en ~/.my.cnf.
Para que funcionen como demonios las instancias, y se inicien, se debe colocar el demonio mysqld_multi en /etc/init.d (distribuciones RedHat).
Archivo /etc/init.d/mysqld_multi
Archivo copiado de la distribución de MySQL disponible en el repositorio de CentOS-Plus. Sólo se ha modificado la línea basedir según se necesite. En este y demás ejemplos se utilizará /mysqldata como directorio base para la data del MySQL.
#!/bin/sh
#
# A simple startup script for mysqld_multi by Tim Smith and Jani Tolonen.
# This script assumes that my.cnf file exists either in /etc/my.cnf or
# /root/.my.cnf and has groups [mysqld_multi] and [mysqldN]. See the
# mysqld_multi documentation for detailed instructions.
#
# This script can be used as /etc/init.d/mysql.server
#
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.
#
# Version 1.0
#
basedir=/mysqldata
bindir=/usr/bin
if test -x $bindir/mysqld_multi
then
mysqld_multi="$bindir/mysqld_multi";
else
echo "Can't execute $bindir/mysqld_multi from dir $basedir";
exit;
fi
case "$1" in
'start' )
"$mysqld_multi" start $2
;;
'stop' )
"$mysqld_multi" stop $2
;;
'report'|'status' )
"$mysqld_multi" report $2
;;
'restart' )
"$mysqld_multi" stop $2
"$mysqld_multi" start $2
;;
*)
echo "Uso: $0 {start|stop|report|status|restart}" >&2
;;
esac
Recordar desactivar el demonio normal de MySQL y activar este después de copiarlo.
# chkconfig mysqld off
# chkconfig --add mysqld_multi
# chkconfig mysqld_multi on
Archivo my.cnf
Se puede generar un archivo ejemplo ejecutando:
# mysqld_multi --example
La primera parte del archivo debe ser:
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = multi_admin
password = multipass
Luego se agregan las entradas de las distintas instancias. Las instancias se deben numerar.
Agregando una instancia de mysql
Hay que seguir varios pasos para agregar cada instancia que se vaya a utilizar, éstos se dan a continuación:
- Agregar la configuración.
- Crear la base de datos.
- Cambiar correctamente el password de root.
- Configurar el usuario multiadmin en la instancia de la BD.
Agregando la configuración de la nueva instancia
[mysqld1]
# Indispensables
socket = /mysqldata/mysql1.sock
port = 3306
pid-file = /mysqldata/mysql.pid1
datadir = /mysqldata/mysql1
# Opcionales
user = mysql
language = /usr/share/mysql/spanish
lower_case_table_names = 0
El parámetro lower_case_table_names indica si esa instancia será case-sensitive (valor 0) o no.