5.2. El gestor de instancias de MySQL

MySQL 5.0

5.2. El gestor de instancias de MySQL

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 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.

5.2.1. Arrancar el servidor MySQL con el gestor de instancias MySQL

Normalmente, el servidor de bases de datos MySQL se arranca con el script mysql.server, que normalmente reside en el directorio . 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 en el script a (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 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 (P.e. , , , 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 () 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 y 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.

5.2.2. Conexión al gestor de instancias de MySQL y creación de cuentas de usuario

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

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 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 :

mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9

Si no hay entradas en el fichero no puede conectarse al IM.

5.2.3. Opciones de los comandos del gestor de instancias MySQL

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:

  • Muestra la ayuda y sale..

  • Ruta al fichero de log del IM. Se usa con la opción --run-as-service.

  • Fichero Pid a usar. Por defecto es .

  • Fichero socket a usar por las conexiones. Por defecto es .

  • Prepara entrada para fichero passwd y salir.

  • Dirección enlazada para usar en conexiones.

  • Número de puerto para usar en conexiones (número de puerto por defecto, asignado por la IANA, es el 2273).

  • Busca los usuarios y contraseñas para el Instance Manger aquí. El fichero por defecto es .

  • Dónde buscar el binario para el MySQL Server si no se proporciona un path en la sección de instancias. Ejemplo: .

  • 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 en la sección de instancia apropiada. Si no se proporciona ningún valor, se usan 20 segundos por defecto.

  • Demoniza y arranca el proceso ángel. El proceso ángel es simple y difícil de que falle. Reinicia el IM en caso de fallo.

  • Nombre de usuario para arrancar y ejecutar mysqlmanager. Se recomienda ejecutar mysqlmanager bajo la misma cuenta de usuario usada para ejectuar el servidor mysqld.

  • Muestra información de la versión y sale.

5.2.4. Ficheros de configuración del gestor de instancias de MySQL

El Instance Manager usa el fichero estándard . Usa la sección para leer opciones para sí mismo y la sección para crear instancias. La sección contiene algunas de las opciones listadas anteriormente. Un ejemplo de la sección 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:

  • La ruta al binario del servidor mysqld.

  • 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 . Si usa InnoDB con tablas grandes, debe incrementar este valor.

  • 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

5.2.5. Los comandos que reconoce el gestor de instancias de MySQL

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.

  • Este comando intenta arrancar una instancia:

    mysql> START INSTANCE mysqld4;
    Query OK, 0 rows affected (0,00 sec)
    
  • Esto trata de parar una instancia:

    mysql> STOP INSTANCE mysqld4;
    Query OK, 0 rows affected (0,00 sec)
    
  • 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)
    
  • 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)
    
  • 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)
    
  • 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. ), 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)
    
  • 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 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 opcioneal . 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)
    
  • 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 . 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 .

  • 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 .

  • 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)