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