geerlingguy.mysql

Ansible Role: MySQL

CI

MySQLまたはMariaDBサーバーをRHEL/CentOSまたはDebian/Ubuntuサーバーにインストールして構成します。

要件

特別な要件はありません。このロールはrootアクセスが必要です。プレイブックでグローバルな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

MySQLの設定が保存されるディレクトリで、AnsibleがMySQLに接続するときに使用します。これは、このAnsibleロールを実行するユーザーのホームディレクトリであるべきです。非rootユーザーでこのロールを実行する場合は、mysql_user_namemysql_user_passwordを設定できます。

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

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

mysql_root_password_update: false

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

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

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のみ)追加のリポジトリを有効にした場合(例えば、geerlingguy.repo-epelやgeerlingguy.repo-remiを推奨)、これらのリポジトリをこの変数でリストできます(例: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による*

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

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 1mysql_replication_rolemaster、スレーブはID 2mysql_replication_roleslaveになります)。mysql_replication_usermysql_usersの個別リスト項目と同じキーを使用し、マスターサーバーで作成され、すべてのスレーブでレプリケーションに使用されます。

mysql_replication_masterは、スレーブがアクセスできるIPまたはホスト名を解決する必要があります(これは/etc/hostsの挿入などで行えます)。さもなければ、スレーブはマスターと通信できません。

レプリケーションマスターがAnsibleを実行している場所とMySQLレプリカが実行されている場所で異なるIPアドレスを使用している場合、mysql_replication_master_inventory_hostを指定してアクセスすることもできます(例:ローカルマシンでAnsibleを実行し、MySQLマスターとレプリカは異なるネットワーク上で通信する必要があります)。

mysql_hide_passwords: false

実行中のパスワードを含むタスクの出力を非表示にする必要がありますか?

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 geerlingguy.mysql
ライセンス
mit
ダウンロード
4.5M
所有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns