pulse-mind.mysql

Ansible Rolle: MySQL

CI

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 konfigurierten mysql_user_home zu entfernen oder zu aktualisieren und password='' (das unsichere Standardpasswort) zu setzen. Führen Sie das Playbook erneut mit mysql_root_password_update auf ja, 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äßig localhost)
  • password (kann im Klartext oder verschlüsselt sein – wenn verschlüsselt, setzen Sie encrypted: ja)
  • encrypted (standardmäßig nein)
  • priv (standardmäßig *.*:USAGE)
  • append_privs (standardmäßig nein)
  • state (standardmäßig present)

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.

Über das Projekt

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Installieren
ansible-galaxy install pulse-mind.mysql
GitHub Repository
Lizenz
mit
Downloads
133
Besitzer