pulse-mind.mysql
Rol de Ansible: MySQL
Instala y configura el servidor MySQL o MariaDB en servidores RHEL/CentOS o Debian/Ubuntu.
Requisitos
No hay requisitos especiales; ten en cuenta que este rol requiere acceso root, así que ejecuta este rol en un playbook con become: yes
, o invoca el rol en tu playbook así:
- hosts: database
roles:
- role: geerlingguy.mysql
become: yes
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con valores predeterminados (ver defaults/main.yml
):
mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root
El directorio home donde se almacenarán los ajustes de Python MySQL, que Ansible usará al conectarse a MySQL. Este debería ser el directorio home del usuario que ejecuta este rol de Ansible. Se pueden establecer mysql_user_name
y mysql_user_password
si estás ejecutando este rol bajo una cuenta de usuario no root y deseas configurar un usuario no root.
mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root
Los detalles de la cuenta del 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. Por defecto, este rol solo cambiará la contraseña del usuario root cuando MySQL se configure por primera vez. Puedes forzar una actualización estableciendo esto a yes
.
Nota: Si obtienes un error como
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
después de una ejecución fallida o interrumpida del playbook, esto generalmente significa que la contraseña root no fue actualizada originalmente. Intenta eliminar el archivo.my.cnf
dentro delmysql_user_home
configurado o actualízalo y establecepassword=''
(la contraseña predeterminada no segura). Ejecuta el playbook nuevamente, conmysql_root_password_update
establecido enyes
, y la configuración debería completarse.
Nota: Si obtienes un error como
ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES)
al intentar iniciar sesión desde la CLI, es posible que necesites ejecutarlo como root o usar sudo.
mysql_enabled_on_startup: true
Si MySQL debe estar habilitado al inicio.
mysql_config_file: *el valor predeterminado depende del SO*
mysql_config_include_dir: *el valor predeterminado depende del SO*
El archivo de configuración principal my.cnf y el directorio de inclusión.
overwrite_global_mycnf: true
Si el my.cnf global debe ser sobrescrito cada vez que se ejecuta este rol. Configurarlo en no
le dice a Ansible que solo debe crear el archivo my.cnf
si no existe. Esto debe dejarse en su valor predeterminado (yes
) si deseas usar las variables de este rol para configurar MySQL.
mysql_config_include_files: []
Una lista de archivos que deberían sobrescribir el my.cnf global predeterminado. Cada elemento en la lista 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 por defecto es utf8
), collation
(que por defecto es utf8_general_ci
) y replicate
(que por defecto es 1
, solo se usa si se configura la replicación). 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) configurando state
a absent
(que por defecto es present
).
mysql_users: []
Los usuarios de MySQL y sus privilegios. Un usuario tiene los valores:
name
host
(que por defecto eslocalhost
)password
(puede ser texto plano o encriptado—si está encriptado, estableceencrypted: yes
)encrypted
(que por defecto esno
)priv
(que por defecto es*.*:USAGE
)append_privs
(que por defecto esno
)state
(que por defecto espresent
)
Los formatos de estos son los mismos que en el módulo mysql_user
.
mysql_packages:
- mysql
- mysql-server
(Dependiendo del SO, los valores predeterminados para RedHat/CentOS se enumeran aquí) Paquetes a instalar. En algunas situaciones, puede que necesites agregar paquetes adicionales, como mysql-devel
.
mysql_enablerepo: ""
(Solo para RedHat/CentOS) Si has habilitado repositorios adicionales (podrías considerar geerlingguy.repo-epel o geerlingguy.repo-remi), esos repositorios pueden ser listados bajo esta variable (por ejemplo, remi,epel
). Esto puede ser útil si deseas instalar versiones más recientes de MySQL.
mysql_python_package_debian: python3-mysqldb
(Solo para Ubuntu/Debian) Si necesitas sobrescribir explícitamente el paquete de Python de MySQL, puedes configurarlo aquí. Establece esto 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 registro 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
Configuraciones del registro de consultas lentas. Ten en cuenta que el archivo de registro será creado por este rol, pero si estás en un servidor con SELinux o AppArmor, es posible que debas agregar esta ruta a las rutas permitidas para MySQL o desactivar el perfil 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 los ajustes en defaults/main.yml
controla el uso de memoria de MySQL y algunos otros ajustes comunes. Los valores predeterminados están ajustados para un servidor donde MySQL puede consumir 512 MB de RAM, así que debes considerar ajustarlos para que se adapten mejor a tu servidor específico.
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 los servidores maestros, y se usa para replicar en todos los esclavos.
mysql_replication_master
necesita resolverse a una IP o un nombre de host que sea accesible para los Esclavos (esto podría ser una inyección de /etc/hosts
u otro medio), 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 está ejecutando la 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 la réplica de MySQL necesitan comunicarse en otra red).
Versiones más recientes de MySQL en CentOS 7
Si deseas instalar MySQL desde el repositorio oficial en lugar de instalar los equivalentes predeterminados de MariaDB del sistema, 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: Sobreescribir 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
Este rol funciona tanto con MySQL como con una versión compatible de MariaDB. En RHEL/CentOS 7+, el motor de base de datos mariadb se sustituyó como el paquete predeterminado en reemplazo de MySQL. No se requieren 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
), no hay.
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
Este rol fue creado en 2014 por Jeff Geerling, autor de Ansible for DevOps.
MySQL server for RHEL/CentOS and Debian/Ubuntu.
ansible-galaxy install pulse-mind.mysql