pulse-mind.mysql
Ansibleロール: MySQL
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_name
と mysql_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_update
をyes
に設定すれば、セットアップが完了するはずです。
注: 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データベース。データベースには name
、encoding
(デフォルトは utf8
)、collation
(デフォルトは utf8_general_ci
)、replicate
(デフォルトは 1
、レプリケーションが設定されている場合のみ使用)という値があります。これらのフォーマットは mysql_db
モジュールと同じです。
データベースを削除(またはサーバー上にないことを確認)するには、state
を absent
に設定します(デフォルトは 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_id
と mysql_replication_role
を設定します(たとえば、マスターはIDが 1
で、 mysql_replication_role
が master
、スレーブはIDが 2
で、 mysql_replication_role
が slave
になります)。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.yml
で community.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の著者です。