Esta sección discute el uso del MySQL Instance Manager (IM). Este es el demonio que corre en el puerto TCP/IP, el cual provee monitoreo y administración de las instancias del servidor de datos MySQL. MySQL Instance Manager está disponible para sistemas operativos basados en Unix.
MySQL Instance Manager se incluye en las distribuciones de MySQL
desde la versión 5.0.3, y puede usarse en lugar del script
mysqld_safe
para arrancar y parar MySQL Server,
incluso desde una máquina
remota. MySQL Instance Manager implementa la
funcionalidad (y la mayoría de la sintaxis) del script
mysqld_multi . Una descripción más detallada
de MySQL Instance Manager a continuación.
Normalmente, el servidor de bases de datos MySQL se arranca con
el script mysql.server, que normalmente
reside en el directorio /etc/init.d/
. En
MySQL 5.0.3 este script invoca mysqlmanager
(el binario de MySQL Instance Manager ) para arrancar MySQL. (En
versiones previas de MySQL el script
mysqld_safe se usa con este propósito.) A
partir de MySQL 5.0.4 el comportamiento del script de inicio ha
cambiado de nuevo para incorporar ambos esquemas de
inicialización. En la versión 5.0.4, el scrip de arranque usa
el antiguo esquema (invocando mysqld_safe)
por defecto, pero se puede cambiar la variable
use_mysqld_safe
en el script a
0
(cero) para usar el MySQL Instance Manager
para arranacar un servidor.
El comportamiento del Instance Manager en este caso depende de
las opciones dadas en el fichero de configuración de MySQL. Si
no hay fichero de configuración, el MySQL Instance Manager crea
una instancia llamada mysqld
y trata de
arrancarla con los valores por defectos (compilados). Esto
significa que el IM no puede adivinar la localización de
mysqld si no está instalado en la
localización por defecto. Si ha instalado MySQL server en una
localización no estándard, debe usar un fichero de
configuración. Consulte Sección 2.1.5, “Conformación de la instalación”.
Si hay un fichero de configuración, el IM parseará el fichero
de configuración en búsqueda de las secciones
[mysqld]
(P.e. [mysqld]
,
[mysqld1]
, [mysqld2]
,
etc.) Cada una de esas secciones especifica una instancia. Al
arrancar, el IM arrancará todas las instancias encontradas. El
IM para todas las instancias al cerrar por defecto.
Tenga en cuenta que hay una opción especial
mysqld-path
(mysqld-path =
<path-to-mysqld-binary>
) reconocida sólo por el
IM. Use esta variable para que IM conozca dónde reside el
binario mysqld. También debe inicializar las
opciones basedir
y datadir
para el servidor.
El típico ciclo de arranque/cierre para un servidor MySQL con el MySQL Instance Manager habilitado es como sigue:
-
El MySQL Instance Manager se arranca con el script /etc/init.d/mysql.
-
El MySQL Instance Manager arranca todas las instancias y las monitoriza.
-
Si una instancia de un servidor cae, el MySQL Instance Manager la reinicia.
-
Si el MySQL Instance Manager se cierra (por ejemplo con el comando /etc/init.d/mysql stop), todas las instancias se apagan con el MySQL Instance Manager.
La comunicación con el MySQL Instance Manager se hace usando el protocolo cliente-servidor de MySQL. Con el mismo, puede conectarse al IM usando el program cliente estándard mysql , así como con la API de C MySQL. El IM soporta la versión del protocolo cliente- servidor MySQL usada por las herramientas de cliente y bibliotecas distribuidas a partir de la versión mysql-4.1.
El IM almacena su información de usuario en un fichero de
contraseñas. La localización por defecto para el fichero de
contraseñas es /etc/mysqlmanager.passwd
Las entradas para las contraseñas se parecen a las siguiente:
petr:*35110DC9B4D8140F5DE667E28C72DD2597B5C848
Para generar una entrada así debe invocarse IM con la opción
--passwd . Entonces puede redirigir la salida
a /etc/mysqlmanager.passwd
para añadir un
nuevo usuario. Un comando de ejemplo a continuación.
./mysqlmanager --passwd >> /etc/mysqlmanager.passwd Creating record for new user. Enter user name: mike Enter password: <password> Re-type password: <password>
La siguiente línea se añade a
/etc/mysqlmanager.passwd
:
mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9
Si no hay entradas en el fichero
/etc/mysqlmanager.passwd
no puede
conectarse al IM.
El MySQL Instance Manager soporta varias opciones de línea de comando. Una breve lista está disponible ejecutando el comando ./mysqlmanager --help . Los siguientes comandos están disponibles:
-
-?, --help
Muestra la ayuda y sale..
-
--log=name
Ruta al fichero de log del IM. Se usa con la opción --run-as-service.
-
--pid-file=name
Fichero Pid a usar. Por defecto es
mysqlmanager.pid
. -
--socket=name
Fichero socket a usar por las conexiones. Por defecto es
/tmp/mysqlmanager.sock
. -
-P, --passwd
Prepara entrada para fichero passwd y salir.
-
--bind-address=name
Dirección enlazada para usar en conexiones.
-
--port=#
Número de puerto para usar en conexiones (número de puerto por defecto, asignado por la IANA, es el 2273).
-
--password-file=name
Busca los usuarios y contraseñas para el Instance Manger aquí. El fichero por defecto es
/etc/mysqlmanager.passwd
. -
--default-mysqld-path=name
Dónde buscar el binario para el MySQL Server si no se proporciona un path en la sección de instancias. Ejemplo:
default-mysqld-path = /usr/sbin/mysqld
. -
--monitoring-interval=#
Intervalo en segundos para monitorizar instancias. El IM tratará de conectar a cada una de las instancias monitorizadas para comprobar si están vivas / no colgadas. En caso de un fallo el IM realizará varios (de hecho muchos) intentos de reiniciar la instancia. Puede desactivar este comportamiento para instancias particulares con la opción
nonguarded
en la sección de instancia apropiada. Si no se proporciona ningún valor, se usan 20 segundos por defecto. -
--run-as-service
Demoniza y arranca el proceso ángel. El proceso ángel es simple y difícil de que falle. Reinicia el IM en caso de fallo.
-
--user=name
Nombre de usuario para arrancar y ejecutar mysqlmanager. Se recomienda ejecutar mysqlmanager bajo la misma cuenta de usuario usada para ejectuar el servidor mysqld.
-
-V, --version
Muestra información de la versión y sale.
El Instance Manager usa el fichero estándard
my.cnf
. Usa la sección
[manager]
para leer opciones para sí mismo y
la sección [mysqld]
para crear instancias.
La sección [manager]
contiene algunas de las
opciones listadas anteriormente. Un ejemplo de la sección
[manager]
a continuación:
# MySQL Instance Manager options section [manager] default-mysqld-path = /usr/local/mysql/libexec/mysqld socket=/tmp/manager.sock pid-file=/tmp/manager.pid password-file = /home/cps/.mysqlmanager.passwd monitoring-interval = 2 port = 1999 bind-address = 192.168.1.5
Las secciones de instancias especifican opciones dadas a cada instancia al arrancar. La mayoría son comunes con las opciones de MySQL Server, pero hay algunas específicas para el IM:
-
mysqld-path = <path-to-mysqld-binary>
La ruta al binario del servidor mysqld.
-
shutdown-delay = #
Número de segundos que IM debe esperar para que una instancia se cierre. Por defecto son 35 segundos. Cuando acaba el tiempo, IM asume que la instancia está colgada y trata de hacer un
kill -9
. Si usa InnoDB con tablas grandes, debe incrementar este valor. -
nonguarded
Esta opcion debe activarse si se quiere desactivar la funcionalidad de monitoreo de IM para una instancia concreta.
Diversas secciones de instancias de ejemplo a continuación.
[mysqld] mysqld-path=/usr/local/mysql/libexec/mysqld socket=/tmp/mysql.sock port=3307 server_id=1 skip-stack-trace core-file skip-bdb log-bin log-error log=mylog log-slow-queries [mysqld2] nonguarded port=3308 server_id=2 mysqld-path= /home/cps/mysql/trees/mysql-4.1/sql/mysqld socket = /tmp/mysql.sock4 pid-file = /tmp/hostname.pid4 datadir= /home/cps/mysql_data/data_dir1 language=/home/cps/mysql/trees/mysql-4.1/sql/share/english log-bin log=/tmp/fordel.log
Una vez que se ha inicializado un fichero de contraseñas para el MySQL Instance Manager y que el IM está ejecutándose, puede conectarse al mismo. Puede usar la herramienta cliente mysql para conectar a través de la API MySQL estándard. A continuación se muestra la lista de comandos que el MySQL Instance Manager acepta actualmente, con ejemplos.
-
START INSTANCE <instance_name>
Este comando intenta arrancar una instancia:
mysql> START INSTANCE mysqld4; Query OK, 0 rows affected (0,00 sec)
-
STOP INSTANCE <instance_name>
Esto trata de parar una instancia:
mysql> STOP INSTANCE mysqld4; Query OK, 0 rows affected (0,00 sec)
-
SHOW INSTANCES
Muestra los nombres de todas las intancias cargadas:
mysql> show instances; +---------------+---------+ | instance_name | status | +---------------+---------+ | mysqld3 | offline | | mysqld4 | online | | mysqld2 | offline | +---------------+---------+ 3 rows in set (0,04 sec)
-
SHOW INSTANCE STATUS <instance_name>
Muestra el estado e información de la versión de la instancia seleccionada:
mysql> SHOW INSTANCE STATUS mysqld3; +---------------+--------+---------+ | instance_name | status | version | +---------------+--------+---------+ | mysqld3 | online | unknown | +---------------+--------+---------+ 1 row in set (0.00 sec)
-
SHOW INSTANCE OPTIONS <instance_name>
Muestra las opciones usadas por una instancia:
mysql> SHOW INSTANCE OPTIONS mysqld3; +---------------+---------------------------------------------------+ | option_name | value | +---------------+---------------------------------------------------+ | instance_name | mysqld3 | | mysqld-path | /home/cps/mysql/trees/mysql-4.1/sql/mysqld | | port | 3309 | | socket | /tmp/mysql.sock3 | | pid-file | hostname.pid3 | | datadir | /home/cps/mysql_data/data_dir1/ | | language | /home/cps/mysql/trees/mysql-4.1/sql/share/english | +---------------+---------------------------------------------------+ 7 rows in set (0.01 sec)
-
SHOW <instance_name> LOG FILES
El comando poroporciona un listado de todos los ficheros de log usados por la instancia. El conjunto resultado contiene el path al fichero de log y al fichero de configuración (i.e.
log=/var/mysql.log
), el IM trata de adivinar su ubicación. Si IM no es capaz de localizar el fichero de logs, debe especificarlo explícitamente.mysql> SHOW mysqld LOG FILES; +-------------+------------------------------------+----------+ | Logfile | Path | Filesize | +-------------+------------------------------------+----------+ | ERROR LOG | /home/cps/var/mysql/owlet.err | 9186 | | GENERAL LOG | /home/cps/var/mysql/owlet.log | 471503 | | SLOW LOG | /home/cps/var/mysql/owlet-slow.log | 4463 | +-------------+------------------------------------+----------+ 3 rows in set (0.01 sec)
-
SHOW <instance_name> LOG {ERROR | SLOW | GENERAL} size[,offset_from_end]
Este comando recibe una porción del fichero de log especificado. Ya que la mayoría de usuarios están interesados en los últimos mensajes de log, el parámetro
size
define el número de bytes que quiere recibir empezando por el final del log. Puede recibir datos del medio del fichero de log especificando el parámetro opcionealoffset_from_end
. El siguiente ejemplo recibe 21 bytes de datos, empezando 23 bytes desde el final del fichero de log y acabando 2 bytes al final del fichero de log.:mysql> SHOW mysqld LOG GENERAL 21, 2; +---------------------+ | Log | +---------------------+ | using password: YES | +---------------------+ 1 row in set (0.00 sec)
-
SET instance_name.option_name=option_value
Este comando edita la configuración de la instancia especificada para cambiar/añadir opciones a la instancia. El IM asume que el fichero de configuración está localizado en
/etc/my.cnf
. Debe comprobar que el fichero existe y que tiene los permisos apropiados.mysql> SET mysqld2.port=3322; Query OK, 0 rows affected (0.00 sec)
Los cambios hecho en el fichero de configuración no tendrán efecto hasta reiniciar el servidor MySQL. Además, estos cambios no se guardan en la cache local de configuración del Instance Manager hasta que se ejecuta un comando
FLUSH INSTANCES
. -
UNSET instance_name.option_name
Este comando elimina una opción de un fichero de configuración de una instancia.
mysql> UNSET mysqld2.port; Query OK, 0 rows affected (0.00 sec)
Los cambios hecho en el fichero de configuración no tendrán efecto hasta reiniciar el servidor MySQL. Además, estos cambios no se guardan en la cache local de configuración del Instance Manager hasta que se ejecuta un comando
FLUSH INSTANCES
. -
FLUSH INSTANCES
Este comando fuerza a IM a releer el fichero de configuración y a refrescar estructuras internas. Este comando debe ejectuarse tras editar el fichero de configuración. Este comando no reinicia las instancias:
mysql> FLUSH INSTANCES; Query OK, 0 rows affected (0.04 sec)