mjanser.mysql
Ansible Role: mysql
Un rol de Ansible que instala el servidor MySQL o MariaDB en Fedora, Debian y Ubuntu.
Las versiones oficiales de MySQL se instalarán desde https://dev.mysql.com/downloads/repo/apt/ para Debian y Ubuntu, y desde https://dev.mysql.com/downloads/repo/yum/ para Fedora.
Para MariaDB, se utilizarán los repositorios de https://downloads.mariadb.org/mariadb/repositories/.
Requisitos
Para configurar el firewall, el servicio firewalld
debe estar en funcionamiento y el paquete python-firewall
debe estar instalado.
Variables del rol
Las variables disponibles se enumeran a continuación, junto con los valores predeterminados:
mysql_vendor: mysql
mysql_origin: distribution
mysql_upstream_version: ~ # MariaDB: 10.2, MySQL: 5.7
mysql_root_password: "Mi $3cr3t password"
mysql_import_timezones: yes
mysql_bind_address: 0.0.0.0
mysql_key_buffer_size: 256M
mysql_max_allowed_packet: 1M
mysql_table_open_cache: 256
mysql_sort_buffer_size: 1M
mysql_read_buffer_size: 1M
mysql_read_rnd_buffer_size: 4M
mysql_net_buffer_length: 1M
mysql_myisam_sort_buffer_size: 64M
mysql_thread_cache_size: 8
mysql_query_cache_size: 16M
mysql_max_connections: ~
mysql_thread_concurrency: ~
mysql_ssl_ca: ~
mysql_ssl_cert: ~
mysql_ssl_key: ~
mysql_custom_config: ~
mysql_backup: no
mysql_backup_destination: /var/lib/backup/database
mysql_backup_password: "Mi $3cr3t password"
mysql_firewall_zones: []
mysql_databases: []
mysql_users: []
Proveedor y origen
Este rol de Ansible admite la instalación de MySQL y MariaDB a partir de paquetes de distribución o de paquetes oficiales.
El proveedor se puede establecer en la variable mysql_vendor
, que acepta los valores mysql
y mariadb
.
El proveedor predeterminado es mysql
.
La variable mysql_origin
define de dónde provienen los paquetes.
El valor predeterminado distribution
significa que se instalarán los paquetes de la distribución.
Con esta configuración, la distribución define la versión y no se puede cambiar.
Si la variable mysql_origin
se establece en upstream
, se instalará el paquete de MySQL/MariaDB.
Esto se hace utilizando los repositorios de https://downloads.mariadb.org/mariadb/repositories/.
En esta configuración, la versión se puede especificar en la variable mysql_upstream_version
.
Usuario root
La contraseña definida en la variable mysql_root_password
se establecerá como la contraseña de root durante la instalación.
Esto debe cambiarse a una contraseña segura.
El usuario root solo podrá conectarse desde el host local. Todas las entradas de hosts remotos serán eliminadas.
Adicionalmente, se eliminarán los usuarios anónimos y la base de datos de prueba.
Importación de zonas horarias
Los datos de zonas horarias se importarán por defecto (ver https://dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to-sql.html).
Para cambiar este comportamiento, ajusta la variable mysql_import_timezones
a no
.
Redes
Por defecto, el servidor escucha en todas las interfaces IPv4 en el host.
Esto se puede cambiar configurando la variable mysql_bind_address
a otra dirección que no sea 0.0.0.0
.
Opciones
Existen algunas opciones que se pueden ajustar y que tienen valores predeterminados. Consulta arriba o en defaults/tasks.yml y la documentación para más información.
SSL
Para habilitar el soporte SSL, las variables mysql_ssl_ca
, mysql_ssl_cert
y mysql_ssl_key
deben configurarse.
Configuración personalizada
Se puede definir una configuración adicional en la variable mysql_custom_config
, por ejemplo:
mysql_custom_config: |
skip_name_resolve
skip-locking
Respaldo
Mientras que las copias de seguridad están desactivadas por defecto, se puede habilitar un script de respaldo automático diario estableciendo mysql_backup
en yes
.
Este simplemente guarda todas las bases de datos en el directorio definido en mysql_backup_destination
como un archivo SQL con un timestamp.
Además, enlaza el archivo de respaldo más reciente por base de datos a [database]_latest.sql
.
Un usuario de base de datos para el respaldo será creado automáticamente con la contraseña establecida en la variable mysql_backup_password
.
Asegúrate de configurar esta variable con una contraseña adecuada, ya que está vacía por defecto y se generará un error si se habilitan copias de seguridad y esta contraseña no está configurada.
Firewall
La variable mysql_firewall_zones
se puede utilizar para declarar zonas del firewall en las que nginx debe ser accesible.
Esto significa que los puertos 3306/tcp
se abrirán.
Actualmente, solo se admite firewalld
, que es el predeterminado en Fedora.
Bases de datos
Las bases de datos a crear se pueden definir en la variable mysql_databases
.
Los valores posibles para cada entrada en mysql_databases
son, junto con los valores predeterminados:
name: ~
collation: utf8_general_ci
encoding: utf8
import_file: ~
Nombre
En la clave name
puedes establecer el nombre de la base de datos.
Ordenación y codificación
Para ajustar la ordenación y la codificación, puedes configurarlas en collaction
y encoding
.
Importar
Existe la posibilidad de establecer una ruta a un archivo SQL en import_file
que se importará después de crear la base de datos.
Esto se puede utilizar para importar respaldos.
Si la base de datos ya existe, no se importará nada.
Usuarios
Los usuarios de bases de datos se pueden definir en la variable mysql_users
.
Los valores posibles para cada entrada en mysql_users
son, junto con los valores predeterminados:
name: ~
password: ~
host: localhost
privileges: "*.*:USAGE"
append_privileges: no
Credenciales
Las claves name
y password
definen las credenciales del usuario.
El usuario solo puede acceder al servidor desde el host configurado en host
. Un valor de %
permitirá el acceso desde cualquier host.
Privilegios
Los privilegios se pueden definir en privileges
como una cadena; consulta el manual de MySQL o MariaDB para más información.
Si append_privileges
está configurado como yes
, los privilegios definidos se agregarán a los ya existentes.
Dependencias
Ninguna
Ejemplo de Playbook
- hosts: all
roles:
- { role: mjanser.mysql }
vars:
mysql_root_password: secret
mysql_databases:
- name: my_db
mysql_users:
- name: my_user
password: secret
privileges: "my_db.*:ALL"
Licencia
MIT
ansible-galaxy install mjanser.mysql