From 47be1b60a6502de2b201badd5f6d524c4daf1a7e Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:44:45 +0200 Subject: [PATCH 01/10] Fix broken link (same link, another file) --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index b6c9ff9..d657b1a 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -124,7 +124,7 @@ mysql_users: [] # MariaDB # ------------------------------------- mysql_mariadb_version: '10.1' -# See: http://mariadb.org/mariadb/repositories/ +# See: https://downloads.mariadb.org/mariadb/repositories mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mariadb_version }}/debian" # ------------------------------------- From e38f706eb1538446ab3bc23302eafa007e4890d3 Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:47:20 +0200 Subject: [PATCH 02/10] Add variables for apt key-server and -ids --- defaults/main.yml | 2 ++ tasks/install/mariadb/upstream.yml | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index d657b1a..01c755d 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -126,6 +126,8 @@ mysql_users: [] mysql_mariadb_version: '10.1' # See: https://downloads.mariadb.org/mariadb/repositories mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mariadb_version }}/debian" +mysql_mariadb_key_server: "keyserver.ubuntu.com" +mysql_mariadb_key_ids: ['0xcbcb082a1bb943db', '0xf1656f24c74cd1d8'] # ------------------------------------- # Percona diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index 7867fcc..12ad702 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -1,8 +1,8 @@ --- - name: APT | Install MariaDB key - apt_key: keyserver="keyserver.ubuntu.com" id={{ item }} state=present - with_items: ['0xcbcb082a1bb943db', '0xf1656f24c74cd1d8'] + apt_key: keyserver="{{ mysql_mariadb_key_server }}" id={{ item }} state=present + with_items: "{{ mysql_mariadb_key_ids }}" - name: APT | Add MariaDB repository apt_repository: repo='deb {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present From b6175d50939fa5e23b326a939b82d9afcebc2c3b Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:51:03 +0200 Subject: [PATCH 03/10] Use jinja2 comments --- templates/etc/mysql/my.cnf.j2 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index 9d6f03b..ff3bf6b 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -12,7 +12,7 @@ bind-address = {{ mysql_bind_address }} datadir = {{ mysql_datadir }} socket = {{ mysql_socket }} -# TODO: FIX later +{# TODO: FIX later #} # Logging configuration. #{% if mysql_log_error == 'syslog' or mysql_log == 'syslog' %} #syslog @@ -32,8 +32,6 @@ 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 @@ -63,7 +61,7 @@ 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 }} -# It craches after install (mysql 5.5)... TODO FIX -> http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html +{# It craches after install (mysql 5.5)... TODO: FIX -> http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html #} #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 }} From e39270c77f4e9720b01eaf68ac6597fc1564ee6d Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:51:46 +0200 Subject: [PATCH 04/10] Remove hashes prepending the log settings, we need those settings --- templates/etc/mysql/my.cnf.j2 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index ff3bf6b..0422944 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -14,15 +14,15 @@ socket = {{ mysql_socket }} {# TODO: FIX later #} # 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_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. From e51a980af1f4d594df819dec5b610c58f2c91a28 Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:53:16 +0200 Subject: [PATCH 05/10] Don't use log_slow_queries for MariaDB 10.0+ (it's deprecated) --- templates/etc/mysql/my.cnf.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index 0422944..4252704 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -26,7 +26,9 @@ log-error = {{ mysql_log_error }} {% if mysql_slow_query_log_enabled %} # Slow query log configuration. +{% if mysql_vendor not in ['mariadb', 'mariadbgalera'] or mysql_mariadb_version | version_compare('10.0', '<') %} log_slow_queries = 1 +{% endif %} slow_query_log = 1 slow_query_log_file = {{ mysql_slow_query_log_file }} long_query_time = {{ mysql_slow_query_time }} From ef67883ab2d606965f8198ff78972df872a5d846 Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:55:44 +0200 Subject: [PATCH 06/10] Proper comment on why changing innodb_log_file_size breaks the system --- defaults/main.yml | 2 +- templates/etc/mysql/my.cnf.j2 | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 01c755d..a580345 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -45,7 +45,7 @@ mysql_thread_concurrency: 2 # InnoDB settings. mysql_innodb_file_per_table: '1' mysql_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M" -mysql_innodb_log_file_size: '64M' +mysql_innodb_log_file_size: '64M' # If this setting changes on a running system, you will break it! http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html mysql_innodb_log_buffer_size: '8M' mysql_innodb_flush_log_at_trx_commit: '1' mysql_innodb_lock_wait_timeout: 50 diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index 4252704..a7e21d5 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -63,11 +63,13 @@ 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 }} -{# It craches after install (mysql 5.5)... TODO: FIX -> http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html #} -#innodb_log_file_size = {{ mysql_innodb_log_file_size }} -#innodb_log_buffer_size = {{ mysql_innodb_log_buffer_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 }} +{# If this setting changes on a running system, you will break it! #} +{# See how tho change it here: http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html #} +{# TODO FIX -> Maybe detect a change and fail, just to be safe? #} +innodb_log_file_size = {{ mysql_innodb_log_file_size }} [mysqldump] quick From 266af48a9b22c162dbb054f5b6fecd3ade64472d Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:56:23 +0200 Subject: [PATCH 07/10] Use ansible_processor_cores to calculate thread_concurrency --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index a580345..7501b1e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -40,7 +40,7 @@ mysql_query_cache_size: '16M' mysql_wait_timeout: 28800 # Try number of CPU's * 2 for thread_concurrency. -mysql_thread_concurrency: 2 +mysql_thread_concurrency: "{{ ansible_processor_cores * 2 }}" # InnoDB settings. mysql_innodb_file_per_table: '1' From 597749780983daa4dbc9733af0ffce574d520b2c Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:57:47 +0200 Subject: [PATCH 08/10] Add variable to specify the my.cnf template --- defaults/main.yml | 3 +++ tasks/main.yml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 7501b1e..eb663f7 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -13,6 +13,9 @@ mysql_upstream_apt_src: false # Configuration # ------------------------------------- +# MySQL configuration template +mysql_config_template: 'etc/mysql/my.cnf.j2' + # MySQL connection settings. mysql_port: "3306" mysql_bind_address: '127.0.0.1' diff --git a/tasks/main.yml b/tasks/main.yml index 58ac38e..9c3d16a 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -12,7 +12,7 @@ include: install/main.yml - name: TEMPLATE | Deploy configuration - template: src=etc/mysql/my.cnf.j2 dest=/etc/mysql/my.cnf + template: "src={{ mysql_config_template }} dest=/etc/mysql/my.cnf" register: config - name: TEMPLATE | Deploy extra configuration From 3535d8b43a0d26d562ba5b97032ad3593940858d Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Mon, 3 Jul 2017 15:24:01 +0200 Subject: [PATCH 09/10] Pin MariaDB packages --- defaults/main.yml | 3 ++- tasks/install/mariadb/upstream.yml | 9 ++++++--- templates/etc/apt/preferences.d/95-mariadb.j2 | 6 ++++++ 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 templates/etc/apt/preferences.d/95-mariadb.j2 diff --git a/defaults/main.yml b/defaults/main.yml index eb663f7..1a2586c 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -127,8 +127,9 @@ mysql_users: [] # MariaDB # ------------------------------------- mysql_mariadb_version: '10.1' +mysql_mariadb_mirror_domain: "ftp.igh.cnrs.fr" # See: https://downloads.mariadb.org/mariadb/repositories -mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mariadb_version }}/debian" +mysql_mariadb_repository: "http://{{ mysql_mariadb_mirror_domain }}/pub/mariadb/repo/{{ mysql_mariadb_version }}/debian" mysql_mariadb_key_server: "keyserver.ubuntu.com" mysql_mariadb_key_ids: ['0xcbcb082a1bb943db', '0xf1656f24c74cd1d8'] diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index 12ad702..63e0b54 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -1,13 +1,16 @@ --- -- name: APT | Install MariaDB key +- name: APT_KEY | Install MariaDB key apt_key: keyserver="{{ mysql_mariadb_key_server }}" id={{ item }} state=present with_items: "{{ mysql_mariadb_key_ids }}" -- name: APT | Add MariaDB repository +- name: TEMPLATE | Deploy APT pinning (prevent upgrades from Debian) + template: src=etc/apt/preferences.d/95-mariadb.j2 dest=/etc/apt/preferences.d/95-mariadb + +- name: APT_REPOSITORY | Add MariaDB repository apt_repository: repo='deb {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present -- name: APT | Add MariaDB (src) repository +- name: APT_REPOSITORY | Add MariaDB (src) repository apt_repository: repo='deb-src {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present when: mysql_upstream_apt_src diff --git a/templates/etc/apt/preferences.d/95-mariadb.j2 b/templates/etc/apt/preferences.d/95-mariadb.j2 new file mode 100644 index 0000000..740bae1 --- /dev/null +++ b/templates/etc/apt/preferences.d/95-mariadb.j2 @@ -0,0 +1,6 @@ +# {{ ansible_managed }} + +Explanation: Prevent Debian upgrades on mariadb packages +Package: * +Pin: origin {{ mysql_mariadb_mirror_domain }} +Pin-Priority: 1000 From d74393a21e3bf78ddc8578f6e1f6b6be7ccf4266 Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 5 Jul 2017 21:54:57 +0200 Subject: [PATCH 10/10] Use 5M as innodb_log_file_size for MySQL on Jessie --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 1a2586c..cbb72b0 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -48,7 +48,7 @@ mysql_thread_concurrency: "{{ ansible_processor_cores * 2 }}" # InnoDB settings. mysql_innodb_file_per_table: '1' mysql_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M" -mysql_innodb_log_file_size: '64M' # If this setting changes on a running system, you will break it! http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html +mysql_innodb_log_file_size: "{% if ansible_distribution_release == 'jessie' and mysql_vendor == 'mysql' %}5M{% else %}64M{% endif %}" # If this setting changes on a running system, you will break it! http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html mysql_innodb_log_buffer_size: '8M' mysql_innodb_flush_log_at_trx_commit: '1' mysql_innodb_lock_wait_timeout: 50