GNU/Linux >> Linux の 問題 >  >> Cent OS

Ansibleを使用してRockyLinux/Centos8にMysql8をインストールして初期化する

MySQLは、オープンソースのリレーショナルデータベース管理システムです。これは人気のあるリレーショナル管理システムの1つです。
Mysqlは通常、人気のあるLAMPまたはLEMP(Linux、Apache / Nginx、MySQL / MariaDB、PHP / Python / Perl)スタックの一部としてインストールされます。

このガイドでは、Centos8でmysql8を使用します。このガイドは、RockyLinux8やAlmaLinux8などの他のRHEL8派生物でも機能します

また、チェックしてください:

  • Ubuntu20.04にmysql8をインストールしてセットアップする方法
  • Centos8へのMysqlServer8のインストールと構成
  • Fedora34/35にMysqlServer8をインストールして設定する方法
  • MySQLのアクセス許可–データベースユーザーの作成、更新、削除
  • Centos 8にNginx、WordPress、Mysql8をインストールしてセットアップする
  • Mariadbの例を使用してテラフォームでRDSインスタンスを作成する

要件

  • インターネット接続
  • ローカルにインストールされたAnsible

hostsファイル

ターゲットとするサーバーを定義するhostsファイルが必要です:

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

上記のyamlは、サーバー db-serverを定義します ip 192.168.10.2があります ユーザーcentosを使用してアクセスできます および〜/ .ssh / server_key

それをテストする:

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

AnsiblePlaybook

タスクを定義する前に、ansibleにいくつかのことを伝える必要があります。

- 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

説明:

  • 名前 プレイブックは、それが何をするかを説明する名前を定義します。これを持っていることは必須ではありません。
  • ホスト hostsで定義されているようにターゲットとするホストを定義します またはhosts.yaml 上記で定義されたファイル。
  • collect_facts タスクを処理する前にOSファクトを収集できるようにするかどうかを定義します。私たちの場合、私たちは望んでいません
  • になる タスクをrootとして実行することを定義します
  • vars タスクで再利用する変数を定義します。 mysql_root_passwordを定義しました およびansible_python_interpreter 私たちの場合

アンシブルタスク

上記のセクションの後、タスクを定義する必要があります。これらのタスクは、ロールに追加することも、タスクとして指定することもできます。私たちの場合、それらをタスクとして使用します(完全なプレイブックについては、このガイドの最後を確認してください)。

必要なソフトウェアがインストールされていることを確認してください

先に進む前に、必要なすべてのソフトウェアをインストールします。これらには、mysql固有のソフトウェア mysql-serverが含まれます およびmysql-devel mysqlサーバーインスタンスに接続してセットアップするためにansibleによって使用されるPython関連ソフトウェアなどのサポートソフトウェア。 ansible dnfを使用します これを行うためのモジュール。

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

必要なpipモジュールをインストールする

AnsibleはPyMySQLを使用します mysqlサーバーに接続してセットアップするためのpython3のモジュール。 ansible pipを使用してインストールします モジュール

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

mysqlサービスを開始して有効にします

サーバーに接続して操作を実行したいので、このタスクから始めましょう。 centos8はsystemdを使用するため 長時間実行されるプロセスを管理するには、ansible systemdを使用してmysqldを起動して有効にします。 モジュール:

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

rootユーザーがローカルサーバーからログインできることを確認します

mysql root userは、サーバー内のすべてのリソースに対するアクセス許可を持つデフォルトの管理者ユーザーです。ベストプラクティスは、このユーザー rootを介したアクセスのみを有効にすることです。 ローカルシステムで管理タスクを実行している場合は、接続ごとに専用ユーザーを作成します。つまり、アプリごとに、そのデータベースにのみアクセスできるユーザーを作成します。

- 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

上記のタスク定義:

  • mysql_root_password 変数はvarsから選択されます 以前に定義された
  • アイテム with_itemsで定義された値のループです セクション。
  • check_implicit_admin これは新規インストールであるため、パスワードなしでログインを試みるようにansibleに指示します。この一環として、 password 提供されるのはrootユーザー用に設定されます

my.cnfを追加します ホームディレクトリへ

上記のタスクでパスワードを設定したので、rootユーザーとしてさらにタスクを実行するときにパスワードを指定します。これは〜/ .my.cnfで提供できます 、mysqlコマンドを実行するたびに資格情報がチェックされるファイル。
ファイルを作成する my.cnf.j2 現在のディレクトリ:

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

次に、これは /root/.my.cnfにコピーするタスクです。 rootユーザーとしてタスクを実行しているためです。

- 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

リモートログインからのルートの障害

次のコマンドを実行して、 mysql.userのエントリを削除します テーブル。これにより、rootユーザーはローカルでのみログインできるようになります:

- 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

.my.cnfを削除します コピーしました。

セキュリティのために、 /root/.my.cnfを削除しましょう ルートアクセスが含まれているため、ファイル:

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

プレイブック全体

これは、すべてのタスクを含むプレイブック全体です:

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

プレイブックを実行するには、ファイル setup-mysql.yamlを作成する必要があります 上記のコンテンツとhosts.yaml ホストファイルの内容を使用して、次のコマンドを使用して実行します。

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

結論

このガイドでは、ansibleを使用して、ansibleを使用してmysqlサーバー8をcentos8ホストにインストールすることができました。

Ansibleは、プロセスを自動化する方法を提供します。これは、単一のコマンドを使用して予測可能な方法で複数のインスタンスを設定するために使用できます。


Cent OS
  1. Rocky Linux / Centos 8にNginx、WordPress、Mysql8をインストールしてセットアップする方法

  2. Rocky Linux /Centos8にphpComposerをインストールして使用する方法

  3. RockyLinux8およびCentOS8にMonoをインストールして構成する方法

  1. Rocky Linux /Centos8にMysql8をインストールする方法

  2. Rocky Linux /Centos8でdockerをインストールして構成する方法

  3. GoをFedoraおよびRockyLinux/ Centos/RHELにインストールする方法

  1. Rocky Linux /CentOS8にAnsibleをインストールして構成する方法

  2. Rocky Linux / Alma Linux /CentOS8にErlangをインストールする方法

  3. Rocky Linux /Centos8にEPELリポジトリをインストールして有効にする方法