New configuration method

pull/6/head
Emilien Mantel 2015-08-10 23:45:01 +02:00
parent 446997f69b
commit 7eed88df04
5 changed files with 155 additions and 12 deletions

View File

@ -18,9 +18,12 @@ Role Variables
### Configuration
- `mysql_cnf`: key/value hash see [defaults/main.yml](default vars file)
- `mysql_root_password`: root password (should be protected with [vault](http://docs.ansible.com/playbooks_vault.html))
If you need a feature you can't configure, you can use this list. These config will go to `/etc/mysql/conf.d/01-extra`.
- `mysql_extra_config`: key/value hash see [defaults/main.yml](default vars file)
### Databases
- `mysql_databases`: list...
@ -69,4 +72,5 @@ Author Information
- You can find many other roles in my GitHub "lab": https://github.com/HanXHX/my-ansible-playbooks
- All issues, pull-request are welcome :)
- Few code come from [geerlingguy](https://github.com/geerlingguy)

View File

@ -10,13 +10,65 @@ mysql_root_password: 'change_me_NOW'
# -------------------------------------
# Configuration
# -------------------------------------
mysql_cnf:
- group_name: 'mysqld'
conf:
- key: 'innodb_file_per_table'
value: 1
- key: 'innodb_buffer_pool_size' # 60% available RAM :)
value: '{{ (ansible_memtotal_mb * 0.6) | round | int }}M'
# MySQL connection settings.
mysql_port: "3306"
mysql_bind_address: '127.0.0.1'
mysql_datadir: '/var/lib/mysql'
mysql_pid_file: '/var/run/mysqld/mysqld.pid'
mysql_socket: '/var/run/mysqld/mysqld.sock'
# Slow query log settings.
mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: '/var/log/mysql-slow.log'
mysql_slow_query_time: 2
# Memory settings (default values optimized ~512MB RAM).
mysql_key_buffer_size: '256M'
mysql_max_allowed_packet: '64M'
mysql_table_open_cache: '256'
mysql_sort_buffer_size: '1M'
mysql_read_buffer_size: '1M'
mysql_read_rnd_buffer_size: '4M'
mysql_myisam_sort_buffer_size: '64M'
mysql_thread_cache_size: '8'
mysql_query_cache_size: '16M'
# Other settings.
mysql_wait_timeout: 28800
# Try number of CPU's * 2 for thread_concurrency.
mysql_thread_concurrency: 2
# InnoDB settings.
mysql_innodb_file_per_table: '1'
mysql_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.6) | round | int }}M"
mysql_innodb_additional_mem_pool_size: '20M'
mysql_innodb_log_file_size: '64M'
mysql_innodb_log_buffer_size: '8M'
mysql_innodb_flush_log_at_trx_commit: '1'
mysql_innodb_lock_wait_timeout: 50
# mysqldump settings.
mysql_mysqldump_max_allowed_packet: '64M'
# Logging settings.
mysql_log: ''
mysql_log_error: '/var/log/mysql.err'
mysql_syslog_tag: 'mysql'
# -------------------------------------
# Extra configuration
# -------------------------------------
#
mysql_extra_configuration: []
# Example:
#mysql_extra_configuration:
# - group_name: 'mysqld'
# conf:
# - key: 'innodb_awsome_feature'
# value: 1
# -------------------------------------
# Database / Users
@ -36,4 +88,3 @@ mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version
# -------------------------------------
percona_version: '5.6'
percona_repository: 'http://repo.percona.com/apt'

View File

@ -11,8 +11,12 @@
- name: INCLUDE | Install
include: install.yml
- name: TEMPLATE | Deploy daemon configuration
template: src=etc/mysql/conf.d/90-config.cnf.j2 dest=/etc/mysql/conf.d/90-config.cnf
- name: TEMPLATE | Deploy configuration
template: src=etc/mysql/my.cnf.j2 dest=/etc/mysql/my.cnf
notify: restart mysql
- name: TEMPLATE | Deploy extra configuration
template: src=etc/mysql/conf.d/10-extra.cnf.j2 dest=/etc/mysql/conf.d/10-extra.cnf
notify: restart mysql
- name: TEMPLATE Create .my.cnf for root

View File

@ -2,7 +2,7 @@
# {{ ansible_managed }}
# -------------------------------------------
{% for i in mysql_cnf %}
{% for i in mysql_extra_configuration %}
[{{ i.group_name }}]
{% for c in i.conf %}
{% if c.value is defined %}

View File

@ -0,0 +1,84 @@
#
# {{ ansible_managed }}
#
[client]
port = {{ mysql_port }}
socket = {{ mysql_socket }}
[mysqld]
port = {{ mysql_port }}
bind-address = {{ mysql_bind_address }}
datadir = {{ mysql_datadir }}
socket = {{ mysql_socket }}
# Logging configuration.
{% if mysql_log_error == 'syslog' or mysql_log == 'syslog' %}
syslog
syslog-tag = {{ mysql_syslog_tag }}
{% else %}
{% if mysql_log %}
log = {{ mysql_log }}
{% endif %}
log-error = {{ mysql_log_error }}
{% endif %}
{% if mysql_slow_query_log_enabled %}
# Slow query log configuration.
log_slow_queries = 1
slow_query_log = 1
slow_query_log_file = {{ mysql_slow_query_log_file }}
long_query_time = {{ mysql_slow_query_time }}
{% endif %}
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
# User is ignored when systemd is used (fedora >= 15).
user = mysql
# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema
# Memory settings.
key_buffer_size = {{ mysql_key_buffer_size }}
max_allowed_packet = {{ mysql_max_allowed_packet }}
table_open_cache = {{ mysql_table_open_cache }}
sort_buffer_size = {{ mysql_sort_buffer_size }}
read_buffer_size = {{ mysql_read_buffer_size }}
read_rnd_buffer_size = {{ mysql_read_rnd_buffer_size }}
myisam_sort_buffer_size = {{ mysql_myisam_sort_buffer_size }}
thread_cache_size = {{ mysql_thread_cache_size }}
query_cache_size = {{ mysql_query_cache_size }}
# Other settings.
wait_timeout = {{ mysql_wait_timeout }}
# Try number of CPU's * 2 for thread_concurrency.
thread_concurrency = {{ mysql_thread_concurrency }}
# InnoDB settings.
innodb_file_per_table = {{ mysql_innodb_file_per_table }}
innodb_buffer_pool_size = {{ mysql_innodb_buffer_pool_size }}
innodb_additional_mem_pool_size = {{ mysql_innodb_additional_mem_pool_size }}
innodb_log_file_size = {{ mysql_innodb_log_file_size }}
innodb_log_buffer_size = {{ mysql_innodb_log_buffer_size }}
innodb_flush_log_at_trx_commit = {{ mysql_innodb_flush_log_at_trx_commit }}
innodb_lock_wait_timeout = {{ mysql_innodb_lock_wait_timeout }}
[mysqldump]
quick
max_allowed_packet = {{ mysql_mysqldump_max_allowed_packet }}
[mysqld_safe]
pid-file = {{ mysql_pid_file }}
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
# vim: set ft=dosini :