geerlingguy.mysql

Ansible Rolle: MySQL

CI

Installiert und konfiguriert MySQL oder MariaDB-Server auf RHEL/CentOS oder Debian/Ubuntu-Servern.

Voraussetzungen

Es sind keine besonderen Anforderungen erforderlich; beachten Sie, dass diese Rolle Root-Zugriff benötigt, also führen Sie sie in einem Playbook mit become: yes aus oder rufen Sie die Rolle in Ihrem Playbook wie folgt 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 die 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 mysql_user_name und mysql_user_password können festgelegt werden, wenn Sie diese 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 Details des MySQL-Root-Benutzerkontos.

mysql_root_password_update: false

Ob das Passwort des MySQL-Root-Benutzers gezwungen aktualisiert werden soll. Standardmäßig ändert diese Rolle das Passwort des Root-Benutzers nur, wenn MySQL zuerst konfiguriert wird. Sie können ein Update erzwingen, indem Sie dies auf yes setzen.

Hinweis: Wenn Sie nach einem fehlgeschlagenen oder unterbrochenen Playbook-Lauf einen Fehler wie ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) erhalten, bedeutet dies normalerweise, 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 aus, wobei mysql_root_password_update auf yes gesetzt ist, und die Einrichtung sollte abgeschlossen sein.

Hinweis: Wenn Sie einen Fehler wie ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES) erhalten, wenn Sie versuchen, sich über die CLI anzumelden, müssen Sie möglicherweise als Root oder Sudoer arbeiten.

mysql_enabled_on_startup: true

Ob MySQL beim Start aktiviert werden 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 Einschlussverzeichnis.

overwrite_global_mycnf: true

Ob die globale my.cnf bei jedem Ausführen dieser Rolle überschrieben werden soll. Wenn Sie dies auf no setzen, sagt dies Ansible, dass die my.cnf-Datei nur erstellt werden soll, wenn sie nicht existiert. Dies sollte auf dem Standardwert (yes) belassen werden, wenn Sie die Variablen dieser Rolle verwenden möchten, um MySQL zu konfigurieren.

mysql_config_include_files: []

Eine Liste von Dateien, die die globale my.cnf überschreiben sollen. Jedes Element im Array erfordert einen "src"-Parameter, der einen Pfad zu einer Datei angibt. Ein optionaler "force"-Parameter kann die Datei bei jedem Ausführen von Ansible 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, wird nur verwendet, wenn Replikation konfiguriert ist). Die Formate dieser Werte sind dieselben wie im mysql_db-Modul.

Sie können auch eine Datenbank löschen (oder sicherstellen, dass sie nicht auf dem Server ist), indem Sie state auf absent setzen (standardmäßig present).

mysql_users: []

Die MySQL-Benutzer und ihre 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: yes)
  • encrypted (standardmäßig no)
  • priv (standardmäßig *.*:USAGE)
  • append_privs (standardmäßig no)
  • state (standardmäßig present)

Die Formate dieser Werte sind dieselben wie im mysql_user-Modul.

mysql_packages:
  - mysql
  - mysql-server

(Spezifisch für das OS, Standardwerte für RedHat/CentOS hier aufgeführt) Zu installierende Pakete. In einigen Situationen müssen Sie zusätzliche Pakete hinzufügen, z. B. mysql-devel.

mysql_enablerepo: ""

(Nur RedHat/CentOS) Wenn Sie zusätzliche Repositories aktiviert haben (ich empfehle geerlingguy.repo-epel oder geerlingguy.repo-remi), können diese Repositories unter dieser Variable aufgelistet werden (z. B. remi,epel). Dies kann praktisch 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 ausdrücklich überschreiben müssen, können Sie es hier festlegen. Setzen Sie dies 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*

Standardkonfiguration für MySQL-Verbindungen.

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-Protokollierungs-Konfiguration. Das Setzen von mysql_log (das allgemeine Abfrageprotokoll) oder mysql_log_error auf syslog bewirkt, dass MySQL in syslog mit dem mysql_syslog_tag protokolliert.

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 Abfrageprotokoll. Beachten Sie, dass die Protokolldatei von dieser Rolle erstellt wird, aber wenn Sie auf einem Server mit SELinux oder AppArmor arbeiten, müssen Sie diesen Pfad möglicherweise zu den erlaubten Pfaden für MySQL hinzufügen oder das MySQL-Profil deaktivieren. Beispielsweise können Sie auf Debian/Ubuntu 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 den Speicherverbrauch von MySQL und einige andere allgemeine Einstellungen. Die Standardwerte sind für einen Server optimiert, auf dem MySQL 512 MB RAM verbrauchen kann, sodass Sie in Betracht ziehen sollten, diese 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: {}

Replikationseinstellungen. Setzen Sie mysql_server_id und mysql_replication_role pro Server (z.B. hätte der Master die ID 1 mit der mysql_replication_role von master, und der Slave hätte die ID 2 mit der mysql_replication_role von slave). Der mysql_replication_user verwendet dieselben Schlüssel wie individuelle Listenelemente in mysql_users und wird auf Master-Servern erstellt und für die Replikation auf allen Slaves verwendet.

mysql_replication_master muss auf eine IP oder einen Hostnamen verweisen, der für die Slaves zugänglich ist (dies könnte eine /etc/hosts-Injektion oder ein anderes Mittel sein), andernfalls können die Slaves nicht mit dem Master kommunizieren.

Wenn der Replikationsmaster unterschiedliche IP-Adressen hat, an denen Sie Ansible ausführen und wo das MySQL-Replica läuft, können Sie optional einen mysql_replication_master_inventory_host angeben, um die Maschine zu erreichen (z.B. Sie führen Ansible auf Ihrem lokalen Computer aus, aber der MySQL-Master und das Replica müssen in einem anderen Netzwerk kommunizieren).

mysql_hide_passwords: false

Müssen Sie die Ausgabe von Aufgaben verbergen, die während der Ausführung Passwörter enthalten?

Neuere Versionen von MySQL auf CentOS 7

Wenn Sie MySQL aus dem offiziellen Repository installieren möchten, anstatt die systemstandardmäßigen MariaDB-Äquivalente zu installieren, können Sie die folgende pre_tasks-Aufgabe in Ihrem Playbook hinzufügen:

  pre_tasks:
    - name: Installieren Sie das MySQL-Repo.
      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 überschreiben (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"

Nutzung 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 eingeführt. Es sind keine Änderungen erforderlich, obwohl alle Variablen weiterhin 'mysql' anstelle von 'mariadb' referenzieren.

MariaDB-Konfiguration für Ubuntu 14.04 und 16.04

Unter Ubuntu haben die Paketnamen andere Bezeichnungen, daher muss die mysql_package-Variable 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 Ihrer collections/requirements.yml anfordern 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: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: ebenso-sicher-passwort
    priv: "example_db.*:ALL"

Lizenz

MIT / BSD

Autorinformationen

Diese Rolle wurde 2014 von Jeff Geerling erstellt, Autor von Ansible for DevOps.

Über das Projekt

MySQL server for RHEL/CentOS and Debian/Ubuntu.

Installieren
ansible-galaxy install geerlingguy.mysql
Lizenz
mit
Downloads
4.5M
Besitzer
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns