mjanser.mysql
Ansible Rolle: mysql
Eine Ansible-Rolle, die den MySQL- oder MariaDB-Server auf Fedora, Debian und Ubuntu installiert.
Die Upstream-Versionen von MySQL werden für Debian und Ubuntu von https://dev.mysql.com/downloads/repo/apt/ und für Fedora von https://dev.mysql.com/downloads/repo/yum/ installiert.
Für MariaDB werden die Repositories von https://downloads.mariadb.org/mariadb/repositories/ verwendet.
Anforderungen
Um die Firewall zu konfigurieren, muss der Dienst firewalld
laufen und das Paket python-firewall
installiert sein.
Rollenvariablen
Verfügbare Variablen sind unten aufgelistet, zusammen mit den Standardwerten:
mysql_vendor: mysql
mysql_origin: distribution
mysql_upstream_version: ~ # MariaDB: 10.2, MySQL: 5.7
mysql_root_password: "Mein $3cr3t Passwort"
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: "Mein $3cr3t Passwort"
mysql_firewall_zones: []
mysql_databases: []
mysql_users: []
Anbieter und Ursprung
Diese Ansible-Rolle unterstützt die Installation von MySQL und MariaDB aus den Distributionen oder von Upstream-Paketen.
Der Anbieter kann in der Variable mysql_vendor
festgelegt werden, die die Werte mysql
und mariadb
unterstützt. Der Standardanbieter ist mysql
.
Die Variable mysql_origin
bestimmt, woher die Pakete stammen. Der Standardwert distribution
bedeutet, dass die Pakete aus der Distribution installiert werden. Bei dieser Konfiguration bestimmt die Distribution die Version und kann nicht geändert werden.
Wenn die Variable mysql_origin
auf upstream
gesetzt wird, werden die Pakete von MySQL/MariaDB installiert. Dies geschieht über die Repositories von https://downloads.mariadb.org/mariadb/repositories/. In diesem Setup kann die Version in der Variablen mysql_upstream_version
angegeben werden.
Root-Benutzer
Das in der Variablen mysql_root_password
festgelegte Passwort wird während der Installation als Root-Passwort gesetzt. Dies sollte auf ein sicheres Passwort geändert werden.
Der Root-Benutzer kann nur von localhost aus eine Verbindung herstellen. Alle Einträge von entfernten Hosts werden entfernt.
Zusätzlich werden anonyme Benutzer und die Testdatenbank entfernt.
Zeitzonenimport
Die Zeitzonendaten werden standardmäßig importiert (siehe https://dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to-sql.html). Um dieses Verhalten zu ändern, kann die Variable mysql_import_timezones
auf no
gesetzt werden.
Netzwerke
Standardmäßig hört der Server auf allen IPv4-Interfaces des Hosts. Dies kann geändert werden, indem die Variable mysql_bind_address
auf eine andere Adresse als 0.0.0.0
gesetzt wird.
Optionen
Es gibt einige Optionen, die angepasst werden können und Standardwerte haben. Weitere Informationen finden Sie oben oder in defaults/tasks.yml und der Dokumentation.
SSL
Um SSL-Unterstützung zu aktivieren, müssen die Variablen mysql_ssl_ca
, mysql_ssl_cert
und mysql_ssl_key
konfiguriert werden.
Benutzerdefinierte Konfiguration
Zusätzliche Konfigurationen können in der Variablen mysql_custom_config
definiert werden, zum Beispiel:
mysql_custom_config: |
skip_name_resolve
skip-locking
Backup
Obwohl Backups standardmäßig deaktiviert sind, kann ein automatisches tägliches Backup-Skript aktiviert werden, indem mysql_backup
auf yes
gesetzt wird.
Es werden einfach alle Datenbanken in das Verzeichnis geschrieben, das in mysql_backup_destination
als SQL-Datei mit einem Zeitstempel definiert ist. Zusätzlich wird die neueste Backup-Datei pro Datenbank mit [database]_latest.sql
verlinkt.
Ein Datenbankbenutzer für das Backup wird automatisch mit dem in der Variablen mysql_backup_password
festgelegten Passwort erstellt. Achten Sie darauf, diese Variable auf ein sicheres Passwort zu setzen, da sie standardmäßig leer ist und ein Fehler auftritt, wenn Backups aktiviert sind und dieses Passwort nicht gesetzt ist.
Firewall
Die Variable mysql_firewall_zones
kann verwendet werden, um Firewall-Zonen zu deklarieren, in denen Nginx erreichbar sein soll. Das bedeutet, dass die Ports 3306/tcp
geöffnet werden.
Derzeit wird nur firewalld
unterstützt, das standardmäßig auf Fedora vorinstalliert ist.
Datenbanken
Zu erstellende Datenbanken können in der Variablen mysql_databases
definiert werden. Mögliche Werte für jeden Eintrag in mysql_databases
sind, zusammen mit Standardwerten:
name: ~
collation: utf8_general_ci
encoding: utf8
import_file: ~
Name
Im Schlüssel name
können Sie den Namen der Datenbank festlegen.
Sortierung und Kodierung
Um die Sortierung und Kodierung anzupassen, können Sie diese in collaction
und encoding
setzen.
Import
Es besteht die Möglichkeit, einen Pfad zu einer SQL-Datei in import_file
festzulegen, die nach der Erstellung der Datenbank importiert wird. Dies kann für den Import von Backups verwendet werden.
Wenn die Datenbank bereits existiert, wird nichts importiert.
Benutzer
Datenbankbenutzer können in der Variablen mysql_users
definiert werden. Mögliche Werte für jeden Eintrag in mysql_users
sind, zusammen mit Standardwerten:
name: ~
password: ~
host: localhost
privileges: "*.*:USAGE"
append_privileges: no
Anmeldedaten
Die Schlüssel name
und password
definieren die Anmeldedaten des Benutzers. Der Benutzer kann nur vom Host aus, der in host
festgelegt ist, auf den Server zugreifen. Ein Wert von %
erlaubt es ihm, von jedem Host zuzugreifen.
Berechtigungen
Berechtigungen können in privileges
als String definiert werden, siehe MySQL- oder MariaDB-Handbuch für weitere Informationen. Wenn append_privileges
auf yes
gesetzt ist, werden die definierten Berechtigungen zu den bereits vorhandenen hinzugefügt.
Abhängigkeiten
Keine
Beispiel-Playbook
- hosts: all
roles:
- { role: mjanser.mysql }
vars:
mysql_root_password: geheim
mysql_databases:
- name: my_db
mysql_users:
- name: my_user
password: geheim
privileges: "my_db.*:ALL"
Lizenz
MIT
ansible-galaxy install mjanser.mysql