geerlingguy.mysql

Rol de Ansible: MySQL

CI

Instala y configura el servidor MySQL o MariaDB en servidores RHEL/CentOS o Debian/Ubuntu.

Requisitos

No se requieren requisitos especiales; ten en cuenta que esta rol requiere acceso de root, así que ejecútala en un playbook con become: yes a nivel global, o invoca la rol en tu playbook así:

- hosts: database
  roles:
    - role: geerlingguy.mysql
      become: yes

Variables de Rol

Las variables disponibles se enumeran a continuación, junto con los valores predeterminados (consulta defaults/main.yml):

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

El directorio de inicio donde se almacenarán las configuraciones de MySQL de Python, que Ansible usará al conectarse a MySQL. Este debe ser el directorio de inicio del usuario que ejecuta esta rol de Ansible. Se pueden establecer mysql_user_name y mysql_user_password si ejecutas esta rol con un usuario que no es root y deseas configurar a un usuario distinto de root.

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

Los detalles de la cuenta de usuario root de MySQL.

mysql_root_password_update: false

Si se debe forzar la actualización de la contraseña del usuario root de MySQL. De forma predeterminada, esta rol solo cambiará la contraseña del usuario root cuando se configure MySQL por primera vez. Puedes forzar una actualización estableciendo esto a yes.

Nota: Si obtienes un error como ERROR 1045 (28000): Acceso denegado para el usuario 'root'@'localhost' (usando contraseña: YES) después de una ejecución fallida o interrumpida del playbook, generalmente significa que la contraseña de root no se actualizó originalmente. Intenta eliminar el archivo .my.cnf dentro del mysql_user_home configurado o actualizarlo y establecer password='' (la contraseña insegura por defecto). Vuelve a ejecutar el playbook, con mysql_root_password_update establecido en yes, y la configuración debería completarse.

Nota: Si obtienes un error como ERROR 1698 (28000): Acceso denegado para el usuario 'root'@'localhost' (usando contraseña: YES) al intentar iniciar sesión desde la CLI, puede que necesites ejecutar como root o sudo.

mysql_enabled_on_startup: true

Si MySQL debe estar habilitado al iniciar.

mysql_config_file: *el valor predeterminado depende del SO*
mysql_config_include_dir: *el valor predeterminado depende del SO*

El archivo principal de configuración my.cnf y directorio de inclusión.

overwrite_global_mycnf: true

Si el my.cnf global debe ser sobrescrito cada vez que se ejecuta esta rol. Establecer esto en no le dice a Ansible que solo cree el archivo my.cnf si no existe. Esto debería dejarse en su valor predeterminado (yes) si deseas usar las variables de esta rol para configurar MySQL.

mysql_config_include_files: []

Una lista de archivos que deben sobrescribir el my.cnf global predeterminado. Cada elemento en la matriz requiere un parámetro "src" que es una ruta a un archivo. Un parámetro "force" opcional puede forzar que el archivo se actualice cada vez que Ansible se ejecute.

mysql_databases: []

Las bases de datos de MySQL a crear. Una base de datos tiene los valores name, encoding (que predetermina a utf8), collation (que predetermina a utf8_general_ci) y replicate (que predetermina a 1, usado solo si la replicación está configurada). Los formatos de estos son los mismos que en el módulo mysql_db.

También puedes eliminar una base de datos (o asegurarte de que no esté en el servidor) estableciendo state en absent (que predetermina a present).

mysql_users: []

Los usuarios de MySQL y sus privilegios. Un usuario tiene los valores:

  • name
  • host (que predetermina a localhost)
  • password (puede ser plano o encriptado; si está encriptado, establece encrypted: yes)
  • encrypted (que predetermina a no)
  • priv (que predetermina a *.*:USAGE)
  • append_privs (que predetermina a no)
  • state (que predetermina a present)

Los formatos de estos son los mismos que en el módulo mysql_user.

mysql_packages:
  - mysql
  - mysql-server

(Específico de SO, los valores predeterminados de RedHat/CentOS se enumeran aquí) Paquetes a instalar. En algunas situaciones, puede que necesites agregar paquetes adicionales, como mysql-devel.

mysql_enablerepo: ""

(Solo RedHat/CentOS) Si has habilitado repositorios adicionales (podrías considerar geerlingguy.repo-epel o geerlingguy.repo-remi), esos repositorios pueden listarse bajo esta variable (por ejemplo, remi,epel). Esto puede ser útil, por ejemplo, si deseas instalar versiones posteriores de MySQL.

mysql_python_package_debian: python3-mysqldb

(Solo Ubuntu/Debian) Si necesitas sobrescribir explícitamente el paquete de Python de MySQL, puedes configurarlo aquí. Configúralo en python-mysqldb si usas distribuciones más antiguas que ejecutan Python 2.

mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *el valor predeterminado depende del SO*
mysql_pid_file: *el valor predeterminado depende del SO*

Configuración de conexión predeterminada de MySQL.

mysql_log_file_group: mysql *adm en Debian*
mysql_log: ""
mysql_log_error: *el valor predeterminado depende del SO*
mysql_syslog_tag: *el valor predeterminado depende del SO*

Configuración de registros de MySQL. Establecer mysql_log (el registro de consultas generales) o mysql_log_error en syslog hará que MySQL registre en syslog usando el mysql_syslog_tag.

mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *el valor predeterminado depende del SO*
mysql_slow_query_time: 2

Configuración del registro de consultas lentas. Ten en cuenta que el archivo de registro será creado por esta rol, pero si estás ejecutando en un servidor con SELinux o AppArmor, puede que necesites agregar esta ruta a las rutas permitidas para MySQL, o desactivar el perfil de mysql. Por ejemplo, en Debian/Ubuntu, puedes ejecutar sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart.

mysql_key_buffer_size: "256M"
mysql_max_allowed_packet: "64M"
mysql_table_open_cache: "256"
...

El resto de la configuración en defaults/main.yml controla el uso de memoria de MySQL y algunas otras configuraciones comunes. Los valores predeterminados están ajustados para un servidor donde MySQL puede consumir 512 MB de RAM, así que deberías considerar ajustarlos para que se adapten mejor a tu servidor.

mysql_server_id: "1"
mysql_max_binlog_size: "100M"
mysql_binlog_format: "ROW"
mysql_expire_logs_days: "10"
mysql_replication_role: ''
mysql_replication_master: ''
mysql_replication_user: {}

Configuraciones de replicación. Establece mysql_server_id y mysql_replication_role por servidor (por ejemplo, el maestro tendría ID 1, con el mysql_replication_role de master, y el esclavo tendría ID 2, con el mysql_replication_role de slave). El mysql_replication_user utiliza las mismas claves que los elementos individuales en mysql_users, y se crea en servidores maestros, y se usa para replicar en todos los esclavos.

mysql_replication_master debe resolver a una IP o un nombre de host accesible para los esclavos (esto podría ser una inyección de /etc/hosts u otros medios), de lo contrario, los esclavos no podrán comunicarse con el maestro.

Si el maestro de replicación tiene diferentes direcciones IP donde estás ejecutando Ansible y donde se ejecuta el réplica de MySQL, puedes opcionalmente especificar un mysql_replication_master_inventory_host para acceder a la máquina (por ejemplo, ejecutas ansible en tu máquina local, pero el maestro y el réplica de MySQL deben comunicarse en una red diferente).

mysql_hide_passwords: false

¿Necesitas ocultar la salida de las tareas que contienen contraseñas durante la ejecución?

Versiones más recientes de MySQL en CentOS 7

Si deseas instalar MySQL desde el repositorio oficial en lugar de instalar el sistema por defecto MariaDB, puedes agregar la siguiente tarea pre_tasks en tu playbook:

  pre_tasks:
    - name: Instalar el repositorio de MySQL.
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: Sobrescribir variables para MySQL (RedHat).
      set_fact:
        mysql_daemon: mysqld
        mysql_packages: ['mysql-server']
        mysql_log_error: /var/log/mysqld.err
        mysql_syslog_tag: mysqld
        mysql_pid_file: /var/run/mysqld/mysqld.pid
        mysql_socket: /var/lib/mysql/mysql.sock
      when: ansible_os_family == "RedHat"

Uso de MariaDB

Esta rol funciona con MySQL o una versión compatible de MariaDB. En RHEL/CentOS 7+, el motor de base de datos mariadb fue sustituido como el paquete reemplazo predeterminado de MySQL. No se necesitan modificaciones, aunque todas las variables aún hacen referencia a 'mysql' en lugar de mariadb.

Configuración de MariaDB en Ubuntu 14.04 y 16.04

En Ubuntu, los nombres de los paquetes son diferentes, por lo que la variable mysql_package necesita ser alterada. Establece las siguientes variables (como mínimo):

mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

Dependencias

Si tienes ansible instalado (por ejemplo, pip3 install ansible), ninguna.

Si solo has instalado ansible-core, asegúrate de requerir community.mysql en tu collections/requirements.yml o instálalo manualmente con ansible-galaxy collection install community.mysql.

Ejemplo de Playbook

- hosts: db-servers
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.mysql }

Dentro de vars/main.yml:

mysql_root_password: super-secure-password
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: similarly-secure-password
    priv: "example_db.*:ALL"

Licencia

MIT / BSD

Información del Autor

Esta rol fue creada en 2014 por Jeff Geerling, autor de Ansible for DevOps.

Acerca del proyecto

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Instalar
ansible-galaxy install geerlingguy.mysql
Licencia
mit
Descargas
4.5M
Propietario
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns