GNU/Linux >> Belajar Linux >  >> Cent OS

Menggunakan Kemungkinan untuk Menginstal dan Menginisialisasi Mysql 8 di Rocky Linux/Centos 8

MySQL adalah sistem manajemen basis data relasional sumber terbuka. Ini adalah salah satu sistem manajemen relasional yang populer.
Mysql biasanya diinstal sebagai bagian dari tumpukan LAMP atau LEMP (Linux, Apache/Nginx, MySQL/MariaDB, PHP/Python/Perl) yang populer.

Dalam panduan ini kita akan menggunakan mysql 8 pada Centos 8. Panduan ini juga bekerja pada turunan RHEL 8 lainnya seperti Rocky Linux 8 dan Alma Linux 8

Cek juga:

  • Cara Menginstal dan Mengatur mysql 8 di Ubuntu 20.04
  • Instalasi dan Konfigurasi Mysql Server 8 di Centos 8
  • Cara menginstal dan Konfigurasi Mysql Server 8 di Fedora 34/35
  • Izin MySQL – Buat, Perbarui, Hapus Pengguna Basis Data
  • Instal dan Setup Nginx, WordPress dan Mysql 8 di Centos 8
  • Buat instance RDS di terraform dengan Contoh Mariadb

Persyaratan

  • Koneksi internet
  • Dapat dipasang secara lokal

File host

Kami memerlukan file host yang akan menentukan server yang kami targetkan:

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

Yaml di atas mendefinisikan server db-server yang memiliki ip 192.168.10.2 dan dapat diakses menggunakan pengguna centos dan ~/.ssh/server_key .

Uji dengan:

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

Panduan yang memungkinkan

Sebelum kita mendefinisikan tugas kita, kita harus memberi tahu kemungkinan beberapa hal:

- 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

Penjelasan:

  • name mendefinisikan buku pedoman sebagai nama deskriptif tentang apa yang dilakukannya, tidak wajib memilikinya.
  • hosts mendefinisikan host yang akan ditargetkan seperti yang didefinisikan dalam hosts atau hosts.yaml file yang ditentukan di atas.
  • gather_facts mendefinisikan apakah kita ingin dapat mengumpulkan fakta sebelum memproses tugas. dalam kasus kami, kami tidak ingin
  • become mendefinisikan bahwa kita ingin menjalankan tugas kita sebagai root
  • vars mendefinisikan variabel yang ingin kita gunakan kembali dalam tugas kita. Kami mendefinisikan mysql_root_password dan ansible_python_interpreter dalam kasus kami

Tugas yang memungkinkan

Setelah bagian di atas, sekarang kita perlu mendefinisikan tugas kita. Tugas-tugas ini dapat ditambahkan dalam peran atau ditentukan sebagai tugas. Dalam kasus kami, kami akan menggunakannya sebagai tugas (periksa akhir panduan ini untuk buku pedoman lengkap).

Pastikan perangkat lunak yang diperlukan telah diinstal

Sebelum melanjutkan, kami ingin menginstal semua perangkat lunak yang kami perlukan. Ini termasuk perangkat lunak khusus mysql mysql-server dan mysql-devel dan perangkat lunak pendukung seperti perangkat lunak terkait python yang akan digunakan oleh memungkinkan untuk terhubung ke dan mengatur instance server mysql. Kami menggunakan dnf yang memungkinkan modul untuk melakukan ini.

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

Instal modul pip yang diperlukan

Ansible menggunakan PyMySQL modul di python3 untuk menghubungkan dan mengatur server mysql. Instal menggunakan pip yang memungkinkan modul

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

Mulai dan aktifkan layanan mysql

Karena kita ingin terhubung dan melakukan operasi di server, mari kita mulai dengan tugas ini. Karena centos 8 menggunakan systemd untuk mengelola proses yang berjalan lama, mari mulai dan aktifkan mysqld menggunakan systemd yang memungkinkan modul:

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

Pastikan pengguna root dapat login dari server lokal

root mysql pengguna adalah pengguna admin default yang memiliki izin untuk semua sumber daya di server. Praktik terbaik adalah dengan hanya mengaktifkan akses melalui pengguna iniroot di sistem lokal saat kita melakukan tugas admin, jika tidak, buat pengguna khusus untuk setiap koneksi, yaitu untuk setiap aplikasi, miliki pengguna yang memiliki akses ke db itu saja.

- 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

Dalam definisi tugas di atas:

  • mysql_root_password variabel akan diambil dari vars ditentukan sebelumnya
  • item adalah loop dari nilai yang didefinisikan dalam with_items bagian.
  • check_implicit_admin memberitahu kemungkinan untuk mencoba masuk tanpa kata sandi yang seharusnya berfungsi karena ini adalah pemasangan baru. Sebagai bagian dari ini, password disediakan akan disetel untuk pengguna root

Tambahkan my.cnf ke direktori rumah

Sekarang kita telah mengatur kata sandi dalam tugas di atas, kami ingin memberikan kata sandi saat melakukan lebih banyak tugas sebagai pengguna root. Kami dapat menyediakan ini di ~/.my.cnf , file yang diperiksa kredensialnya setiap kali kita menjalankan perintah mysql.
Buat file my.cnf.j2 di direktori saat ini:

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

Kemudian ini adalah tugas untuk menyalin ke /root/.my.cnf karena kami menjalankan tugas sebagai pengguna root.

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

Muat ulang hak istimewa

Jalankan tugas berikut untuk memuat ulang hak istimewa untuk perubahan yang telah kami buat sejauh ini untuk diterapkan:

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

Hapus pengguna anonim

Ini adalah praktik yang baik untuk menghapus pengguna anonim. Mari kita lakukan dengan tugas ini:

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

Larang root untuk login dari jarak jauh

Jalankan perintah berikut untuk menghapus entri di mysql.user meja. Ini memastikan bahwa pengguna root hanya dapat masuk secara lokal:

- 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

Hapus database pengujian dan akses ke sana

Karena kita tidak memerlukan database pengujian, kita dapat menghapusnya dengan tugas ini:

- 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

Muat ulang hak istimewa

Untuk menerapkan perubahan yang telah kami buat di atas, muat ulang hak istimewa dengan tugas ini:

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

Hapus .my.cnf yang kami salin.

Demi keamanan, mari hapus /root/.my.cnf file karena berisi akses root:

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

Seluruh buku pedoman

Ini adalah keseluruhan buku pedoman dengan semua tugas:

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

Untuk menjalankan playbook, Anda perlu membuat file setup-mysql.yaml dengan konten di atas dan hosts.yaml dengan konten file host kemudian gunakan perintah berikut untuk mengeksekusi:

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

Kesimpulan

Dalam panduan ini, kami dapat menggunakan ansible untuk menginstal mysql server 8 pada host centos 8 menggunakan ansible.

Ansible memberi kita cara untuk mengotomatisasi proses. Ini dapat digunakan untuk menyiapkan beberapa instance dengan cara yang dapat diprediksi menggunakan satu perintah.


Cent OS
  1. Cara Install dan Setup Nginx, WordPress dan Mysql 8 di Rocky Linux/Centos 8

  2. Bagaimana menginstal Mysql 8 di Rocky Linux/Centos 8

  3. Cara Menginstal dan Menggunakan Komposer php di Rocky Linux/Centos 8

  1. Cara menginstal dan mengkonfigurasi buruh pelabuhan Di Rocky Linux/Centos 8

  2. Cara menginstal Go di Fedora dan Rocky Linux/Centos/RHEL

  3. Cara Menginstal dan Mengonfigurasi Ansible di Rocky Linux/CentOS 8

  1. Cara menginstal Erlang di Rocky Linux/Alma Linux/CentOS 8

  2. Cara Menginstal dan Mengaktifkan Repositori EPEL di Rocky Linux/Centos 8

  3. Cara menginstal dan menggunakan Podman di Rocky Linux/Alma Linux/Centos 8