MySQL Multi

De FJWiki
Saltar a: navegación, buscar

NOTA: Página en construcción aún.

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:

  1. Agregar la configuración.
  2. Crear la base de datos.
  3. Cambiar correctamente el password de root.
  4. 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.

Crear los archivos de la base de datos

Ver también