GNU/Linux >> Znalost Linux >  >> Cent OS

Použití Ansible k instalaci a inicializaci Mysql 8 na Rocky Linux/Centos 8

MySQL je open-source systém pro správu relačních databází. Je to jeden z populárních systémů pro správu relací.
Mysql se běžně instaluje jako součást oblíbeného zásobníku LAMP nebo LEMP (Linux, Apache/Nginx, MySQL/MariaDB, PHP/Python/Perl).

V této příručce budeme používat mysql 8 na Centos 8. Tato příručka funguje také na jiných derivátech RHEL 8, jako je Rocky Linux 8 a Alma Linux 8

Zkontrolujte také:

  • Jak nainstalovat a nastavit mysql 8 na Ubuntu 20.04
  • Instalace a konfigurace Mysql Server 8 na Centos 8
  • Jak nainstalovat a nakonfigurovat Mysql Server 8 na Fedoře 34/35
  • Oprávnění Mysql – vytvářet, aktualizovat, mazat uživatele databáze
  • Nainstalujte a nastavte Nginx, WordPress a Mysql 8 v Centos 8
  • Vytvořte instanci RDS v terraformu s příkladem Mariadb

Požadavky

  • Připojení k internetu
  • Ansible nainstalován lokálně

Soubor hostitelů

Požadujeme soubor hosts, který bude definovat servery, na které cílíme:

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

Výše uvedený yaml definuje server db-server který má ip 192.168.10.2 a lze k nim přistupovat pomocí uživatele centos a ~/.ssh/server_key .

Otestujte to pomocí:

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

Příručka ansible

Než definujeme své úkoly, musíme říci ansible několik věcí:

- 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

Vysvětlení:

  • name definuje playbook popisným názvem toho, co dělá, není to povinné.
  • hosts definuje hostitele, na které se má cílit, jak je definováno v hosts nebo hosts.yaml soubor definovaný výše.
  • gather_facts definuje, zda chceme před zpracováním úkolů shromáždit os fakta. v našem případě nechceme
  • become definuje, že chceme provádět své úkoly jako root
  • vars definuje proměnné, které chceme znovu použít v našich úkolech. Definovali jsme mysql_root_password a ansible_python_interpreter v našem případě

Ansible úkoly

Po části výše nyní musíme definovat naše úkoly. Tyto úkoly lze přidat do role nebo zadat jako úkoly. V našem případě je použijeme jako úkoly (úplnou příručku naleznete na konci této příručky).

Ujistěte se, že je nainstalován požadovaný software

Než budeme pokračovat, chceme nainstalovat veškerý software, který bychom potřebovali. Patří mezi ně software mysql-server specifický pro mysql a mysql-devel a podpůrný software, jako je software související s pythonem, který bude používat ansible pro připojení a nastavení instance serveru mysql. Používáme ansible dnf modul k tomu.

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

Nainstalujte požadované moduly pip

Ansible používá PyMySQL modul v python3 pro připojení a nastavení serveru mysql. Nainstalujte jej pomocí ansible pip modul

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

Spusťte a povolte službu mysql

Protože se chceme připojit a provádět operace na serveru, začněme jej touto úlohou. Protože centos 8 používá systemd Chcete-li spravovat dlouho běžící procesy, spusťte a povolte mysqld pomocí ansible systemd modul:

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

Zajistěte, aby se uživatel root mohl přihlásit z místního serveru

root mysql uživatel je výchozí administrátor, který má oprávnění ke všem prostředkům na serveru. Osvědčeným postupem by bylo povolit přístup pouze prostřednictvím tohoto uživateleroot v místním systému, když děláme úkoly správce, jinak vytvořte vyhrazeného uživatele pro každé připojení, tj. pro každou aplikaci mějte uživatele, který má přístup pouze k této databázi.

- 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

Ve výše uvedené definici úlohy:

  • mysql_root_password proměnná bude vybrána z vars definované dříve
  • item je smyčka hodnot definovaných v with_items sekce.
  • check_implicit_admin říká ansible zkusit se přihlásit bez hesla, což by mělo fungovat, protože se jedná o novou instalaci. Součástí toho je password bude nastaveno pro uživatele root

Přidejte my.cnf do domácího dir

Nyní, když jsme nastavili heslo ve výše uvedené úloze, chtěli bychom heslo zadat při provádění více úloh jako uživatel root. Můžeme to poskytnout v ~/.my.cnf , soubor, který se kontroluje na přihlašovací údaje pokaždé, když spustíme příkazy mysql.
Vytvořte soubor my.cnf.j2 v aktuálním adresáři:

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

Pak je úkolem zkopírovat do /root/.my.cnf protože úlohy spouštíme jako uživatel root.

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

Znovu načíst oprávnění

Spusťte následující úlohu, abyste znovu načetli oprávnění pro změny, které jsme dosud provedli, aby se uplatnily:

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

Odstranit anonymní uživatele

Je to dobrá praxe pro odstranění anonymních uživatelů. Udělejme to pomocí tohoto úkolu:

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

Zakázat rootovi vzdálené přihlášení

Spusťte následující pro odstranění položek v mysql.user stůl. To zajistí, že uživatel root se může přihlásit pouze lokálně:

- 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

Odstranění testovací databáze a přístup k ní

Protože testovací databázi nepotřebujeme, můžeme ji odstranit pomocí této úlohy:

- 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

Znovu načíst oprávnění

Chcete-li použít změny, které jsme provedli výše, znovu načtěte oprávnění pomocí této úlohy:

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

Smažte .my.cnf které jsme zkopírovali.

Z bezpečnostních důvodů odeberte /root/.my.cnf protože obsahuje root přístup:

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

Celá příručka

Toto je celá příručka se všemi úkoly:

---
- 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

Chcete-li spustit playbook, musíte vytvořit soubor setup-mysql.yaml s výše uvedeným obsahem a hosts.yaml s obsahem souboru hosts pak proveďte následující příkaz:

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

Závěr

V této příručce jsme byli schopni použít ansible k instalaci serveru mysql 8 na hostitele centos 8 pomocí ansible.

Ansible nám dává způsob, jak proces automatizovat. To lze použít k nastavení více instancí předvídatelným způsobem pomocí jediného příkazu.


Cent OS
  1. Jak nainstalovat a nastavit Nginx, WordPress a Mysql 8 v Rocky Linux/Centos 8

  2. Jak nainstalovat Mysql 8 na Rocky Linux/Centos 8

  3. Jak nainstalovat a nakonfigurovat docker v Rocky Linux/Centos 8

  1. Jak nainstalovat Go ve Fedoře a Rocky Linux/Centos/RHEL

  2. Jak nainstalovat a nakonfigurovat Ansible na Rocky Linux/CentOS 8

  3. Jak nainstalovat Erlang na Rocky Linux/Alma Linux/CentOS 8

  1. Jak nainstalovat a povolit úložiště EPEL na Rocky Linux/Centos 8

  2. Jak nainstalovat a používat Podman v Rocky Linux/Alma Linux/Centos 8

  3. Jak nainstalovat a nakonfigurovat Mono na Rocky Linux 8 a CentOS 8