pulse-mind.mysql
Ansible Rolle: MySQL
Installiert und konfiguriert MySQL oder MariaDB auf RHEL/CentOS oder Debian/Ubuntu-Servern.
Anforderungen
Keine besonderen Anforderungen; beachten Sie, dass diese Rolle Root-Zugriff benötigt. Führen Sie sie entweder in einem Playbook mit become: yes
aus oder rufen Sie die Rolle in Ihrem Playbook so auf:
- hosts: database
roles:
- role: geerlingguy.mysql
become: yes
Rollenvariablen
Verfügbare Variablen sind unten aufgelistet, zusammen mit Standardwerten (siehe defaults/main.yml
):
mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root
Das Home-Verzeichnis, in dem Python MySQL-Einstellungen gespeichert werden, die Ansible verwendet, um sich mit MySQL zu verbinden. Dies sollte das Home-Verzeichnis des Benutzers sein, der diese Ansible-Rolle ausführt. Die Werte mysql_user_name
und mysql_user_password
können gesetzt werden, wenn Sie die Rolle unter einem Nicht-Root-Benutzerkonto ausführen und einen Nicht-Root-Benutzer festlegen möchten.
mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root
Die Anmeldedaten des MySQL-Root-Benutzers.
mysql_root_password_update: false
Ob das Passwort des MySQL-Root-Benutzers aktualisiert werden soll. Standardmäßig ändert diese Rolle das Passwort des Root-Benutzers nur, wenn MySQL zum ersten Mal konfiguriert wird. Sie können ein Update erzwingen, indem Sie dies auf ja
setzen.
Hinweis: Wenn Sie eine Fehlermeldung wie
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
nach einem fehlgeschlagenen oder unterbrochenen Playbook-Lauf erhalten, bedeutet dies meist, dass das Root-Passwort ursprünglich nicht aktualisiert wurde. Versuchen Sie, die.my.cnf
-Datei im konfiguriertenmysql_user_home
zu entfernen oder zu aktualisieren undpassword=''
(das unsichere Standardpasswort) zu setzen. Führen Sie das Playbook erneut mitmysql_root_password_update
aufja
, und die Einrichtung sollte abgeschlossen sein.
Hinweis: Wenn Sie beim Anmelden über die CLI eine Fehlermeldung wie
ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES)
erhalten, müssen Sie möglicherweise als Root oder sudoer arbeiten.
mysql_enabled_on_startup: true
Ob MySQL beim Systemstart aktiviert sein soll.
mysql_config_file: *Standardwert hängt vom OS ab*
mysql_config_include_dir: *Standardwert hängt vom OS ab*
Die Hauptkonfigurationsdatei my.cnf und das Verzeichnis für Einschlussdateien.
overwrite_global_mycnf: true
Ob die globale my.cnf bei jedem Ausführen dieser Rolle überschrieben werden soll. Wenn Sie dies auf nein
setzen, wird Ansible nur die my.cnf
-Datei erstellen, wenn sie nicht existiert. Dies sollte auf dem Standardwert (ja
) belassen werden, wenn Sie die Variablen dieser Rolle zur Konfiguration von MySQL verwenden möchten.
mysql_config_include_files: []
Eine Liste von Dateien, die die Standard-Globale my.cnf überschreiben sollen. Jedes Element im Array benötigt einen "src"-Parameter, der ein Pfad zu einer Datei ist. Ein optionaler "force"-Parameter kann die Datei bei jedem Ansible-Lauf aktualisieren.
mysql_databases: []
Die MySQL-Datenbanken, die erstellt werden sollen. Eine Datenbank hat die Werte name
, encoding
(standardmäßig utf8
), collation
(standardmäßig utf8_general_ci
) und replicate
(standardmäßig 1
, nur verwendet, wenn eine Replikation konfiguriert ist). Diese Formate sind die gleichen wie im mysql_db
-Modul.
Sie können auch eine Datenbank löschen (oder sicherstellen, dass sie nicht auf dem Server vorhanden ist), indem Sie state
auf absent
setzen (standardmäßig present
).
mysql_users: []
Die MySQL-Benutzer und deren Berechtigungen. Ein Benutzer hat die Werte:
name
host
(standardmäßiglocalhost
)password
(kann im Klartext oder verschlüsselt sein – wenn verschlüsselt, setzen Sieencrypted: ja
)encrypted
(standardmäßignein
)priv
(standardmäßig*.*:USAGE
)append_privs
(standardmäßignein
)state
(standardmäßigpresent
)
Die Formate sind die gleichen wie im mysql_user
-Modul.
mysql_packages:
- mysql
- mysql-server
(Betriebssystemspezifisch; hier die Standardwerte für RedHat/CentOS) Zu installierende Pakete. In einigen Fällen müssen Sie zusätzliche Pakete wie mysql-devel
hinzufügen.
mysql_enablerepo: ""
(Nur RedHat/CentOS) Wenn Sie zusätzliche Repositories aktiviert haben (z.B. geerlingguy.repo-epel oder geerlingguy.repo-remi), können diese unter dieser Variablen aufgeführt werden (z.B. remi,epel
). Dies kann nützlich sein, wenn Sie spätere Versionen von MySQL installieren möchten.
mysql_python_package_debian: python3-mysqldb
(Nur Ubuntu/Debian) Wenn Sie das MySQL-Python-Paket explizit überschreiben müssen, können Sie es hier einstellen. Setzen Sie es auf python-mysqldb
, wenn Sie ältere Distributionen mit Python 2 verwenden.
mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *Standardwert hängt vom OS ab*
mysql_pid_file: *Standardwert hängt vom OS ab*
Standard MySQL-Verbindungs-Konfiguration.
mysql_log_file_group: mysql *adm auf Debian*
mysql_log: ""
mysql_log_error: *Standardwert hängt vom OS ab*
mysql_syslog_tag: *Standardwert hängt vom OS ab*
MySQL-Protokollkonfiguration. Wenn mysql_log
(das allgemeine Abfragetagebuch) oder mysql_log_error
auf syslog
gesetzt wird, protokolliert MySQL in den syslog mit dem mysql_syslog_tag
.
mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *Standardwert hängt vom OS ab*
mysql_slow_query_time: 2
Einstellungen für das langsame Abfragetagebuch. Beachten Sie, dass die Protokolldatei von dieser Rolle erstellt wird, aber wenn Sie auf einem Server mit SELinux oder AppArmor laufen, müssen Sie möglicherweise diesen Pfad zu den erlaubten Pfaden für MySQL hinzufügen oder das MySQL-Profil deaktivieren. Beispiel: Auf Debian/Ubuntu können Sie sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart
ausführen.
mysql_key_buffer_size: "256M"
mysql_max_allowed_packet: "64M"
mysql_table_open_cache: "256"
...
Die restlichen Einstellungen in defaults/main.yml
steuern die Speichernutzung von MySQL und einige andere gängige Einstellungen. Die Standardwerte sind für einen Server optimiert, auf dem MySQL 512 MB RAM konsumieren kann, daher sollten Sie in Betracht ziehen, sie an Ihren spezifischen Server anzupassen.
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: {}
Einstellungen zur Replikation. Setzen Sie mysql_server_id
und mysql_replication_role
je nach Server (z.B. könnte der Master ID 1
mit der mysql_replication_role
von master
und der Slave ID 2
mit der mysql_replication_role
von slave
haben). Der mysql_replication_user
verwendet die gleichen Schlüssel wie die einzelnen Listenelemente in mysql_users
und wird auf Master-Servern erstellt und zur Replikation auf allen Slaves verwendet.
mysql_replication_master
muss zu einer IP oder einem Hostnamen aufgelöst werden, der für die Slaves zugänglich ist (dies könnte eine /etc/hosts
-Injektion oder eine andere Methode sein), andernfalls können die Slaves nicht mit dem Master kommunizieren.
Wenn der Replikationsmaster unterschiedliche IP-Adressen hat, an denen Sie Ansible und wo die MySQL-Replikat ausgeführt wird, können Sie optional einen mysql_replication_master_inventory_host
spezifizieren, um auf die Maschine zuzugreifen (z.B. führen Sie Ansible auf Ihrem lokalen Computer aus, aber der MySQL-Master und das Replikat müssen in einem anderen Netzwerk kommunizieren).
Spätere Versionen von MySQL auf CentOS 7
Wenn Sie MySQL aus dem offiziellen Repository installieren möchten, anstatt die standardmäßigen MariaDB-Äquivalente zu installieren, können Sie die folgende pre_tasks
-Aufgabe in Ihrem Playbook hinzufügen:
pre_tasks:
- name: MySQL-Repo installieren.
yum:
name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
state: present
when: ansible_os_family == "RedHat"
- name: Variablen für MySQL (RedHat) überschreiben.
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"
Verwendung von MariaDB
Diese Rolle funktioniert sowohl mit MySQL als auch mit einer kompatiblen Version von MariaDB. Auf RHEL/CentOS 7+ wurde die MariaDB-Datenbank-Engine als Standard-MySQL-Ersatzpaket eingesetzt. Es sind keine Änderungen erforderlich, obwohl alle Variablen weiterhin auf 'mysql' anstelle von mariadb verweisen.
MariaDB-Konfiguration auf Ubuntu 14.04 und 16.04
Auf Ubuntu werden die Paketnamen anders benannt. Daher muss die Variable mysql_package
geändert werden. Setzen Sie die folgenden Variablen (mindestens):
mysql_packages:
- mariadb-client
- mariadb-server
- python-mysqldb
Abhängigkeiten
Wenn Sie ansible
installiert haben (z.B. pip3 install ansible
), sind keine erforderlich.
Wenn Sie nur ansible-core
installiert haben, stellen Sie sicher, dass Sie community.mysql
in Ihre collections/requirements.yml
aufnehmen oder es manuell mit ansible-galaxy collection install community.mysql
installieren.
Beispiel-Playbook
- hosts: db-servers
become: yes
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.mysql }
In vars/main.yml
:
mysql_root_password: super-sicheres-passwort
mysql_databases:
- name: beispiel_datenbank
encoding: latin1
collation: latin1_general_ci
mysql_users:
- name: beispiel_benutzer
host: "%"
password: ebenso-sicheres-passwort
priv: "beispiel_datenbank.*:ALL"
Lizenz
MIT / BSD
Autor Informationen
Diese Rolle wurde 2014 von Jeff Geerling erstellt, dem Autor von Ansible for DevOps.
ansible-galaxy install pulse-mind.mysql