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