Diferencia entre revisiones de «MySQL Multi»
(No se muestran 3 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
− | |||
− | |||
== 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 9: | Línea 7: | ||
== Archivo <tt>/etc/init.d/mysqld_multi</tt> == | == Archivo <tt>/etc/init.d/mysqld_multi</tt> == | ||
− | Archivo copiado de la distribución de MySQL disponible en el repositorio de ''CentOS-Plus''. Sólo se ha modificado la línea <tt>basedir</tt> según se necesite. En este y demás ejemplos se utilizará <tt>/mysqldata</tt> como directorio base para la data del MySQL. | + | Archivo copiado de la distribución de MySQL disponible en el repositorio de ''CentOS-Plus''. Sólo se ha modificado la línea <tt>basedir</tt> según se necesite. En este y demás ejemplos se utilizará <tt>/mysqldata</tt> 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". |
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/sh | #!/bin/sh | ||
Línea 84: | Línea 82: | ||
== Agregando una instancia de mysql == | == 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 <tt>multiadmin</tt> en la instancia de la BD. | ||
=== Agregando la configuración de la nueva instancia === | === Agregando la configuración de la nueva instancia === | ||
+ | <source> | ||
+ | [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 | ||
+ | </source> | ||
+ | |||
+ | 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 === | ||
+ | |||
+ | Para la creación de la base de datos ejecutamos el comando <tt>mysql_install_db</tt> poniendo apropiadamente los parámetros de usuario y de directorio de datos según lo puesto en el archivo de configuración. | ||
+ | <source> | ||
+ | # mysql_install_db --user=mysql --datadir=/mysqldata/mysql1 | ||
+ | </source> | ||
+ | |||
+ | === 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 <tt>mysql_install_db</tt> sale un ejemplo de los comandos necesarios para cambiarlo. | ||
+ | |||
+ | En primer lugar hay que arrancar la base de datos: | ||
+ | <source> | ||
+ | # service mysqld_multi start 1 | ||
+ | </source> | ||
+ | ó | ||
+ | <source> | ||
+ | # mysqld_multi start 1 | ||
+ | </source> | ||
+ | |||
+ | Podemos verificar que esté ejecutándose con: | ||
+ | <source> | ||
+ | # service mysqld_multi status 1 | ||
+ | </source> | ||
+ | ó | ||
+ | <source> | ||
+ | # mysqld_multi report 1 | ||
+ | </source> | ||
+ | |||
+ | Luego se puede ejecutar ya el cambio de password: | ||
+ | <source> | ||
+ | # mysqladmin -S /mysqldata/mysql1.sock -u root password nuevo-password | ||
+ | # mysqladmin -u root -h hostname.dominio.com -P 3306 password nuevo-password | ||
+ | </source> | ||
+ | |||
+ | 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 <tt>multiadmin</tt> === | ||
+ | Se debe crear el usuario <tt>multiadmin</tt> con el password especificado en <tt>my.cnf</tt>. Para esto hay que entrar con el usuario root y ejecutar los siguientes comandos: | ||
+ | <source> | ||
+ | # mysql -S /mysqldata/mysql1.sock -u root -p | ||
+ | Enter password: | ||
+ | |||
+ | mysql> GRANT SHUTDOWN ON *.* TO 'multiadmin'@'localhost' IDENTIFIED BY 'multipass'; | ||
+ | </source> | ||
+ | |||
+ | Con esto ya quedará la base de datos lista para iniciarse con el servicio <tt>mysqld_multi</tt>. | ||
== Ver también == | == Ver también == | ||
* [[Enlaces:MySQL]] | * [[Enlaces:MySQL]] | ||
+ | * 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]] |
Revisión actual del 23:17 13 nov 2008
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. 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:
- 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 (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
- Enlaces:MySQL
- Manual de mysqld_multi: http://dev.mysql.com/doc/refman/5.1/en/mysqld-multi.html
- Manual de mysql_install_db: http://dev.mysql.com/doc/refman/5.0/es/mysql-install-db.html