Diferencia entre revisiones de «MySQL Multi»

De FJWiki
Saltar a: navegación, buscar
 
(No se muestra una edición intermedia del mismo usuario)
Línea 1: Línea 1:
<tt>''NOTA: Página en construcción aún.''</tt>
 
 
 
== Introducción a MySQL Multi ==
 
== 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.
 
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.
Línea 106: Línea 104:
 
</source>
 
</source>
  
El parámetro <tt>lower_case_table_names</tt> indica si esa instancia será ''case-sensitive'' (valor 0) o no.
+
El parámetro <tt>lower_case_table_names</tt> indica si esa instancia será ''case-sensitive'' (valor 0) o no (valor 1).
 +
 
 +
El puerto por defecto es el 3306, pero considerando que se van a agregar más instancias, es necesario recordar que deben tener valores distintos. De la misma forma, los valores <tt>socket</tt>, <tt>pid-file</tt> y <tt>datadir</tt> deben ser distintos entre cada instancia.
  
 
=== Crear los archivos de la base de datos ===
 
=== Crear los archivos de la base de datos ===
Línea 160: Línea 160:
 
== Ver también ==
 
== Ver también ==
 
* [[Enlaces:MySQL]]
 
* [[Enlaces:MySQL]]
* http://dev.mysql.com/doc/refman/5.1/en/mysqld-multi.html
+
* Manual de <tt>mysqld_multi</tt>: http://dev.mysql.com/doc/refman/5.1/en/mysqld-multi.html
 +
* Manual de <tt>mysql_install_db</tt>: http://dev.mysql.com/doc/refman/5.0/es/mysql-install-db.html
  
 
[[Category:Demonios Linux]]
 
[[Category:Demonios Linux]]
 
[[Category:MySQL]]
 
[[Category:MySQL]]

Revisión actual del 23:17 13 nov 2008

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. Un cambio propio en este script fue agregar la opción "status" como sinónimo de "report".

#!/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 (valor 1).

El puerto por defecto es el 3306, pero considerando que se van a agregar más instancias, es necesario recordar que deben tener valores distintos. De la misma forma, los valores socket, pid-file y datadir deben ser distintos entre cada instancia.

Crear los archivos de la base de datos

Para la creación de la base de datos ejecutamos el comando mysql_install_db poniendo apropiadamente los parámetros de usuario y de directorio de datos según lo puesto en el archivo de configuración.

# mysql_install_db --user=mysql --datadir=/mysqldata/mysql1

Cambiando password root

Es importante cambiar el password de root de la instancia recién creada, pues está sin password alguno. Normalmente como output del comando mysql_install_db sale un ejemplo de los comandos necesarios para cambiarlo.

En primer lugar hay que arrancar la base de datos:

# service mysqld_multi start 1

ó

# mysqld_multi start 1

Podemos verificar que esté ejecutándose con:

# service mysqld_multi status 1

ó

# mysqld_multi report 1

Luego se puede ejecutar ya el cambio de password:

# mysqladmin -S /mysqldata/mysql1.sock -u root password nuevo-password
# mysqladmin -u root -h hostname.dominio.com -P 3306 password nuevo-password

Para una siguiente vez, dado que ya tiene password, hay que agregarle el parámetro "-p" al comando para ingresar el password anterior.

Nota: también se puede cambiar el password en la interfaz del MySQL.

Configurar el usuario multiadmin

Se debe crear el usuario multiadmin con el password especificado en my.cnf. Para esto hay que entrar con el usuario root y ejecutar los siguientes comandos:

# mysql -S /mysqldata/mysql1.sock -u root -p
Enter password:

mysql> GRANT SHUTDOWN ON *.* TO 'multiadmin'@'localhost' IDENTIFIED BY 'multipass';

Con esto ya quedará la base de datos lista para iniciarse con el servicio mysqld_multi.

Ver también