GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Verwenden von Ansible zum Installieren und Initialisieren von MySQL 8 auf Rocky Linux/Centos 8

MySQL ist ein relationales Open-Source-Datenbankverwaltungssystem. Es ist eines der beliebtesten relationalen Verwaltungssysteme.
Mysql wird üblicherweise als Teil des beliebten LAMP- oder LEMP-Stacks (Linux, Apache/Nginx, MySQL/MariaDB, PHP/Python/Perl) installiert.

In dieser Anleitung verwenden wir mysql 8 auf Centos 8. Diese Anleitung funktioniert auch auf anderen RHEL 8-Derivaten wie Rocky Linux 8 und Alma Linux 8

Überprüfen Sie auch:

  • So installieren und konfigurieren Sie mysql 8 unter Ubuntu 20.04
  • Installieren und Konfigurieren von MySQL Server 8 auf Centos 8
  • So installieren und konfigurieren Sie MySQL Server 8 auf Fedora 34/35
  • Mysql-Berechtigungen – Datenbankbenutzer erstellen, aktualisieren, löschen
  • Nginx, WordPress und MySQL 8 in Centos 8 installieren und einrichten
  • Erstellen Sie eine RDS-Instanz in Terraform mit einem Mariadb-Beispiel

Anforderungen

  • Internetverbindung
  • Ansible lokal installiert

Die hosts-Datei

Wir benötigen die Hosts-Datei, die die Server definiert, auf die wir abzielen:

all:
  hosts:
    db-server:
      ansible_ssh_host: 192.168.10.2
      ansible_ssh_user: centos
      ansible_ssh_private_key_file: ~/.ssh/server_key

Die obige Yaml-Datei definiert einen Server db-server das hat die IP 192.168.10.2 und kann mit dem Benutzer centos aufgerufen werden und ~/.ssh/server_key .

Testen Sie das mit:

ssh -i ~/.ssh/server_key [email protected]

Das Ansible-Playbook

Bevor wir unsere Aufgaben definieren, müssen wir ansible ein paar Dinge sagen:

- name: Install mysql server 8 and initialize
  hosts: db-server
  gather_facts: false
  become: true
  vars:
    mysql_root_password: 'secure-root-pw'
    ansible_python_interpreter: /usr/bin/python3

Erklärung:

  • name definiert das Playbook einen beschreibenden Namen dessen, was es tut, es ist nicht zwingend erforderlich, dies zu haben.
  • hosts definiert die Zielhosts wie in hosts definiert oder hosts.yaml oben definierte Datei.
  • gather_facts definiert, ob ansible vor der Bearbeitung der Aufgaben Fakten sammeln soll. in unserem Fall wollen wir nicht
  • become definiert, dass wir unsere Aufgaben als root ausführen wollen
  • vars definiert die Variablen, die wir in unseren Aufgaben wiederverwenden möchten. Wir haben mysql_root_password definiert und ansible_python_interpreter in unserem Fall

Die ansiblen Aufgaben

Nach dem obigen Abschnitt müssen wir nun unsere Aufgaben definieren. Diese Aufgaben können entweder in einer Rolle hinzugefügt oder als Aufgaben angegeben werden. In unserem Fall werden wir sie als Aufgaben verwenden (das vollständige Playbook finden Sie am Ende dieser Anleitung).

Stellen Sie sicher, dass die erforderliche Software installiert ist

Bevor wir fortfahren, möchten wir die gesamte Software installieren, die wir benötigen. Dazu gehört die mysql-spezifische Software mysql-server und mysql-devel und unterstützende Software wie Python-bezogene Software, die von Ansible verwendet wird, um eine Verbindung zur mysql-Serverinstanz herzustellen und diese einzurichten. Wir verwenden das ansible dnf Modul, um dies zu tun.

- name: Ensure required packages are installed
  dnf:
    name:
      - mysql-server
      - mysql-devel
      - python39
      - python39-devel
      - python39-pip
      - gcc
    state: latest

Installieren Sie die erforderlichen Pip-Module

Ansible verwendet den PyMySQL Modul in Python3 zum Verbinden und Einrichten des MySQL-Servers. Installieren Sie es mit ansible pip Modul

- name: Install Required pip modules
  pip:
    name:
      - PyMySQL
    state: present
    executable: pip3

Starten und aktivieren Sie den MySQL-Dienst

Da wir uns mit dem Server verbinden und Operationen ausführen möchten, beginnen wir ihn mit dieser Aufgabe. Seit Centos 8 verwendet systemd Um lange laufende Prozesse zu verwalten, starten und aktivieren Sie mysqld mit dem Ansible systemd Modul:

- name: Ensure mysql service is running
  systemd:
    name: mysqld
    state: started
    enabled: yes

Stellen Sie sicher, dass sich der Root-Benutzer vom lokalen Server aus anmelden kann

Die mysql root user ist der standardmäßige Admin-Benutzer, der Berechtigungen für alle Ressourcen auf dem Server hat. Eine bewährte Methode wäre, den Zugriff nur über diesen Benutzer root zu ermöglichen im lokalen System, wenn wir Verwaltungsaufgaben erledigen, erstellen Sie andernfalls einen dedizierten Benutzer für jede Verbindung, d. h. für jede App, haben Sie einen Benutzer, der nur Zugriff auf diese Datenbank hat.

- name: Ensure root user can only login from localhost
  mysql_user:
    login_password: "{{ mysql_root_password }}"
    check_implicit_admin: yes
    name: root
    host: "{{ item }}"
    password: "{{ mysql_root_password }}"
    state: present
  with_items:
    - localhost
    - 127.0.0.1
    - ::1

In der obigen Aufgabendefinition:

  • das mysql_root_password Variable wird aus den vars ausgewählt früher definiert
  • Das item ist eine Schleife der in with_items definierten Werte Abschnitt.
  • Der check_implicit_admin weist Ansible an, sich ohne Passwort anzumelden, was funktionieren sollte, da es sich um eine Neuinstallation handelt. Dazu gehört das password wird für den Root-Benutzer gesetzt

Fügen Sie my.cnf hinzu zum Heimatverzeichnis

Nachdem wir das Passwort in der obigen Aufgabe festgelegt haben, möchten wir das Passwort angeben, wenn wir als Root-Benutzer weitere Aufgaben erledigen. Wir können dies in ~/.my.cnf bereitstellen , eine Datei, die jedes Mal, wenn wir mysql-Befehle ausführen, auf Anmeldeinformationen überprüft wird.
Erstellen Sie eine Datei my.cnf.j2 im aktuellen Verzeichnis:

[client]
user=root
password={{ mysql_root_password }}

Dann ist dies die Aufgabe, nach /root/.my.cnf zu kopieren da wir die Aufgaben als Root-Benutzer ausführen.

- name: Add .my.cnf to user home
  template:
    src: my.cnf.j2
    dest: /root/.my.cnf

Berechtigungen neu laden

Führen Sie die folgende Aufgabe aus, um die Berechtigungen für die Änderungen, die wir bisher vorgenommen haben, neu zu laden, um sie anzuwenden:

- name: Reload privilege tables
  command: |
    mysql -p{{ mysql_root_password }} -ne "{{ item }}"
  with_items:
    - FLUSH PRIVILEGES
  changed_when: False

Anonyme Benutzer entfernen

Es hat sich bewährt, anonyme Benutzer zu entfernen. Machen wir es mit dieser Aufgabe:

- name: Remove anonymous users
  command: |
    mysql -p{{ mysql_root_password }} -ne "{{ item }}"
  with_items:
    - DELETE FROM mysql.user WHERE User=''
  changed_when: False

Verhindern Sie, dass Root sich aus der Ferne anmeldet

Führen Sie Folgendes aus, um Einträge in mysql.user zu entfernen Tisch. Dadurch wird sichergestellt, dass sich der Root-Benutzer nur lokal anmelden kann:

- name: Disallow root login remotely
  command: |
    mysql -p{{ mysql_root_password }} -ne "{{ item }}"
  with_items:
    - DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')
  changed_when: False

Testdatenbank und Zugriff darauf entfernen

Da wir die Testdatenbank nicht benötigen, können wir sie mit dieser Aufgabe entfernen:

- name: Remove test database and access to it
  command: |
    mysql -p{{ mysql_root_password }} -ne "{{ item }}"
  with_items:
    - DROP DATABASE IF EXISTS test
    - DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'
  changed_when: False

Berechtigungen neu laden

Um die oben vorgenommenen Änderungen anzuwenden, laden Sie die Berechtigungen mit dieser Aufgabe neu:

- name: Reload privilege tables
  command: |
    mysql -p{{ mysql_root_password }} -ne "{{ item }}"
  with_items:
    - FLUSH PRIVILEGES
  changed_when: False

Löschen Sie .my.cnf die wir kopiert haben.

Lassen Sie uns aus Sicherheitsgründen /root/.my.cnf entfernen Datei, da sie Root-Zugriff enthält:

- name: Delete .my.conf
  file:
    path: /root/.my.cnf
    state: absent

Ganzes Playbook

Dies ist das gesamte Playbook mit allen Aufgaben:

---
- name: Install mysql server 8 and initialize
  hosts: db-server
  gather_facts: false
  become: true
  vars:
    mysql_root_password: 'secure-root-pw'
    ansible_python_interpreter: /usr/bin/python3
  tasks:
    - name: Ensure required packages are installed
      dnf:
        name:
          - mysql-server
          - mysql-devel
          - python39
          - python39-devel
          - python39-pip
          - gcc
        state: latest

    - name: Install Required pip modules
      pip:
        name:
          - PyMySQL
        state: present
        executable: pip3

    - name: Ensure mysql service is running
      systemd:
        name: mysqld
        state: restarted
        enabled: yes

    - name: Ensure root user can only login from localhost
      mysql_user:
        login_password: "{{ mysql_root_password }}"
        check_implicit_admin: yes
        name: root
        host: "{{ item }}"
        password: "{{ mysql_root_password }}"
        state: present
      with_items:
        - localhost
        - 127.0.0.1
        - ::1

    - name: Add .my.cnf to user home
      template:
        src: my.cnf.j2
        dest: /root/.my.cnf

    - name: Reload privilege tables
      command: |
        mysql -p{{ mysql_root_password }} -ne "{{ item }}"
      with_items:
        - FLUSH PRIVILEGES
      changed_when: False

    - name: Remove anonymous users
      command: |
        mysql -p{{ mysql_root_password }} -ne "{{ item }}"
      with_items:
        - DELETE FROM mysql.user WHERE User=''
      changed_when: False

    - name: Disallow root login remotely
      command: |
        mysql -p{{ mysql_root_password }} -ne "{{ item }}"
      with_items:
        - DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')
      changed_when: False

    - name: Remove test database and access to it
      command: |
        mysql -p{{ mysql_root_password }} -ne "{{ item }}"
      with_items:
        - DROP DATABASE IF EXISTS test
        - DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'
      changed_when: False

    - name: Reload privilege tables
      command: |
        mysql -p{{ mysql_root_password }} -ne "{{ item }}"
      with_items:
        - FLUSH PRIVILEGES
      changed_when: False

    - name: Delete .my.conf
      file:
        path: /root/.my.cnf
        state: absent

Um das Playbook auszuführen, müssen Sie die Datei setup-mysql.yaml erstellen mit dem obigen Inhalt und hosts.yaml mit dem Inhalt der hosts-Datei verwenden Sie dann den folgenden Befehl zur Ausführung:

ansible-playbook -i hosts.yaml setup-mysql.yaml -vv

Schlussfolgerung

In diesem Handbuch konnten wir Ansible verwenden, um MySQL Server 8 auf einem Centos 8-Host mit Ansible zu installieren.

Ansible gibt uns eine Möglichkeit, den Prozess zu automatisieren. Dies kann verwendet werden, um mehrere Instanzen auf vorhersehbare Weise mit einem einzigen Befehl einzurichten.


Cent OS
  1. So installieren und konfigurieren Sie Nginx, WordPress und Mysql 8 in Rocky Linux/Centos 8

  2. So installieren Sie Mysql 8 auf Rocky Linux/Centos 8

  3. So installieren und verwenden Sie PHP Composer in Rocky Linux/Centos 8

  4. So installieren und konfigurieren Sie Docker in Rocky Linux/Centos 8

  5. So installieren Sie Go in Fedora und Rocky Linux/Centos/RHEL

So installieren Sie Fish Shell unter CentOS 8 und Rocky Linux 8

So installieren Sie Webmin unter CentOS 8 und Rocky Linux 8

So installieren und konfigurieren Sie Jenkins in Rocky Linux/Centos 8

So installieren und konfigurieren Sie NextCloud mit LEMP auf Rocky Linux/Centos 8

So installieren Sie Rabbitmq in Rocky Linux/Alma Linux/Centos 8

So installieren und konfigurieren Sie Ansible AWX unter Rocky Linux 8.3 und CentOS 8