pulse-mind.mysql

Ansibleロール: MySQL

CI

MySQLまたはMariaDBサーバーをRHEL/CentOSまたはDebian/Ubuntuサーバーにインストールし、設定します。

要件

特別な要件はありません。このロールはルートアクセスが必要ですので、グローバルに become: yes を指定したプレイブックで実行するか、以下のようにプレイブックでこのロールを呼び出してください:

- hosts: database
  roles:
    - role: geerlingguy.mysql
      become: yes

ロール変数

利用可能な変数は以下にリストされています。デフォルト値も示しています(defaults/main.ymlを参照):

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

Python MySQLの設定が保存されるホームディレクトリで、AnsibleがMySQLに接続する際に使用します。このディレクトリは、このAnsibleロールを実行するユーザーのホームディレクトリである必要があります。mysql_user_namemysql_user_password は、非ルートユーザーアカウントでこのロールを実行している場合に設定できます。

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

MySQLのルートユーザーアカウントの詳細。

mysql_root_password_update: false

MySQLのルートユーザーのパスワードを強制的に更新するかどうか。デフォルトでは、このロールはMySQLが最初に設定されるときのみルートユーザーのパスワードを変更します。これを yes に設定すると強制的に更新されます。

注: プレイブックの実行が失敗したり中断された後に ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) というエラーが表示された場合、これは通常、最初にルートパスワードが更新されていなかったことを意味します。設定された mysql_user_home 内の .my.cnf ファイルを削除するか、更新して password=''(非推奨のデフォルトパスワード)を設定します。再度プレイブックを実行し、mysql_root_password_updateyes に設定すれば、セットアップが完了するはずです。

注: CLIからログインしようとしたときに ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES) のエラーが表示される場合は、rootまたはsudoerとして実行する必要があります。

mysql_enabled_on_startup: true

MySQLを起動時に有効にするかどうか。

mysql_config_file: *OSに依存するデフォルト値*
mysql_config_include_dir: *OSに依存するデフォルト値*

主要なmy.cnf設定ファイルとインクルードディレクトリ。

overwrite_global_mycnf: true

このロールが実行されるたびにグローバルmy.cnfを上書きするかどうか。これを no に設定すると、Ansibleは my.cnf ファイルが存在しない場合のみ作成します。このロールの変数を使用してMySQLを設定したい場合は、デフォルト値(yes)のままにしておくべきです。

mysql_config_include_files: []

デフォルトのグローバルmy.cnfを上書きすべきファイルのリスト。配列内の各アイテムにはファイルへのパスを示す "src" パラメータが必要です。オプションの "force" パラメータを使用すると、Ansibleが実行されるたびにファイルを更新することができます。

mysql_databases: []

作成するMySQLデータベース。データベースには nameencoding(デフォルトは utf8)、collation(デフォルトは utf8_general_ci)、replicate(デフォルトは 1、レプリケーションが設定されている場合のみ使用)という値があります。これらのフォーマットは mysql_db モジュールと同じです。

データベースを削除(またはサーバー上にないことを確認)するには、stateabsent に設定します(デフォルトは present)。

mysql_users: []

MySQLユーザーとその権限。ユーザーには以下の値があります:

  • name
  • host(デフォルトは localhost
  • password(平文または暗号化されたもの—暗号化された場合は encrypted: yes と設定)
  • encrypted(デフォルトは no
  • priv(デフォルトは *.*:USAGE
  • append_privs(デフォルトは no
  • state(デフォルトは present

これらのフォーマットは mysql_user モジュールと同じです。

mysql_packages:
  - mysql
  - mysql-server

(OSに依存します。ここではRedHat/CentOSのデフォルトが示されています)インストールされるパッケージ。状況によっては、mysql-develなどの追加パッケージを追加する必要がある場合があります。

mysql_enablerepo: ""

(RedHat/CentOSのみ)追加のリポジトリを有効にしている場合は、それらのリポジトリをこの変数でリストできます(例: remi,epel)。これにより、MySQLの後のバージョンをインストールする際に便利です。

mysql_python_package_debian: python3-mysqldb

(Ubuntu/Debianのみ)MySQL Pythonパッケージを明示的に上書きする必要がある場合は、ここで設定できます。Python 2を実行している古いディストリビューションを使用している場合は、これを python-mysqldb に設定します。

mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *OSに依存するデフォルト値*
mysql_pid_file: *OSに依存するデフォルト値*

デフォルトのMySQL接続設定。

mysql_log_file_group: mysql *Debianの場合は *adm*
mysql_log: ""
mysql_log_error: *OSに依存するデフォルト値*
mysql_syslog_tag: *OSに依存するデフォルト値*
```yaml

MySQLのログ設定。`mysql_log`(一般的なクエリログ)または `mysql_log_error`  `syslog` に設定すると、MySQLが `mysql_syslog_tag` を使用してsyslogにログを記録します。

```yaml
mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *OSに依存するデフォルト値*
mysql_slow_query_time: 2

スロークエリログの設定。このログファイルはこのロールによって作成されますが、SELinuxやAppArmorのあるサーバーで実行している場合は、このパスをMySQLの許可されたパスに追加する必要があるか、MySQLプロファイルを無効にする必要があります。たとえば、Debian/Ubuntuでは、次のコマンドを実行できます。sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart

mysql_key_buffer_size: "256M"
mysql_max_allowed_packet: "64M"
mysql_table_open_cache: "256"
...

defaults/main.yml の残りの設定は、MySQLのメモリ使用量やその他の一般的な設定を制御します。デフォルト値は、MySQLが512 MBのRAMを消費できるサーバーに調整されていますので、特定のサーバーに合わせて調整することを検討してください。

mysql_server_id: "1"
mysql_max_binlog_size: "100M"
mysql_binlog_format: "ROW"
mysql_expire_logs_days: "10"
mysql_replication_role: ''
mysql_replication_master: ''
mysql_replication_user: {}

レプリケーション設定。サーバーごとに mysql_server_idmysql_replication_role を設定します(たとえば、マスターはIDが 1 で、 mysql_replication_rolemaster 、スレーブはIDが 2 で、 mysql_replication_roleslave になります)。mysql_replication_user には mysql_users の各項目と同じキーが使われ、マスターサーバーで作成され、すべてのスレーブでレプリケーションに使用されます。

mysql_replication_master は、スレーブがアクセスできるIPまたはホスト名を解決する必要があります(これは /etc/hosts への注入やその他の手段でもかまいません)。そうでないと、スレーブはマスターと通信できません。

レプリケーションマスターのIPアドレスがAnsibleを実行している場所とMySQLレプリカが実行されている場所で異なる場合は、オプショナルmysql_replication_master_inventory_host を指定して、マシンにアクセスできます(たとえば、Ansibleをローカルマシンで実行しますが、MySQLマスターとレプリカは別のネットワークで通信する必要があります)。

CentOS 7におけるMySQLの後のバージョン

システムのデフォルトであるMariaDBの代わりに公式リポジトリからMySQLをインストールしたい場合は、プレイブックに次の pre_tasks タスクを追加できます:

  pre_tasks:
    - name: MySQLリポジトリをインストール。
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: MySQLの変数をオーバーライド(RedHat)。
      set_fact:
        mysql_daemon: mysqld
        mysql_packages: ['mysql-server']
        mysql_log_error: /var/log/mysqld.err
        mysql_syslog_tag: mysqld
        mysql_pid_file: /var/run/mysqld/mysqld.pid
        mysql_socket: /var/lib/mysql/mysql.sock
      when: ansible_os_family == "RedHat"

MariaDBの使用

このロールはMySQLまたは互換性のあるバージョンのMariaDBで動作します。RHEL/CentOS 7以降、MariaDBデータベースエンジンがデフォルトのMySQLの置き換えパッケージとして置き換えられました。すべての変数は引き続き「mysql」を参照していますが、特に変更は必要ありません。

Ubuntu 14.04および16.04のMariaDB設定

Ubuntuではパッケージ名が異なるため、mysql_package 変数を変更する必要があります。最低限、以下の変数を設定してください:

mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

依存関係

ansible がインストールされている場合(例: pip3 install ansible)、特別な依存関係はありません。

ansible-core だけがインストールされている場合は、collections/requirements.ymlcommunity.mysql を必ず要求するか、手動で ansible-galaxy collection install community.mysql を使用してインストールしてください。

例プレイブック

- hosts: db-servers
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.mysql }

vars/main.yml の中で

mysql_root_password: super-secure-password
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: similarly-secure-password
    priv: "example_db.*:ALL"

ライセンス

MIT / BSD

著者情報

このロールは2014年にJeff Geerlingによって作成されました。彼はAnsible for DevOpsの著者です。

プロジェクトについて

MySQL server for RHEL/CentOS and Debian/Ubuntu.

インストール
ansible-galaxy install pulse-mind.mysql
ライセンス
mit
ダウンロード
133
所有者