geerlingguy.mysql
Ansible Role: MySQL
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_name
とmysql_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_update
をyes
に設定してプレイブックを再実行してください。セットアップが完了するはずです。
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のみ)追加のリポジトリを有効にした場合(例えば、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_error
をsyslog
に設定すると、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_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
の挿入などで行えます)。さもなければ、スレーブはマスターと通信できません。
レプリケーションマスターが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.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の著者です。
ansible-galaxy install geerlingguy.mysql