From a3c233f999f3ea88d9f7b958d56514c3a5ca8b3e Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 25 Jan 2016 17:52:18 +0100 Subject: [PATCH 01/75] Remove duplicate key --- defaults/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 68dd2ee..a64ba13 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -80,7 +80,6 @@ mysql_replication_slave: false # This formula don't work with vagrant! All boxes have same default ip! mysql_server_id: "{{ ansible_default_ipv4.address | ipaddr('int') }}" -mysql_replication_user: [] mysql_replication_user: 'repl' mysql_replication_password: 'change_me_NOW' mysql_replication_host: '192.168.0.1' From c681545b61fc9d4eae17c6391c15ff5f554d94be Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 9 Feb 2016 11:41:06 +0100 Subject: [PATCH 02/75] Default: install MariaDB from Debian repos --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index a64ba13..7fe7f47 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -3,7 +3,7 @@ # ------------------------------------- # Setup # ------------------------------------- -mysql_origin: 'upstream' +mysql_origin: 'default' mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' mysql_use_percona_repository: false From f2c76797640dc9863e02ad1a30af5858635104bb Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 9 Feb 2016 11:47:37 +0100 Subject: [PATCH 03/75] Change innodb buffer (should OOM kill on weak config) --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 7fe7f47..8236b40 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -43,7 +43,7 @@ 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_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M" mysql_innodb_additional_mem_pool_size: '20M' # See: http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_additional_mem_pool_size mysql_innodb_log_file_size: '64M' mysql_innodb_log_buffer_size: '8M' From 357f7d1bfbd79a53f3370dd9c33bc74179042177 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 9 Feb 2016 17:32:55 +0100 Subject: [PATCH 04/75] Correct template src. Fixes #8 --- tasks/install/percona/apt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/install/percona/apt.yml b/tasks/install/percona/apt.yml index f1adee7..bedc04d 100644 --- a/tasks/install/percona/apt.yml +++ b/tasks/install/percona/apt.yml @@ -4,7 +4,7 @@ apt_key: keyserver="keyserver.ubuntu.com" id="1C4CBDCDCD2EFD2A" state=present - name: TEMPLATE | Deploy APT pinning (prevent upgrades from Debian) - template: src=../../../templates/etc/apt/preferences.d/95-percona.j2 dest=/etc/apt/preferences.d/95-percona + template: src=etc/apt/preferences.d/95-percona.j2 dest=/etc/apt/preferences.d/95-percona - name: APT_REPOSITORY | Add Percona repository apt_repository: repo='deb {{ percona_repository }} {{ ansible_distribution_release }} main' state=present From fc85a9d9d6f2615d1f5d7e35767678dd288b9759 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 9 Feb 2016 17:41:45 +0100 Subject: [PATCH 05/75] Fix GTID detection --- tasks/replication/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/replication/main.yml b/tasks/replication/main.yml index 1c63d6d..d8bc052 100644 --- a/tasks/replication/main.yml +++ b/tasks/replication/main.yml @@ -1,14 +1,14 @@ --- - name: MYSQL_VARIABLES | Get MySQL vendor - mysql_variables: variable=version_comment + mysql_variables: variable=version register: vc - name: SET_FACT | Server can use GTID set_fact: mysql_gtid=true when: > - ( mysql_vendor == 'mariadb' and vc.msg[0][1] | version_compare('10.0.2', 'ge') ) or - ( vc.msg[0][1] | version_compare('5.6.5', 'ge') ) + ( mysql_vendor == 'mariadb' and vc.msg | version_compare('10.0.2', 'ge') ) or + ( mysql_vendor in ['mysql', 'percona'] and vc.msg | version_compare('5.6.5', 'ge') ) - name: INCLUDE | Replication Master include: master.yml From a894efa81ae1a0ef3cac2691bf1931ececbcae01 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 9 Feb 2016 17:43:49 +0100 Subject: [PATCH 06/75] Fix tests while grant access with space char --- tasks/main.yml | 8 ++++---- tests/group_vars/master | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index a370275..f749d9c 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -36,10 +36,10 @@ - name: MYSQL_USER | Manages users... mysql_user: > - name={{ item.name }} - password={{ item.password }} - priv={{ item.priv }} - host={{ item.host | default('localhost') }} + name="{{ item.name }}" + password="{{ item.password }}" + priv="{{ item.priv }}" + host="{{ item.host | default('localhost') }}" state=present with_items: mysql_users diff --git a/tests/group_vars/master b/tests/group_vars/master index 0294770..4b43d25 100644 --- a/tests/group_vars/master +++ b/tests/group_vars/master @@ -12,7 +12,7 @@ mysql_databases: mysql_users: - name: 'replication' password: '1a2b3c' - priv: '*.*:"REPLICATION SLAVE"' + priv: '*.*:REPLICATION SLAVE' host: '%' mysql_replication_master: true mysql_replication_slave: false From b266e775a867d7b6e60d5328e82f5aadddcf3a69 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 12 Feb 2016 09:37:29 +0100 Subject: [PATCH 07/75] Correct template path (#8 related) --- tasks/replication/master.yml | 4 +++- tasks/replication/slave.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tasks/replication/master.yml b/tasks/replication/master.yml index 85ac2a6..23f4ebe 100644 --- a/tasks/replication/master.yml +++ b/tasks/replication/master.yml @@ -1,5 +1,7 @@ --- - name: TEMPLATE | Deploy master configuration - template: src=../templates/etc/mysql/conf.d/50-master.cnf.j2 dest=/etc/mysql/conf.d/50-master.cnf + template: > + src=etc/mysql/conf.d/50-master.cnf.j2 + dest=/etc/mysql/conf.d/50-master.cnf notify: restart mysql diff --git a/tasks/replication/slave.yml b/tasks/replication/slave.yml index 8be6b51..e02bc9c 100644 --- a/tasks/replication/slave.yml +++ b/tasks/replication/slave.yml @@ -5,7 +5,9 @@ when: mysql_slave_readonly - name: TEMPLATE | Deploy slave configuration - template: src=../templates/etc/mysql/conf.d/51-slave.cnf.j2 dest=/etc/mysql/conf.d/51-slave.cnf + template: > + src=etc/mysql/conf.d/51-slave.cnf.j2 + dest=/etc/mysql/conf.d/51-slave.cnf notify: restart mysql - name: MYSQL_REPLICATION | Get slave status From c8870974ee8565954a7ae99c9ad21f2d4f1b7958 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 15 Feb 2016 09:06:05 +0100 Subject: [PATCH 08/75] Force setting hostname with vagrant --- Vagrantfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Vagrantfile b/Vagrantfile index 62eda72..d8b75cb 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -29,6 +29,7 @@ Vagrant.configure("2") do |config| vms.each do |vm| config.vm.define vm[0] do |m| + m.vm.hostname = vm[0] m.vm.box = vm[1] m.vm.network "private_network", ip: vm[2] From d232b7b27df1539447fec386f9d196d52feced7a Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 7 Mar 2016 14:03:17 +0100 Subject: [PATCH 09/75] Ansible min version 2.0 + galaxy 1.1 (#9 related) --- meta/main.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meta/main.yml b/meta/main.yml index 1619e0b..617daea 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -4,15 +4,20 @@ galaxy_info: description: Install and configure MySQL or MariaDB or Percona server on Debian company: license: GPLv2 - min_ansible_version: 1.8 + min_ansible_version: 2.0 platforms: - name: Debian versions: - wheezy - jessie - categories: + galaxy_tags: - database - database:sql - packaging + - mysql + - mariadb + - percona + - replication + - debian dependencies: [] From d726cdcee9aed6fe0e2e628e608df58e4f7b94c5 Mon Sep 17 00:00:00 2001 From: E Mantel Date: Tue, 15 Mar 2016 19:49:49 +0100 Subject: [PATCH 10/75] README: Change URL in galaxy --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6010ca3..4801a6d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ MySQL vendors for Debian Ansible role ====================================== -[![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.mysql-blue.svg)](https://galaxy.ansible.com/list#/roles/4398) +[![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.mysql-blue.svg)](https://galaxy.ansible.com/HanXHX/mysql) Install and configure MySQL or MariaDB or Percona Server. Manage replication (master/slave). Create users and databases. From 838c787986bb129f22c99a3999b56346e363c4f3 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 12 Sep 2016 10:59:04 +0200 Subject: [PATCH 11/75] Fix deprecation warnings --- tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index f749d9c..20f5512 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -32,7 +32,7 @@ - name: MYSQL_DB | Create databases mysql_db: name={{ item }} state=present - with_items: mysql_databases + with_items: "{{ mysql_databases }}" - name: MYSQL_USER | Manages users... mysql_user: > @@ -41,5 +41,5 @@ priv="{{ item.priv }}" host="{{ item.host | default('localhost') }}" state=present - with_items: mysql_users + with_items: "{{ mysql_users }}" From 5e38bc02a0d11a9f7a3cb9f850d086ee34f61ff6 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 09:38:19 +0200 Subject: [PATCH 12/75] Drop wheezy support --- README.md | 4 ++-- Vagrantfile | 6 ------ meta/main.yml | 1 - tasks/install/main.yml | 6 ++---- tests/README.md | 4 +--- tests/debian-wheezy.Dockerfile | 4 ---- tests/gen.pl | 6 ------ tests/host_vars/wheezy-default-mysql-slave | 1 - tests/host_vars/wheezy-upstream-mariadb-slave | 1 - tests/host_vars/wheezy-upstream-percona-slave | 1 - 10 files changed, 5 insertions(+), 29 deletions(-) delete mode 100644 tests/debian-wheezy.Dockerfile delete mode 100644 tests/host_vars/wheezy-default-mysql-slave delete mode 100644 tests/host_vars/wheezy-upstream-mariadb-slave delete mode 100644 tests/host_vars/wheezy-upstream-percona-slave diff --git a/README.md b/README.md index 4801a6d..601a7d6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Role Variables - `mysql_origin`: origin of the package ("default" or "upstream") - `mysql_vendor`: "mysql", "mariadb" or "percona" -- `mysql_use_percona_repository`: use percona APT repository (automatic setted to true if you use "percona" as `mysql_vendor`). You need to set "true" on Wheezy if you want to install percona-xtrabackup. +- `mysql_use_percona_repository`: use percona APT repository (automatic setted to true if you use "percona" as `mysql_vendor`). ### Configuration @@ -46,7 +46,7 @@ Check "priv" syntax in [mysql_user module documentation](http://docs.ansible.com ### Packaging -- `mariadb_version`: 5.5 (Debian Wheezy only) or 10.0 +- `mariadb_version`: 10.0/10.1 - `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) - `percona_version`: Percona version 5.5 or 5.6 - `percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) diff --git a/Vagrantfile b/Vagrantfile index d8b75cb..e755a47 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -6,12 +6,6 @@ Vagrant.configure("2") do |config| vms = [ - ["wheezy-default-mysql-master", "deb/wheezy-amd64", "192.168.200.10", ["wheezy","default","mysql","master"]], - ["wheezy-default-mysql-slave", "deb/wheezy-amd64", "192.168.200.11", ["wheezy","default","mysql","slave"]], - ["wheezy-upstream-mariadb-master", "deb/wheezy-amd64", "192.168.200.12", ["wheezy","upstream","mariadb","master"]], - ["wheezy-upstream-mariadb-slave", "deb/wheezy-amd64", "192.168.200.13", ["wheezy","upstream","mariadb","slave"]], - ["wheezy-upstream-percona-master", "deb/wheezy-amd64", "192.168.200.14", ["wheezy","upstream","percona","master"]], - ["wheezy-upstream-percona-slave", "deb/wheezy-amd64", "192.168.200.15", ["wheezy","upstream","percona","slave"]], ["jessie-default-mysql-master", "debian/jessie64", "192.168.200.16", ["jessie","default","mysql","master"]], ["jessie-default-mysql-slave", "debian/jessie64", "192.168.200.17", ["jessie","default","mysql","slave"]], ["jessie-upstream-mariadb-master", "debian/jessie64", "192.168.200.18", ["jessie","upstream","mariadb","master"]], diff --git a/meta/main.yml b/meta/main.yml index 617daea..ee44aaa 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -8,7 +8,6 @@ galaxy_info: platforms: - name: Debian versions: - - wheezy - jessie galaxy_tags: - database diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 7767df4..8e7e4db 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -5,7 +5,7 @@ when: > not ( (mysql_origin == 'default' and mysql_vendor == 'mysql') or - (mysql_origin == 'default' and mysql_vendor == 'mariadb' and ansible_distribution_major_version > 7) or + (mysql_origin == 'default' and mysql_vendor == 'mariadb') or (mysql_origin == 'upstream' and mysql_vendor == 'mariadb') or (mysql_origin == 'upstream' and mysql_vendor == 'percona') ) @@ -20,7 +20,7 @@ - name: INCLUDE | Install MariaDB from Debian repo include: 'mariadb/default.yml' - when: mysql_origin == 'default' and mysql_vendor == 'mariadb' and ansible_distribution_major_version > 7 + when: mysql_origin == 'default' and mysql_vendor == 'mariadb' - name: INCLUDE | Install MariaDB from MariaDB repo include: 'mariadb/upstream.yml' @@ -40,5 +40,3 @@ - name: APT | Install Percona Xtrabackup apt: pkg=percona-xtrabackup state=present - when: ansible_distribution_major_version > 7 or mysql_use_percona_repository - diff --git a/tests/README.md b/tests/README.md index 23d30ad..c050cf9 100644 --- a/tests/README.md +++ b/tests/README.md @@ -5,10 +5,9 @@ IMPORTANT --------- - DO NOT `vagrant up`! My Vagrantfile provides 14 VMs (256MB each)... -- Each slave communicate to his master. You can't mix jessie and wheezy or mysql and mariadb. +- Each slave communicate to his master. You can't mix mysql and mariadb. - This tests uses my [MySQL role](https://github.com/HanXHX/ansible-mysql). - Tests ----- @@ -28,7 +27,6 @@ vagrant up jessie-upstream-mariadb-slave Supported platforms ------------------- -- Debian Wheezy - Debian Jessie Supported MySQL vendors diff --git a/tests/debian-wheezy.Dockerfile b/tests/debian-wheezy.Dockerfile deleted file mode 100644 index bc45db9..0000000 --- a/tests/debian-wheezy.Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM williamyeh/ansible:debian7-onbuild - -RUN apt-get update -CMD ["sh", "tests/test.sh"] diff --git a/tests/gen.pl b/tests/gen.pl index 5de9ffc..fc88970 100755 --- a/tests/gen.pl +++ b/tests/gen.pl @@ -9,12 +9,6 @@ use warnings; use Socket; my @a = ( - "wheezy-default-mysql-master", - "wheezy-default-mysql-slave", - "wheezy-upstream-mariadb-master", - "wheezy-upstream-mariadb-slave", - "wheezy-upstream-percona-master", - "wheezy-upstream-percona-slave", "jessie-default-mysql-master", "jessie-default-mysql-slave", "jessie-upstream-mariadb-master", diff --git a/tests/host_vars/wheezy-default-mysql-slave b/tests/host_vars/wheezy-default-mysql-slave deleted file mode 100644 index b9a7abf..0000000 --- a/tests/host_vars/wheezy-default-mysql-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.10' diff --git a/tests/host_vars/wheezy-upstream-mariadb-slave b/tests/host_vars/wheezy-upstream-mariadb-slave deleted file mode 100644 index 5a0ff93..0000000 --- a/tests/host_vars/wheezy-upstream-mariadb-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.12' diff --git a/tests/host_vars/wheezy-upstream-percona-slave b/tests/host_vars/wheezy-upstream-percona-slave deleted file mode 100644 index ed31632..0000000 --- a/tests/host_vars/wheezy-upstream-percona-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.14' From 1b58f143fa099ed9a1b9cb3ebd97bf62235478a5 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 09:53:23 +0200 Subject: [PATCH 13/75] Fix script and variables --- tests/gen.pl | 2 +- tests/host_vars/jessie-default-mariadb-slave | 2 +- tests/host_vars/jessie-default-mysql-slave | 2 +- tests/host_vars/jessie-upstream-mariadb-slave | 2 +- tests/host_vars/jessie-upstream-percona-slave | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/gen.pl b/tests/gen.pl index fc88970..ef25c00 100755 --- a/tests/gen.pl +++ b/tests/gen.pl @@ -27,7 +27,7 @@ foreach my $n (@a) { my @data = split(/-/, $n); printf( - '["%s", "deb/%s-amd64", "%s", [%s]],' . "\n", + '["%s", "debian/%s64", "%s", [%s]],' . "\n", $n, $data[0], long2ip($iip), diff --git a/tests/host_vars/jessie-default-mariadb-slave b/tests/host_vars/jessie-default-mariadb-slave index fab920a..812a255 100644 --- a/tests/host_vars/jessie-default-mariadb-slave +++ b/tests/host_vars/jessie-default-mariadb-slave @@ -1 +1 @@ -his_master: '192.168.200.22' +his_master: '192.168.200.16' diff --git a/tests/host_vars/jessie-default-mysql-slave b/tests/host_vars/jessie-default-mysql-slave index 812a255..b9a7abf 100644 --- a/tests/host_vars/jessie-default-mysql-slave +++ b/tests/host_vars/jessie-default-mysql-slave @@ -1 +1 @@ -his_master: '192.168.200.16' +his_master: '192.168.200.10' diff --git a/tests/host_vars/jessie-upstream-mariadb-slave b/tests/host_vars/jessie-upstream-mariadb-slave index 0dc0978..5a0ff93 100644 --- a/tests/host_vars/jessie-upstream-mariadb-slave +++ b/tests/host_vars/jessie-upstream-mariadb-slave @@ -1 +1 @@ -his_master: '192.168.200.18' +his_master: '192.168.200.12' diff --git a/tests/host_vars/jessie-upstream-percona-slave b/tests/host_vars/jessie-upstream-percona-slave index db8abd8..ed31632 100644 --- a/tests/host_vars/jessie-upstream-percona-slave +++ b/tests/host_vars/jessie-upstream-percona-slave @@ -1 +1 @@ -his_master: '192.168.200.20' +his_master: '192.168.200.14' From d6173bd9b570e209d6fb4fc20d26f0b9ed3480cc Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 10:01:02 +0200 Subject: [PATCH 14/75] [GALERA] Prepare Vagrant and variables --- Vagrantfile | 19 +++++++++++-------- tests/gen.pl | 12 +++++++++++- tests/group_vars/mariadb_galera | 1 + .../host_vars/jessie-default-mariadb_galera-1 | 1 + .../host_vars/jessie-default-mariadb_galera-2 | 1 + .../host_vars/jessie-default-mariadb_galera-3 | 1 + 6 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 tests/group_vars/mariadb_galera create mode 100644 tests/host_vars/jessie-default-mariadb_galera-1 create mode 100644 tests/host_vars/jessie-default-mariadb_galera-2 create mode 100644 tests/host_vars/jessie-default-mariadb_galera-3 diff --git a/Vagrantfile b/Vagrantfile index e755a47..ce9bb47 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -6,14 +6,17 @@ Vagrant.configure("2") do |config| vms = [ - ["jessie-default-mysql-master", "debian/jessie64", "192.168.200.16", ["jessie","default","mysql","master"]], - ["jessie-default-mysql-slave", "debian/jessie64", "192.168.200.17", ["jessie","default","mysql","slave"]], - ["jessie-upstream-mariadb-master", "debian/jessie64", "192.168.200.18", ["jessie","upstream","mariadb","master"]], - ["jessie-upstream-mariadb-slave", "debian/jessie64", "192.168.200.19", ["jessie","upstream","mariadb","slave"]], - ["jessie-upstream-percona-master", "debian/jessie64", "192.168.200.20", ["jessie","upstream","percona","master"]], - ["jessie-upstream-percona-slave", "debian/jessie64", "192.168.200.21", ["jessie","upstream","percona","slave"]], - ["jessie-default-mariadb-master", "debian/jessie64", "192.168.200.22", ["jessie","default","mariadb","master"]], - ["jessie-default-mariadb-slave", "debian/jessie64", "192.168.200.23", ["jessie","default","mariadb","slave"]] + ["jessie-default-mysql-master", "debian/jessie64", "192.168.200.10", ["jessie","default","mysql","master"]], + ["jessie-default-mysql-slave", "debian/jessie64", "192.168.200.11", ["jessie","default","mysql","slave"]], + ["jessie-upstream-mariadb-master", "debian/jessie64", "192.168.200.12", ["jessie","upstream","mariadb","master"]], + ["jessie-upstream-mariadb-slave", "debian/jessie64", "192.168.200.13", ["jessie","upstream","mariadb","slave"]], + ["jessie-upstream-percona-master", "debian/jessie64", "192.168.200.14", ["jessie","upstream","percona","master"]], + ["jessie-upstream-percona-slave", "debian/jessie64", "192.168.200.15", ["jessie","upstream","percona","slave"]], + ["jessie-default-mariadb-master", "debian/jessie64", "192.168.200.16", ["jessie","default","mariadb","master"]], + ["jessie-default-mariadb-slave", "debian/jessie64", "192.168.200.17", ["jessie","default","mariadb","slave"]], + ["jessie-default-mariadb_galera-1", "debian/jessie64", "192.168.200.18", ["jessie","default","mariadb_galera","1"]], + ["jessie-default-mariadb_galera-2", "debian/jessie64", "192.168.200.19", ["jessie","default","mariadb_galera","2"]], + ["jessie-default-mariadb_galera-3", "debian/jessie64", "192.168.200.20", ["jessie","default","mariadb_galera","3"]] ] config.vm.provider "virtualbox" do |v| diff --git a/tests/gen.pl b/tests/gen.pl index ef25c00..dd8b8aa 100755 --- a/tests/gen.pl +++ b/tests/gen.pl @@ -17,6 +17,9 @@ my @a = ( "jessie-upstream-percona-slave", "jessie-default-mariadb-master", "jessie-default-mariadb-slave", + "jessie-default-mariadb_galera-1", + "jessie-default-mariadb_galera-2", + "jessie-default-mariadb_galera-3" ); my $start_ip = '192.168.200.10'; @@ -34,13 +37,20 @@ foreach my $n (@a) join(',', map { sprintf('"%s"', $_) } @data) ); - if($data[-1] eq 'slave') + if($data[-1] eq 'slave') { open(FILE, '>', "host_vars/$n"); printf FILE (qq/his_master: '%s'\n/, $tmp_ip); close(FILE); } + if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadb_galera') + { + open(FILE, '>', "host_vars/$n"); + printf FILE (qq/galera_id: '%s'\n/, $data[-1]); + close(FILE); + } + open(FILE, '>', "group_vars/" . $data[2]); printf FILE (qq/mysql_vendor: '%s'\n/, $data[2]); close(FILE); diff --git a/tests/group_vars/mariadb_galera b/tests/group_vars/mariadb_galera new file mode 100644 index 0000000..9f6d935 --- /dev/null +++ b/tests/group_vars/mariadb_galera @@ -0,0 +1 @@ +mysql_vendor: 'mariadb_galera' diff --git a/tests/host_vars/jessie-default-mariadb_galera-1 b/tests/host_vars/jessie-default-mariadb_galera-1 new file mode 100644 index 0000000..3777c41 --- /dev/null +++ b/tests/host_vars/jessie-default-mariadb_galera-1 @@ -0,0 +1 @@ +galera_id: '1' diff --git a/tests/host_vars/jessie-default-mariadb_galera-2 b/tests/host_vars/jessie-default-mariadb_galera-2 new file mode 100644 index 0000000..e7a5643 --- /dev/null +++ b/tests/host_vars/jessie-default-mariadb_galera-2 @@ -0,0 +1 @@ +galera_id: '2' diff --git a/tests/host_vars/jessie-default-mariadb_galera-3 b/tests/host_vars/jessie-default-mariadb_galera-3 new file mode 100644 index 0000000..d29e3bd --- /dev/null +++ b/tests/host_vars/jessie-default-mariadb_galera-3 @@ -0,0 +1 @@ +galera_id: '3' From 6638ca16b1400296b4ca6dbc03ad9393a64909db Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 10:18:28 +0200 Subject: [PATCH 15/75] [GALERA] Fix galera name for vagrant --- Vagrantfile | 6 +++--- tests/gen.pl | 12 +++++++----- tests/group_vars/{mariadb_galera => mariadbgalera} | 0 ...iadb_galera-1 => jessie-upstream-mariadbgalera-1} | 0 ...iadb_galera-2 => jessie-upstream-mariadbgalera-2} | 0 ...iadb_galera-3 => jessie-upstream-mariadbgalera-3} | 0 6 files changed, 10 insertions(+), 8 deletions(-) rename tests/group_vars/{mariadb_galera => mariadbgalera} (100%) rename tests/host_vars/{jessie-default-mariadb_galera-1 => jessie-upstream-mariadbgalera-1} (100%) rename tests/host_vars/{jessie-default-mariadb_galera-2 => jessie-upstream-mariadbgalera-2} (100%) rename tests/host_vars/{jessie-default-mariadb_galera-3 => jessie-upstream-mariadbgalera-3} (100%) diff --git a/Vagrantfile b/Vagrantfile index ce9bb47..c0f4bf3 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -14,9 +14,9 @@ Vagrant.configure("2") do |config| ["jessie-upstream-percona-slave", "debian/jessie64", "192.168.200.15", ["jessie","upstream","percona","slave"]], ["jessie-default-mariadb-master", "debian/jessie64", "192.168.200.16", ["jessie","default","mariadb","master"]], ["jessie-default-mariadb-slave", "debian/jessie64", "192.168.200.17", ["jessie","default","mariadb","slave"]], - ["jessie-default-mariadb_galera-1", "debian/jessie64", "192.168.200.18", ["jessie","default","mariadb_galera","1"]], - ["jessie-default-mariadb_galera-2", "debian/jessie64", "192.168.200.19", ["jessie","default","mariadb_galera","2"]], - ["jessie-default-mariadb_galera-3", "debian/jessie64", "192.168.200.20", ["jessie","default","mariadb_galera","3"]] + ["jessie-upstream-mariadbgalera-1", "debian/jessie64", "192.168.200.18", ["jessie","upstream","mariadbgalera","1"]], + ["jessie-upstream-mariadbgalera-2", "debian/jessie64", "192.168.200.19", ["jessie","upstream","mariadbgalera","2"]], + ["jessie-upstream-mariadbgalera-3", "debian/jessie64", "192.168.200.20", ["jessie","upstream","mariadbgalera","3"]] ] config.vm.provider "virtualbox" do |v| diff --git a/tests/gen.pl b/tests/gen.pl index dd8b8aa..96440b8 100755 --- a/tests/gen.pl +++ b/tests/gen.pl @@ -17,9 +17,9 @@ my @a = ( "jessie-upstream-percona-slave", "jessie-default-mariadb-master", "jessie-default-mariadb-slave", - "jessie-default-mariadb_galera-1", - "jessie-default-mariadb_galera-2", - "jessie-default-mariadb_galera-3" + "jessie-upstream-mariadbgalera-1", + "jessie-upstream-mariadbgalera-2", + "jessie-upstream-mariadbgalera-3" ); my $start_ip = '192.168.200.10'; @@ -44,7 +44,7 @@ foreach my $n (@a) close(FILE); } - if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadb_galera') + if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') { open(FILE, '>', "host_vars/$n"); printf FILE (qq/galera_id: '%s'\n/, $data[-1]); @@ -52,7 +52,9 @@ foreach my $n (@a) } open(FILE, '>', "group_vars/" . $data[2]); - printf FILE (qq/mysql_vendor: '%s'\n/, $data[2]); + my $mv = $data[-2]; + $mv = 'mariadb_galera' if($mv eq 'mariadbgalera'); + printf FILE (qq/mysql_vendor: '%s'\n/, $mv); close(FILE); $tmp_ip = long2ip($iip); diff --git a/tests/group_vars/mariadb_galera b/tests/group_vars/mariadbgalera similarity index 100% rename from tests/group_vars/mariadb_galera rename to tests/group_vars/mariadbgalera diff --git a/tests/host_vars/jessie-default-mariadb_galera-1 b/tests/host_vars/jessie-upstream-mariadbgalera-1 similarity index 100% rename from tests/host_vars/jessie-default-mariadb_galera-1 rename to tests/host_vars/jessie-upstream-mariadbgalera-1 diff --git a/tests/host_vars/jessie-default-mariadb_galera-2 b/tests/host_vars/jessie-upstream-mariadbgalera-2 similarity index 100% rename from tests/host_vars/jessie-default-mariadb_galera-2 rename to tests/host_vars/jessie-upstream-mariadbgalera-2 diff --git a/tests/host_vars/jessie-default-mariadb_galera-3 b/tests/host_vars/jessie-upstream-mariadbgalera-3 similarity index 100% rename from tests/host_vars/jessie-default-mariadb_galera-3 rename to tests/host_vars/jessie-upstream-mariadbgalera-3 From d56bd9d0782a739f4f2a053b74325e5542b508f2 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 11:30:24 +0200 Subject: [PATCH 16/75] Ignore ansible retry files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fd8e52a..c7cdbe1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .vagrant* *.swp +*.retry From d0c3b67f168184061acb02cc736a2f473ddbabf5 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 11:40:35 +0200 Subject: [PATCH 17/75] [GALERA] Install and configuration OK => wsrep_ready ON --- README.md | 2 +- tasks/install/main.yml | 3 ++- tasks/install/mariadb/default.yml | 4 ++++ tasks/main.yml | 9 ++++++++- templates/etc/mysql/conf.d/09-galera.cnf.j2 | 21 +++++++++++++++++++++ tests/group_vars/mariadbgalera | 2 ++ tests/test.yml | 4 ++++ 7 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 templates/etc/mysql/conf.d/09-galera.cnf.j2 diff --git a/README.md b/README.md index 601a7d6..eadb43d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Role Variables -------------- - `mysql_origin`: origin of the package ("default" or "upstream") -- `mysql_vendor`: "mysql", "mariadb" or "percona" +- `mysql_vendor`: "mysql", "mariadb", "mariadb\_galera" (only with MariaDB upstream 10.1) or "percona" - `mysql_use_percona_repository`: use percona APT repository (automatic setted to true if you use "percona" as `mysql_vendor`). ### Configuration diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 8e7e4db..3cb6da9 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -7,6 +7,7 @@ (mysql_origin == 'default' and mysql_vendor == 'mysql') or (mysql_origin == 'default' and mysql_vendor == 'mariadb') or (mysql_origin == 'upstream' and mysql_vendor == 'mariadb') or + (mysql_origin == 'upstream' and mysql_vendor == 'mariadb_galera') or (mysql_origin == 'upstream' and mysql_vendor == 'percona') ) @@ -24,7 +25,7 @@ - name: INCLUDE | Install MariaDB from MariaDB repo include: 'mariadb/upstream.yml' - when: mysql_origin == 'upstream' and mysql_vendor == 'mariadb' + when: mysql_origin == 'upstream' and (mysql_vendor == 'mariadb' or mysql_vendor == 'mariadb_galera') - name: INCLUDE | Install Percona Server from Percona repo include: 'percona/upstream.yml' diff --git a/tasks/install/mariadb/default.yml b/tasks/install/mariadb/default.yml index 94208ca..c76defe 100644 --- a/tasks/install/mariadb/default.yml +++ b/tasks/install/mariadb/default.yml @@ -16,3 +16,7 @@ - name: APT | Install MariaDB server apt: pkg=mariadb-server state=present +- name: APT | Install Galera + apt: pkg=galera-3 state=present + when: mysql_vendor == 'mariadb_galera' + diff --git a/tasks/main.yml b/tasks/main.yml index 20f5512..4243a54 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -16,9 +16,16 @@ template: src=etc/mysql/conf.d/10-extra.cnf.j2 dest=/etc/mysql/conf.d/10-extra.cnf register: extraconfig +- name: TEMPLATE | Deploy Galera configuration + template: src=etc/mysql/conf.d/09-galera.cnf.j2 dest=/etc/mysql/conf.d/09-galera.cnf + register: galeraconfig + - name: SERVICE | Restart now (prevent bugs) service: name=mysql state=restarted - when: config.changed or extraconfig.changed + when: > + config.changed or + extraconfig.changed or + (galeraconfig is defined and galeraconfig.changed) - name: TEMPLATE Create .my.cnf for root template: src=root/my.cnf dest=/root/.my.cnf owner=root group=root mode=0600 backup=yes diff --git a/templates/etc/mysql/conf.d/09-galera.cnf.j2 b/templates/etc/mysql/conf.d/09-galera.cnf.j2 new file mode 100644 index 0000000..b31e03d --- /dev/null +++ b/templates/etc/mysql/conf.d/09-galera.cnf.j2 @@ -0,0 +1,21 @@ +# +# {{ ansible_managed }} +# + +[mysqld] + +# Galera config + +wsrep_on=ON +# TODO: wsrep_cluster_address=gcomm://cluster01,cluster02,cluster03 +wsrep_cluster_address=gcomm://127.0.0.1 +# TODO: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_sst_method +wsrep_sst_method=rsync +# TODO: wsrep_cluster_name="my_wsrep_cluster" + +# Deps +binlog_format=ROW +default_storage_engine=InnoDB +innodb_autoinc_lock_mode=2 +innodb_doublewrite=1 +query_cache_size=0 diff --git a/tests/group_vars/mariadbgalera b/tests/group_vars/mariadbgalera index 9f6d935..6e21163 100644 --- a/tests/group_vars/mariadbgalera +++ b/tests/group_vars/mariadbgalera @@ -1 +1,3 @@ mysql_vendor: 'mariadb_galera' +mysql_use_percona_repository: false +mariadb_version: '10.1' diff --git a/tests/test.yml b/tests/test.yml index 81677b6..81023c7 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -37,3 +37,7 @@ delegate_to: "{{ his_master }}" when: c.changed +- hosts: mariadbgalera + roles: + - ../../ + From e512d7d53c3c57f6c59be9b39e52cec02a8c1eee Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 12:04:58 +0200 Subject: [PATCH 18/75] mysql_bind_address='0.0.0.0' on all vagrant --- tests/group_vars/all | 1 + tests/group_vars/master | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/group_vars/all b/tests/group_vars/all index bfb0487..5f57ad6 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1 +1,2 @@ mysql_use_percona_repository: true +mysql_bind_address: '0.0.0.0' diff --git a/tests/group_vars/master b/tests/group_vars/master index 4b43d25..b1b48f6 100644 --- a/tests/group_vars/master +++ b/tests/group_vars/master @@ -1,6 +1,3 @@ -# Master must listen for replication -mysql_bind_address: '0.0.0.0' - # Master durability mysql_sync_binlog: '1' mysql_innodb_flush_log_at_trx_commit: '1' From fc5aa46d9400338ec363d2b7b28dee8bdcf3f528 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 17:03:13 +0200 Subject: [PATCH 19/75] [GALERA] Install and configuration: first and other nodes --- defaults/main.yml | 5 +++ tasks/galera/bootstrap.yml | 23 +++++++++++++ tasks/galera/main.yml | 19 +++++++++++ tasks/galera/nodes.yml | 29 ++++++++++++++++ tasks/main.yml | 12 +++---- templates/etc/mysql/conf.d/09-galera.cnf.j2 | 14 ++++++-- tests/gen.pl | 34 +++++++++++++------ tests/group_vars/all | 2 +- tests/group_vars/mariadbgalera | 6 ++-- tests/host_vars/jessie-default-mariadb-slave | 2 +- tests/host_vars/jessie-default-mysql-slave | 2 +- tests/host_vars/jessie-upstream-mariadb-slave | 2 +- .../host_vars/jessie-upstream-mariadbgalera-1 | 1 - .../host_vars/jessie-upstream-mariadbgalera-2 | 1 - .../host_vars/jessie-upstream-mariadbgalera-3 | 1 - tests/host_vars/jessie-upstream-percona-slave | 2 +- tests/test.yml | 5 +++ 17 files changed, 131 insertions(+), 29 deletions(-) create mode 100644 tasks/galera/bootstrap.yml create mode 100644 tasks/galera/main.yml create mode 100644 tasks/galera/nodes.yml delete mode 100644 tests/host_vars/jessie-upstream-mariadbgalera-1 delete mode 100644 tests/host_vars/jessie-upstream-mariadbgalera-2 delete mode 100644 tests/host_vars/jessie-upstream-mariadbgalera-3 diff --git a/defaults/main.yml b/defaults/main.yml index 8236b40..3b7fefa 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -135,3 +135,8 @@ mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version # ------------------------------------- percona_version: '5.6' percona_repository: 'http://repo.percona.com/apt' + + +# Galera +mysql_galera_bootstrap: false +mariadb_galera_members: [] diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml new file mode 100644 index 0000000..7204f97 --- /dev/null +++ b/tasks/galera/bootstrap.yml @@ -0,0 +1,23 @@ +--- +- set_fact: + booboo: /var/lib/mysql/.ansible_galera_boostrap + +- name: STAT | Bootstrap mark + stat: path={{ booboo }} + register: s + +- block: + + - name: COMMAND | Stop MariaDB + service: name=mysql state=stopped + + - name: COMMAND | Bootstrap first node + command: galera_new_cluster + register: bootstrap_run + + when: not s.stat.exists + +- name: COMMAND | Create Bootstrap mark + command: "touch {{ booboo }}" + args: + creates: "{{ booboo }}" diff --git a/tasks/galera/main.yml b/tasks/galera/main.yml new file mode 100644 index 0000000..8138554 --- /dev/null +++ b/tasks/galera/main.yml @@ -0,0 +1,19 @@ +--- + +- name: TEMPLATE | Deploy Galera configuration + template: src=etc/mysql/conf.d/09-galera.cnf.j2 dest=/etc/mysql/conf.d/09-galera.cnf + register: galeraconfig + +- name: INCLUDE | Bootstrap first node + include: 'bootstrap.yml' + when: inventory_hostname == mysql_galera_primary_node + +- name: INCLUDE | Configure other nodes + include: 'nodes.yml' + when: inventory_hostname != mysql_galera_primary_node + +- name: SERVICE | Restart MariaDB if needed + service: name=mysql state=restarted + when: > + (galeraconfig or (p is defined and p.changed)) and + (bootstrap_run is not defined) diff --git a/tasks/galera/nodes.yml b/tasks/galera/nodes.yml new file mode 100644 index 0000000..7d43971 --- /dev/null +++ b/tasks/galera/nodes.yml @@ -0,0 +1,29 @@ +--- + +- name: COMMAND | GET debian.cnf from primary node + command: cat /etc/mysql/debian.cnf + register: debiancnf + delegate_to: '{{ mysql_galera_primary_node }}' + +- name: COMMAND | Get current debian.cnf + command: cat /etc/mysql/debian.cnf + register: ondc + +- block: + + - name: SERVICE | Stop MariaDB + service: name=mysql state=stopped + + - name: COPY | Paste primary node's debian.cnf + copy: > + content={{ debiancnf.stdout }} + dest=/etc/mysql/debian.cnf + mode=0600 + owner=root + group=root + register: paste + + - name: SERVICE | Start MariaDB + service: name=mysql state=started + + when: debiancnf.stdout != ondc.stdout diff --git a/tasks/main.yml b/tasks/main.yml index 4243a54..5e5e00d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -16,20 +16,19 @@ template: src=etc/mysql/conf.d/10-extra.cnf.j2 dest=/etc/mysql/conf.d/10-extra.cnf register: extraconfig -- name: TEMPLATE | Deploy Galera configuration - template: src=etc/mysql/conf.d/09-galera.cnf.j2 dest=/etc/mysql/conf.d/09-galera.cnf - register: galeraconfig - - name: SERVICE | Restart now (prevent bugs) service: name=mysql state=restarted when: > config.changed or - extraconfig.changed or - (galeraconfig is defined and galeraconfig.changed) + extraconfig.changed - name: TEMPLATE Create .my.cnf for root template: src=root/my.cnf dest=/root/.my.cnf owner=root group=root mode=0600 backup=yes +- name: INCLUDE | Galera + include: galera/main.yml + when: mysql_vendor == 'mariadb_galera' + - name: INCLUDE | Replication include: replication/main.yml when: mysql_replication_master or mysql_replication_slave @@ -49,4 +48,3 @@ host="{{ item.host | default('localhost') }}" state=present with_items: "{{ mysql_users }}" - diff --git a/templates/etc/mysql/conf.d/09-galera.cnf.j2 b/templates/etc/mysql/conf.d/09-galera.cnf.j2 index b31e03d..2991ad3 100644 --- a/templates/etc/mysql/conf.d/09-galera.cnf.j2 +++ b/templates/etc/mysql/conf.d/09-galera.cnf.j2 @@ -4,16 +4,26 @@ [mysqld] +# -------------------- # Galera config +# -------------------- +# Global wsrep_on=ON -# TODO: wsrep_cluster_address=gcomm://cluster01,cluster02,cluster03 -wsrep_cluster_address=gcomm://127.0.0.1 +wsrep_provider=/usr/lib/galera/libgalera_smm.so +wsrep_cluster_address=gcomm://{{ mariadb_galera_members | join(",") }} # TODO: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_sst_method wsrep_sst_method=rsync # TODO: wsrep_cluster_name="my_wsrep_cluster" +# Node Configuration +wsrep_node_address="{{ mysql_wsrep_node_address | default(ansible_eth0.ipv4.address) }}" +wsrep_node_name="{{ mysql_wsrep_node_name | default(ansible_fqdn) }}" + + +# -------------------- # Deps +# -------------------- binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 diff --git a/tests/gen.pl b/tests/gen.pl index 96440b8..d19840b 100755 --- a/tests/gen.pl +++ b/tests/gen.pl @@ -24,7 +24,8 @@ my @a = ( my $start_ip = '192.168.200.10'; my $iip = ip2long($start_ip); -my $tmp_ip = 0; + +my @galera = (); foreach my $n (@a) { @@ -40,27 +41,40 @@ foreach my $n (@a) if($data[-1] eq 'slave') { open(FILE, '>', "host_vars/$n"); - printf FILE (qq/his_master: '%s'\n/, $tmp_ip); + printf FILE (qq/his_master: '%s'\n/, long2ip($iip)); close(FILE); } - if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') +# if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') +# { +# open(FILE, '>', "host_vars/$n"); +# printf FILE (qq/galera_id: '%s'\n/, $data[-1]); +# close(FILE); +# } + + if($data[-2] eq 'mariadbgalera') { - open(FILE, '>', "host_vars/$n"); - printf FILE (qq/galera_id: '%s'\n/, $data[-1]); - close(FILE); + push(@galera, long2ip($iip)); + goto SKIP; } open(FILE, '>', "group_vars/" . $data[2]); - my $mv = $data[-2]; - $mv = 'mariadb_galera' if($mv eq 'mariadbgalera'); - printf FILE (qq/mysql_vendor: '%s'\n/, $mv); + printf FILE (qq/mysql_vendor: '%s'\n/, $data[2]); close(FILE); - $tmp_ip = long2ip($iip); + SKIP: $iip++; } +open(FILE, '>', 'group_vars/mariadbgalera'); +say FILE qq/mysql_vendor: 'mariadb_galera'/; +say FILE qq/mariadb_galera_members:/; +foreach(@galera) +{ + say FILE qq/ - '$_'/; +} +close(FILE); + sub ip2long { return unpack("l*", pack("l*", unpack("N*", inet_aton(shift)))); } diff --git a/tests/group_vars/all b/tests/group_vars/all index 5f57ad6..be99ae6 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,2 +1,2 @@ mysql_use_percona_repository: true -mysql_bind_address: '0.0.0.0' +mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' diff --git a/tests/group_vars/mariadbgalera b/tests/group_vars/mariadbgalera index 6e21163..66d2e95 100644 --- a/tests/group_vars/mariadbgalera +++ b/tests/group_vars/mariadbgalera @@ -1,3 +1,5 @@ mysql_vendor: 'mariadb_galera' -mysql_use_percona_repository: false -mariadb_version: '10.1' +mariadb_galera_members: + - '192.168.200.18' + - '192.168.200.19' + - '192.168.200.20' diff --git a/tests/host_vars/jessie-default-mariadb-slave b/tests/host_vars/jessie-default-mariadb-slave index 812a255..f09b8ac 100644 --- a/tests/host_vars/jessie-default-mariadb-slave +++ b/tests/host_vars/jessie-default-mariadb-slave @@ -1 +1 @@ -his_master: '192.168.200.16' +his_master: '192.168.200.17' diff --git a/tests/host_vars/jessie-default-mysql-slave b/tests/host_vars/jessie-default-mysql-slave index b9a7abf..3f65dca 100644 --- a/tests/host_vars/jessie-default-mysql-slave +++ b/tests/host_vars/jessie-default-mysql-slave @@ -1 +1 @@ -his_master: '192.168.200.10' +his_master: '192.168.200.11' diff --git a/tests/host_vars/jessie-upstream-mariadb-slave b/tests/host_vars/jessie-upstream-mariadb-slave index 5a0ff93..47eee0e 100644 --- a/tests/host_vars/jessie-upstream-mariadb-slave +++ b/tests/host_vars/jessie-upstream-mariadb-slave @@ -1 +1 @@ -his_master: '192.168.200.12' +his_master: '192.168.200.13' diff --git a/tests/host_vars/jessie-upstream-mariadbgalera-1 b/tests/host_vars/jessie-upstream-mariadbgalera-1 deleted file mode 100644 index 3777c41..0000000 --- a/tests/host_vars/jessie-upstream-mariadbgalera-1 +++ /dev/null @@ -1 +0,0 @@ -galera_id: '1' diff --git a/tests/host_vars/jessie-upstream-mariadbgalera-2 b/tests/host_vars/jessie-upstream-mariadbgalera-2 deleted file mode 100644 index e7a5643..0000000 --- a/tests/host_vars/jessie-upstream-mariadbgalera-2 +++ /dev/null @@ -1 +0,0 @@ -galera_id: '2' diff --git a/tests/host_vars/jessie-upstream-mariadbgalera-3 b/tests/host_vars/jessie-upstream-mariadbgalera-3 deleted file mode 100644 index d29e3bd..0000000 --- a/tests/host_vars/jessie-upstream-mariadbgalera-3 +++ /dev/null @@ -1 +0,0 @@ -galera_id: '3' diff --git a/tests/host_vars/jessie-upstream-percona-slave b/tests/host_vars/jessie-upstream-percona-slave index ed31632..a421c89 100644 --- a/tests/host_vars/jessie-upstream-percona-slave +++ b/tests/host_vars/jessie-upstream-percona-slave @@ -1 +1 @@ -his_master: '192.168.200.14' +his_master: '192.168.200.15' diff --git a/tests/test.yml b/tests/test.yml index 81023c7..473f94c 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -38,6 +38,11 @@ when: c.changed - hosts: mariadbgalera + vars: + mysql_galera_primary_node: 'jessie-upstream-mariadbgalera-1' + mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" + mysql_use_percona_repository: false + mariadb_version: '10.1' roles: - ../../ From 8c3cc0400fa6b8866d85ebaad6c5bf2fb18671b9 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 17:54:35 +0200 Subject: [PATCH 20/75] Add Travis closes #4 --- .travis.yml | 29 +++++++++++++++++++++++++++++ README.md | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..11a8813 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,29 @@ +--- +language: python +python: "2.7" + +# Use the new container infrastructure +sudo: false + +# Install ansible +addons: + apt: + packages: + - python-pip + +install: + # Install ansible + - pip install ansible + + # Check ansible version + - ansible --version + + # Create ansible.cfg with correct roles_path + - printf '[defaults]\nroles_path=../' >ansible.cfg + +script: + # Basic role syntax check + - ansible-playbook tests/test.yml -i localhost, --syntax-check + +notifications: + webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/README.md b/README.md index 601a7d6..7ec0c4b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ MySQL vendors for Debian Ansible role ====================================== -[![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.mysql-blue.svg)](https://galaxy.ansible.com/HanXHX/mysql) +[![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.mysql-blue.svg)](https://galaxy.ansible.com/HanXHX/mysql) [![Build Status](https://travis-ci.org/HanXHX/ansible-mysql.svg?branch=master)](https://travis-ci.org/HanXHX/ansible-mysql) Install and configure MySQL or MariaDB or Percona Server. Manage replication (master/slave). Create users and databases. From 5dc5c42214af9621b5b9985e97d8bb405bc2e528 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 18:00:33 +0200 Subject: [PATCH 21/75] Manage MariaDB 10.2 + Percona server 5.7 --- README.md | 4 ++-- defaults/main.yml | 4 ++-- tests/README.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7ec0c4b..6aab0bd 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,9 @@ Check "priv" syntax in [mysql_user module documentation](http://docs.ansible.com ### Packaging -- `mariadb_version`: 10.0/10.1 +- `mariadb_version`: 10.0 / 10.1 / 10.2 - `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) -- `percona_version`: Percona version 5.5 or 5.6 +- `percona_version`: 5.5 / 5.6 / 5.7 - `percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) Dependencies diff --git a/defaults/main.yml b/defaults/main.yml index 8236b40..71df36e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -126,12 +126,12 @@ mysql_users: [] # ------------------------------------- # MariaDB # ------------------------------------- -mariadb_version: '10.0' # (5.5, 10.0) +mariadb_version: '10.1' # See: http://mariadb.org/mariadb/repositories/ mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version }}/debian" # ------------------------------------- # Percona # ------------------------------------- -percona_version: '5.6' +percona_version: '5.7' percona_repository: 'http://repo.percona.com/apt' diff --git a/tests/README.md b/tests/README.md index c050cf9..af7c9c3 100644 --- a/tests/README.md +++ b/tests/README.md @@ -32,9 +32,9 @@ Supported platforms Supported MySQL vendors ----------------------- -- MariaDB 10.0 (from Debian Jessie or MariaDB repository) +- MariaDB 10.0 / 10.1 / 10.2 (from Debian Jessie or MariaDB repository) - MySQL 5.5 (from Debian repositories) -- Percona Server 5.6 (from Percona Repository) +- Percona Server 5.5 / 5.6 / 5.7 (from Percona Repository) About MySQL 5.6 --------------- From c8e77c95e717498abaf61b91568b22184a176163 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 18:01:20 +0200 Subject: [PATCH 22/75] Useless file --- vars/main.yml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 vars/main.yml diff --git a/vars/main.yml b/vars/main.yml deleted file mode 100644 index a4ce68b..0000000 --- a/vars/main.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- - -default_mysql: true -mariadb_mariadb: true -percona_percona: true - -percona_available_versions: - - '5.5' - - '5.6' From ff6e52277142761719c764b09cb58e78a8147c66 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 23 Sep 2016 18:02:55 +0200 Subject: [PATCH 23/75] MariaDB is stable :) --- tests/README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/README.md b/tests/README.md index af7c9c3..918f34a 100644 --- a/tests/README.md +++ b/tests/README.md @@ -41,7 +41,3 @@ About MySQL 5.6 You can get MySQL 5.6 for Debian with [Dotdeb](https://www.dotdeb.org) with my [Dotdeb role](https://github.com/HanXHX/ansible-debian-dotdeb). I give no support with this version (pull-request accepted). It can work but without GTID. -About MariaDB 10.1 ------------------- - -When the application is considered stable, I'll support this version. From 17f3731450864e12d62e139e294f55963135e372 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 11:23:38 +0200 Subject: [PATCH 24/75] mysql_extra_configuration rework --- defaults/main.yml | 5 +---- templates/etc/mysql/conf.d/10-extra.cnf.j2 | 13 +++++-------- tests/group_vars/all | 2 ++ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 78fd71a..bdb456c 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -66,10 +66,7 @@ mysql_extra_configuration: [] # Example: #mysql_extra_configuration: -# - group_name: 'mysqld' -# conf: -# - key: 'innodb_awsome_feature' -# value: 1 +# 'innodb_awsome_feature': 1 # ------------------------------------- diff --git a/templates/etc/mysql/conf.d/10-extra.cnf.j2 b/templates/etc/mysql/conf.d/10-extra.cnf.j2 index b37ab9e..adc6f96 100644 --- a/templates/etc/mysql/conf.d/10-extra.cnf.j2 +++ b/templates/etc/mysql/conf.d/10-extra.cnf.j2 @@ -2,16 +2,13 @@ # {{ ansible_managed }} # ------------------------------------------- -{% for i in mysql_extra_configuration %} -[{{ i.group_name }}] -{% for c in i.conf %} -{% if c.value is defined %} -{{ c.key }} = {{ c.value }} +[mysqld] +{% for key, value in mysql_extra_configuration.iteritems() %} +{% if value is defined or value is not none %} +{{ key }} = {{ value }} {% else %} -{{ c.key }} +{{ key }} {% endif %} {% endfor %} -{% endfor %} - ; vim: set ft=dosini : diff --git a/tests/group_vars/all b/tests/group_vars/all index be99ae6..fea23c6 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,2 +1,4 @@ mysql_use_percona_repository: true mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' +mysql_extra_configuration: + innodb_commit_concurrency: 0 From 293ee332dda2f0d0ceefc8e9f13c8468f4b94a6f Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 12:47:36 +0200 Subject: [PATCH 25/75] Test playbook execution with travis --- .travis.yml | 35 +++++++++++++--------------------- tasks/install/main.yml | 2 +- tests/debian-jessie.Dockerfile | 2 +- tests/{test.sh => travis.sh} | 8 ++++---- tests/travis.yml | 13 +++++++++++++ 5 files changed, 32 insertions(+), 28 deletions(-) rename tests/{test.sh => travis.sh} (55%) create mode 100644 tests/travis.yml diff --git a/.travis.yml b/.travis.yml index 11a8813..1bfd2f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,20 @@ ---- +matrix: + include: + - env: OS=debian-jessie ORIGIN=default VENDOR=mysql + - env: OS=debian-jessie ORIGIN=default VENDOR=mariadb + - env: OS=debian-jessie ORIGIN=uptream VENDOR=mariadb + - env: OS=debian-jessie ORIGIN=uptream VENDOR=mariadb_galera + - env: OS=debian-jessie ORIGIN=uptream VENDOR=percona + +sudo: required + language: python -python: "2.7" -# Use the new container infrastructure -sudo: false - -# Install ansible -addons: - apt: - packages: - - python-pip - -install: - # Install ansible - - pip install ansible - - # Check ansible version - - ansible --version - - # Create ansible.cfg with correct roles_path - - printf '[defaults]\nroles_path=../' >ansible.cfg +services: + - docker script: - # Basic role syntax check - - ansible-playbook tests/test.yml -i localhost, --syntax-check + - docker build -f tests/$OS.Dockerfile -t test-$OS . && docker run -e "ORIGIN=$ORIGIN" -e "VENDOR=$VENDOR" --name $OS test-$OS notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 3cb6da9..61e9939 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -1,7 +1,7 @@ --- - name: FAIL | If config asked is impossible - fail: msg="config asked is impossible" + fail: msg="config asked is impossible ({{ mysql_origin }} / {{ mysql_vendor }})" when: > not ( (mysql_origin == 'default' and mysql_vendor == 'mysql') or diff --git a/tests/debian-jessie.Dockerfile b/tests/debian-jessie.Dockerfile index cd78566..03252b3 100644 --- a/tests/debian-jessie.Dockerfile +++ b/tests/debian-jessie.Dockerfile @@ -1,4 +1,4 @@ FROM williamyeh/ansible:debian8-onbuild RUN apt-get update -CMD ["sh", "tests/test.sh"] +CMD ["sh", "tests/travis.sh"] diff --git a/tests/test.sh b/tests/travis.sh similarity index 55% rename from tests/test.sh rename to tests/travis.sh index e14025a..c0940e7 100644 --- a/tests/test.sh +++ b/tests/travis.sh @@ -3,8 +3,8 @@ # Thanks to https://servercheck.in/blog/testing-ansible-roles-travis-ci-github DIR=$( dirname $0 ) -INVENTORY_FILE="$DIR/inventory" -PLAYBOOK="$DIR/test.yml" +INVENTORY_FILE="localhost," +PLAYBOOK="$DIR/travis.yml" set -ev @@ -12,10 +12,10 @@ set -ev ansible-playbook -i $INVENTORY_FILE -c local --syntax-check -vv $PLAYBOOK # Check role -ansible-playbook -i $INVENTORY_FILE -c local --sudo -vv $PLAYBOOK +ansible-playbook -i $INVENTORY_FILE -c local -e "{ mysql_vendor: $VENDOR, mysql_origin: $ORIGIN }" --sudo -vv $PLAYBOOK # Check indempotence -ansible-playbook -i $INVENTORY_FILE -c local --sudo -vv $PLAYBOOK \ +ansible-playbook -i $INVENTORY_FILE -c local -e "{ mysql_vendor: $VENDOR, mysql_origin: $ORIGIN }" --sudo -vv $PLAYBOOK \ | grep -q 'changed=0.*failed=0' \ && (echo 'Idempotence test: pass' && exit 0) \ || (echo 'Idempotence test: fail' && exit 1) diff --git a/tests/travis.yml b/tests/travis.yml new file mode 100644 index 0000000..0fec91f --- /dev/null +++ b/tests/travis.yml @@ -0,0 +1,13 @@ +--- + +- hosts: all + vars: + mysql_replication_master: true + mysql_bind_address: '{{ ansible_eth0.ipv4.address }}' + mariadb_galera_members: + - '{{ ansible_eth0.ipv4.address }}' + roles: + - ../../ + post_tasks: + - name: TEST | SHELL | Test mysql + shell: mysql -e "SHOW DATABASES;" From 0ff9527d2d8a70d695b162ed7bab153cc9789c6a Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:24:29 +0200 Subject: [PATCH 26/75] Try another thing for travis :/ --- .travis.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1bfd2f5..8ed3d31 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,17 @@ matrix: include: - - env: OS=debian-jessie ORIGIN=default VENDOR=mysql - - env: OS=debian-jessie ORIGIN=default VENDOR=mariadb - - env: OS=debian-jessie ORIGIN=uptream VENDOR=mariadb - - env: OS=debian-jessie ORIGIN=uptream VENDOR=mariadb_galera - - env: OS=debian-jessie ORIGIN=uptream VENDOR=percona + - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mysql + - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mariadb + - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=mariadb + - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=mariadb_galera + - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=percona sudo: required language: python -services: - - docker - script: - - docker build -f tests/$OS.Dockerfile -t test-$OS . && docker run -e "ORIGIN=$ORIGIN" -e "VENDOR=$VENDOR" --name $OS test-$OS + - docker build -f tests/$PLATFORM.Dockerfile -t test-$PLATFORM . && docker run -e "ORIGIN=$ORIGIN" -e "VENDOR=$VENDOR" --name $PLATFORM test-$PLATFORM notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ From fbf8be8e7f849d8894a5bb855f33ce9a9c74aebf Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:28:30 +0200 Subject: [PATCH 27/75] Travis with trusty --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8ed3d31..fb81726 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,11 @@ matrix: sudo: required +dist: trusty + +services: + - docker + language: python script: From 7fd3f4e1948cb70818551a3bc8038e0dab422e2b Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:30:55 +0200 Subject: [PATCH 28/75] Fix travis env var --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fb81726..5fa2309 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,9 @@ matrix: include: - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mysql - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mariadb - - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=mariadb - - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=mariadb_galera - - env: PLATFORM=debian-jessie ORIGIN=uptream VENDOR=percona + - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=mariadb + - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=mariadb_galera + - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=percona sudo: required From 08b6819fb295e5eaac9c5bbc837ee0d55ff90236 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:36:07 +0200 Subject: [PATCH 29/75] Add python-netaddr to docker --- tests/debian-jessie.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/debian-jessie.Dockerfile b/tests/debian-jessie.Dockerfile index 03252b3..e9099cd 100644 --- a/tests/debian-jessie.Dockerfile +++ b/tests/debian-jessie.Dockerfile @@ -1,4 +1,5 @@ FROM williamyeh/ansible:debian8-onbuild RUN apt-get update +RUN apt-get install -y python-netaddr CMD ["sh", "tests/travis.sh"] From cb8a565df6fe7f7398a8fc532ac7e99ee93d40a6 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:48:27 +0200 Subject: [PATCH 30/75] Force define galera var --- defaults/main.yml | 1 + tests/travis.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/defaults/main.yml b/defaults/main.yml index bdb456c..c984b8e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -137,3 +137,4 @@ percona_repository: 'http://repo.percona.com/apt' # Galera mysql_galera_bootstrap: false mariadb_galera_members: [] +mysql_galera_primary_node: null diff --git a/tests/travis.yml b/tests/travis.yml index 0fec91f..10877c5 100644 --- a/tests/travis.yml +++ b/tests/travis.yml @@ -6,6 +6,7 @@ mysql_bind_address: '{{ ansible_eth0.ipv4.address }}' mariadb_galera_members: - '{{ ansible_eth0.ipv4.address }}' + mysql_galera_primary_node: 'localhost' roles: - ../../ post_tasks: From 2f560bda96610c06195fe7f5f7ca67eff317a1f9 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 13:50:30 +0200 Subject: [PATCH 31/75] Don't install percona repository (prevent APT conflicts) --- README.md | 1 - defaults/main.yml | 1 - tasks/install/main.yml | 4 ---- tasks/install/percona/upstream.yml | 5 ----- tests/group_vars/all | 1 - tests/test.yml | 1 - 6 files changed, 13 deletions(-) diff --git a/README.md b/README.md index 61ca8d9..ab2dec9 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ Role Variables - `mysql_origin`: origin of the package ("default" or "upstream") - `mysql_vendor`: "mysql", "mariadb", "mariadb\_galera" (only with MariaDB upstream 10.1) or "percona" -- `mysql_use_percona_repository`: use percona APT repository (automatic setted to true if you use "percona" as `mysql_vendor`). ### Configuration diff --git a/defaults/main.yml b/defaults/main.yml index c984b8e..9d327d0 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -6,7 +6,6 @@ mysql_origin: 'default' mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' -mysql_use_percona_repository: false # ------------------------------------- # Configuration diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 61e9939..0669994 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -11,10 +11,6 @@ (mysql_origin == 'upstream' and mysql_vendor == 'percona') ) -- name: APT | Install Percona Xtrabackup - include: percona/apt.yml - when: mysql_use_percona_repository - - name: INCLUDE | Install MySQL from default repo include: 'mysql/default.yml' when: mysql_origin == 'default' and mysql_vendor == 'mysql' diff --git a/tasks/install/percona/upstream.yml b/tasks/install/percona/upstream.yml index 483d83c..b770490 100644 --- a/tasks/install/percona/upstream.yml +++ b/tasks/install/percona/upstream.yml @@ -1,12 +1,7 @@ --- -# We prevent double include - name: INCLUDE | Add percona APT repository include: apt.yml - when: not mysql_use_percona_repository - -- name: SET_FACT | We use percona repository - set_fact: mysql_use_percona_repository=true - name: DEBCONF | Prepare MySQL silent installation (root password) debconf: name='percona-server-server-{{ percona_version }}' question='percona-server-server/root_password' vtype='password' value='{{ mysql_root_password }}' diff --git a/tests/group_vars/all b/tests/group_vars/all index fea23c6..a728730 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,4 +1,3 @@ -mysql_use_percona_repository: true mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' mysql_extra_configuration: innodb_commit_concurrency: 0 diff --git a/tests/test.yml b/tests/test.yml index 473f94c..e0992b1 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -41,7 +41,6 @@ vars: mysql_galera_primary_node: 'jessie-upstream-mariadbgalera-1' mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" - mysql_use_percona_repository: false mariadb_version: '10.1' roles: - ../../ From a1a40f5ff4a3339ce5e03cfc46c799c7c55d7161 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 14:28:10 +0200 Subject: [PATCH 32/75] Minor changes --- defaults/main.yml | 2 +- tasks/install/main.yml | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 9d327d0..1b26a28 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -136,4 +136,4 @@ percona_repository: 'http://repo.percona.com/apt' # Galera mysql_galera_bootstrap: false mariadb_galera_members: [] -mysql_galera_primary_node: null +mysql_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453 diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 0669994..990f741 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -32,8 +32,6 @@ with_items: - mytop - percona-toolkit + - percona-xtrabackup - python-mysqldb - mysqltuner - -- name: APT | Install Percona Xtrabackup - apt: pkg=percona-xtrabackup state=present From 121ce274560b9883af4959a60e073b7a6ede5759 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 14:43:32 +0200 Subject: [PATCH 33/75] Change travis.sh (help idempotence debug) --- tests/travis.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/travis.sh b/tests/travis.sh index c0940e7..36f9020 100644 --- a/tests/travis.sh +++ b/tests/travis.sh @@ -15,7 +15,7 @@ ansible-playbook -i $INVENTORY_FILE -c local --syntax-check -vv $PLAYBOOK ansible-playbook -i $INVENTORY_FILE -c local -e "{ mysql_vendor: $VENDOR, mysql_origin: $ORIGIN }" --sudo -vv $PLAYBOOK # Check indempotence -ansible-playbook -i $INVENTORY_FILE -c local -e "{ mysql_vendor: $VENDOR, mysql_origin: $ORIGIN }" --sudo -vv $PLAYBOOK \ -| grep -q 'changed=0.*failed=0' \ +ansible-playbook -i $INVENTORY_FILE -c local -e "{ mysql_vendor: $VENDOR, mysql_origin: $ORIGIN }" --sudo -vv $PLAYBOOK > idempot.txt +grep -q 'changed=0.*failed=0' idempot.txt \ && (echo 'Idempotence test: pass' && exit 0) \ -|| (echo 'Idempotence test: fail' && exit 1) +|| (echo 'Idempotence test: FAIL' && cat idempot.txt && exit 1) From 1a8866d88981d694bfbb8e1a524730c4526c5aad Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 14:49:25 +0200 Subject: [PATCH 34/75] Fix idempotence... --- tests/travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/travis.yml b/tests/travis.yml index 10877c5..8bd308b 100644 --- a/tests/travis.yml +++ b/tests/travis.yml @@ -12,3 +12,4 @@ post_tasks: - name: TEST | SHELL | Test mysql shell: mysql -e "SHOW DATABASES;" + changed_when: false From 89fb9774ee3a0cd30d33f6a5c573c8fd57b6fcd4 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 14:56:42 +0200 Subject: [PATCH 35/75] No install_recommends with extra packages --- tasks/install/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 990f741..f404112 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -28,7 +28,7 @@ when: mysql_origin == 'upstream' and mysql_vendor == 'percona' - name: APT | Install few MySQL related tools - apt: pkg={{ item }} state=present + apt: pkg={{ item }} state=present install_recommends=no with_items: - mytop - percona-toolkit From a98ee0dd0ba4a1b27feebe3ceb8bbb839d38e77d Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 15:18:02 +0200 Subject: [PATCH 36/75] Galera: bootstrap don't need systemd script helper --- tasks/galera/bootstrap.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml index 7204f97..3354d22 100644 --- a/tasks/galera/bootstrap.yml +++ b/tasks/galera/bootstrap.yml @@ -1,6 +1,6 @@ --- - set_fact: - booboo: /var/lib/mysql/.ansible_galera_boostrap + booboo: "{{ mysql_datadir }}/.ansible_galera_boostrap" - name: STAT | Bootstrap mark stat: path={{ booboo }} @@ -8,12 +8,17 @@ - block: - - name: COMMAND | Stop MariaDB + - name: SERVICE | Stop MariaDB service: name=mysql state=stopped - - name: COMMAND | Bootstrap first node + - name: COMMAND | Bootstrap first node (systemd) command: galera_new_cluster + when: ansible_service_mgr == 'systemd' + + - name: COMMAND | Bootstrap first node (clean init) + command: '/etc/init.d/mysql bootstrap' register: bootstrap_run + when: ansible_service_mgr != 'systemd' when: not s.stat.exists From c984f19d539779c3ef2dd72bd637e3730402019d Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 15:25:00 +0200 Subject: [PATCH 37/75] Percona 5.7 don't start... fallback to 5.6 --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 1b26a28..0f10efe 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -129,7 +129,7 @@ mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version # ------------------------------------- # Percona # ------------------------------------- -percona_version: '5.7' +percona_version: '5.6' percona_repository: 'http://repo.percona.com/apt' From 0d64e53eabeb875483aea9a97dee834083417ba9 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 15:29:51 +0200 Subject: [PATCH 38/75] Galera must not be restarted after bootstrap first node --- defaults/main.yml | 1 + handlers/main.yml | 1 + tasks/galera/bootstrap.yml | 3 +++ 3 files changed, 5 insertions(+) diff --git a/defaults/main.yml b/defaults/main.yml index 0f10efe..62ba89a 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -6,6 +6,7 @@ mysql_origin: 'default' mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' +mysql_notify_restart: true # ------------------------------------- # Configuration diff --git a/handlers/main.yml b/handlers/main.yml index 736f653..94bf5f0 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -2,3 +2,4 @@ - name: restart mysql action: service name=mysql state=restarted enabled=yes + when: mysql_notify_restart diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml index 3354d22..ec2628d 100644 --- a/tasks/galera/bootstrap.yml +++ b/tasks/galera/bootstrap.yml @@ -7,6 +7,9 @@ register: s - block: + - name: SET_FACT | We must NOT restart after bootstrap! + set_fact: + mysql_notify_restart: false - name: SERVICE | Stop MariaDB service: name=mysql state=stopped From 071c45828052e75b8143eb3260bb03e45defe8a0 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 16:04:36 +0200 Subject: [PATCH 39/75] README improvements --- README.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ab2dec9..a04ce17 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,20 @@ MySQL vendors for Debian Ansible role [![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.mysql-blue.svg)](https://galaxy.ansible.com/HanXHX/mysql) [![Build Status](https://travis-ci.org/HanXHX/ansible-mysql.svg?branch=master)](https://travis-ci.org/HanXHX/ansible-mysql) -Install and configure MySQL or MariaDB or Percona Server. Manage replication (master/slave). Create users and databases. +Install and configure MySQL or MariaDB (Galera Cluster) or Percona Server. Manage replication (master/slave). Create users and databases. + +| OS | Vendor | Origin | Managed versions | +| --------------- | ----------------------- | --------- | ------------------- | +| Debian Jessie | MySQL | Debian | 5.5 / 5.6 | +| Debian Jessie | MariaDB | Debian | 10.0 | +| Debian Jessie | MariaDB | Upstream | 10.0 / 10.1 / 10.2 | +| Debian Jessie | MariaDB Galera Cluster | Upstream | 10.1 / 10.2 | +| Debian Jessie | Percona server | Upstream | 5.5 / 5.6 / 5.7 | Requirements ------------ -None. +None. But if you need MySQL 5.6 (from Debian respository), you must install backports. Role Variables -------------- @@ -28,7 +36,6 @@ If you need a feature you can't configure, you can use this list. These config w - `mysql_databases`: list... - ### Users Example: @@ -41,7 +48,7 @@ mysql_users: host: '%' ``` -Check "priv" syntax in [mysql_user module documentation](http://docs.ansible.com/mysql_user_module.html) +Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.com/mysql_user_module.html) ### Packaging @@ -70,7 +77,4 @@ GPLv2 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) - +- Twitter: [@hanxhx_](https://twitter.com/hanxhx_) From f0eba79073838babb05a4b94e2d63afea77bd401 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sun, 25 Sep 2016 16:05:24 +0200 Subject: [PATCH 40/75] Update meta/main.yml accordind to new features --- meta/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta/main.yml b/meta/main.yml index ee44aaa..4f3f416 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,7 +1,7 @@ --- galaxy_info: author: Emilien Mantel - description: Install and configure MySQL or MariaDB or Percona server on Debian + description: Install and configure MySQL or MariaDB (Galera Cluster) or Percona server on Debian company: license: GPLv2 min_ansible_version: 2.0 @@ -18,5 +18,7 @@ galaxy_info: - percona - replication - debian + - galera + - cluster dependencies: [] From 994e4d3cc4df36dfb0a5745e54ee48da9b090f0f Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 27 Sep 2016 16:21:19 +0200 Subject: [PATCH 41/75] mysql_extra_configuration is a hash --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 62ba89a..bf30bfd 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -62,7 +62,7 @@ mysql_syslog_tag: 'mysql' # Extra configuration # ------------------------------------- # -mysql_extra_configuration: [] +mysql_extra_configuration: {} # Example: #mysql_extra_configuration: From 1a57dc1cbf1706e1374ccfd044cca01832ecb133 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 27 Sep 2016 16:26:55 +0200 Subject: [PATCH 42/75] Optionnal apt-src on upstream repositories --- defaults/main.yml | 1 + tasks/install/mariadb/upstream.yml | 1 + tasks/install/percona/apt.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/defaults/main.yml b/defaults/main.yml index bf30bfd..ffe8864 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -7,6 +7,7 @@ mysql_origin: 'default' mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' mysql_notify_restart: true +mysql_upstream_apt_src: false # ------------------------------------- # Configuration diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index 2ec3dbb..a3075aa 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -8,6 +8,7 @@ - name: APT | Add MariaDB (src) repository apt_repository: repo='deb-src {{ mariadb_repository }} {{ ansible_distribution_release }} main' state=present + when: mysql_upstream_apt_src - name: INCLUDE | Normal Install include: default.yml diff --git a/tasks/install/percona/apt.yml b/tasks/install/percona/apt.yml index bedc04d..937ca8c 100644 --- a/tasks/install/percona/apt.yml +++ b/tasks/install/percona/apt.yml @@ -11,4 +11,5 @@ - name: APT_RESPOSITORY | Add Percona (src) repository apt_repository: repo='deb-src {{ percona_repository }} {{ ansible_distribution_release }} main' state=present + when: mysql_upstream_apt_src From 0f03fbf5855694e8bf4cec8ebce75a23424062e9 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Tue, 27 Sep 2016 17:37:43 +0200 Subject: [PATCH 43/75] Fix idempotence fail on checking debian.cnf files for galera --- tasks/galera/nodes.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasks/galera/nodes.yml b/tasks/galera/nodes.yml index 7d43971..9ff5e98 100644 --- a/tasks/galera/nodes.yml +++ b/tasks/galera/nodes.yml @@ -4,10 +4,12 @@ command: cat /etc/mysql/debian.cnf register: debiancnf delegate_to: '{{ mysql_galera_primary_node }}' + changed_when: false - name: COMMAND | Get current debian.cnf command: cat /etc/mysql/debian.cnf register: ondc + changed_when: false - block: From f1c68960d543d4864eb5a8d7a23b3a07e130b5b8 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Sep 2016 11:42:38 +0200 Subject: [PATCH 44/75] Add a default serial on handler restart --- defaults/main.yml | 1 + handlers/main.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/defaults/main.yml b/defaults/main.yml index ffe8864..28f24d4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -8,6 +8,7 @@ mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' mysql_notify_restart: true mysql_upstream_apt_src: false +mysql_serial_restart: 1 # ------------------------------------- # Configuration diff --git a/handlers/main.yml b/handlers/main.yml index 94bf5f0..d9988fd 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -3,3 +3,4 @@ - name: restart mysql action: service name=mysql state=restarted enabled=yes when: mysql_notify_restart + serial: {{ mysql_serial_restart }} From d77315ee59534ffda6c3620a1fd8b1790fbf9116 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Sep 2016 11:46:48 +0200 Subject: [PATCH 45/75] Syntax fix --- handlers/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handlers/main.yml b/handlers/main.yml index d9988fd..1f81c91 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -3,4 +3,4 @@ - name: restart mysql action: service name=mysql state=restarted enabled=yes when: mysql_notify_restart - serial: {{ mysql_serial_restart }} + serial: "{{ mysql_serial_restart }}" From e3e3ae1a053f6edd1978c5221f8faff22a4332d8 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Sep 2016 11:55:59 +0200 Subject: [PATCH 46/75] Revert "Add a default serial on handler restart" This reverts commit f1c68960d543d4864eb5a8d7a23b3a07e130b5b8. --- defaults/main.yml | 1 - handlers/main.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 28f24d4..ffe8864 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -8,7 +8,6 @@ mysql_vendor: 'mariadb' mysql_root_password: 'change_me_NOW' mysql_notify_restart: true mysql_upstream_apt_src: false -mysql_serial_restart: 1 # ------------------------------------- # Configuration diff --git a/handlers/main.yml b/handlers/main.yml index 1f81c91..94bf5f0 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -3,4 +3,3 @@ - name: restart mysql action: service name=mysql state=restarted enabled=yes when: mysql_notify_restart - serial: "{{ mysql_serial_restart }}" From 4a5a3ec75cef73e77305f248561c2b71e0470314 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 3 Oct 2016 12:16:56 +0200 Subject: [PATCH 47/75] Resetup galera --- defaults/main.yml | 2 +- tasks/galera/bootstrap.yml | 2 +- tasks/main.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index ffe8864..f21ace4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -136,6 +136,6 @@ percona_repository: 'http://repo.percona.com/apt' # Galera -mysql_galera_bootstrap: false +mysql_galera_resetup: false mariadb_galera_members: [] mysql_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453 diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml index ec2628d..4d094eb 100644 --- a/tasks/galera/bootstrap.yml +++ b/tasks/galera/bootstrap.yml @@ -23,7 +23,7 @@ register: bootstrap_run when: ansible_service_mgr != 'systemd' - when: not s.stat.exists + when: not s.stat.exists or mysql_galera_resetup - name: COMMAND | Create Bootstrap mark command: "touch {{ booboo }}" diff --git a/tasks/main.yml b/tasks/main.yml index 5e5e00d..878af9a 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -19,8 +19,8 @@ - name: SERVICE | Restart now (prevent bugs) service: name=mysql state=restarted when: > - config.changed or - extraconfig.changed + (config.changed or extraconfig.changed) and + not mysql_galera_resetup - name: TEMPLATE Create .my.cnf for root template: src=root/my.cnf dest=/root/.my.cnf owner=root group=root mode=0600 backup=yes From 70ffb6db9012d9c6fadd5bd3f88af8270d7df061 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Mon, 3 Oct 2016 12:30:26 +0200 Subject: [PATCH 48/75] Resetup secondary node (galera) --- tasks/galera/main.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tasks/galera/main.yml b/tasks/galera/main.yml index 8138554..21427a3 100644 --- a/tasks/galera/main.yml +++ b/tasks/galera/main.yml @@ -15,5 +15,7 @@ - name: SERVICE | Restart MariaDB if needed service: name=mysql state=restarted when: > - (galeraconfig or (p is defined and p.changed)) and - (bootstrap_run is not defined) + ((galeraconfig or (p is defined and p.changed)) and + (bootstrap_run is not defined)) or + ((inventory_hostname != mysql_galera_primary_node) and + (mysql_galera_resetup)) From 9c0455afe2037c7693e29e4df14e530ffbc8f441 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 9 Nov 2016 17:50:15 +0100 Subject: [PATCH 49/75] Update Percona GPG key --- tasks/install/percona/apt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/install/percona/apt.yml b/tasks/install/percona/apt.yml index 937ca8c..ed966ac 100644 --- a/tasks/install/percona/apt.yml +++ b/tasks/install/percona/apt.yml @@ -1,7 +1,7 @@ --- - name: APT_KEY | Install Percona key - apt_key: keyserver="keyserver.ubuntu.com" id="1C4CBDCDCD2EFD2A" state=present + apt_key: keyserver="keyserver.ubuntu.com" id="8507EFA5" state=present - name: TEMPLATE | Deploy APT pinning (prevent upgrades from Debian) template: src=etc/apt/preferences.d/95-percona.j2 dest=/etc/apt/preferences.d/95-percona From 25fa21021d52632031409ef302a720d8195a6cf1 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 1 Jun 2017 15:33:09 +0200 Subject: [PATCH 50/75] All variables prexied with "mysql_" --- README.md | 8 ++++---- defaults/main.yml | 10 +++++----- tasks/install/mariadb/upstream.yml | 4 ++-- tasks/install/percona/apt.yml | 4 ++-- tasks/install/percona/upstream.yml | 6 +++--- templates/etc/mysql/conf.d/09-galera.cnf.j2 | 2 +- tests/group_vars/mariadbgalera | 2 +- tests/test.yml | 2 +- tests/travis.yml | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a04ce17..9d8fd42 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,10 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co ### Packaging -- `mariadb_version`: 10.0 / 10.1 / 10.2 -- `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) -- `percona_version`: 5.5 / 5.6 / 5.7 -- `percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) +- `mysql_mariadb_version`: 10.0 / 10.1 / 10.2 +- `mysql_mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) +- `mysql_percona_version`: 5.5 / 5.6 / 5.7 +- `mysql_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) Dependencies ------------ diff --git a/defaults/main.yml b/defaults/main.yml index f21ace4..9071f82 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -124,18 +124,18 @@ mysql_users: [] # ------------------------------------- # MariaDB # ------------------------------------- -mariadb_version: '10.1' +mysql_mariadb_version: '10.1' # See: http://mariadb.org/mariadb/repositories/ -mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version }}/debian" +mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mariadb_version }}/debian" # ------------------------------------- # Percona # ------------------------------------- -percona_version: '5.6' -percona_repository: 'http://repo.percona.com/apt' +mysql_percona_version: '5.6' +mysql_percona_repository: 'http://repo.percona.com/apt' # Galera mysql_galera_resetup: false -mariadb_galera_members: [] +mysql_galera_members: [] mysql_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453 diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index a3075aa..72c4fba 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -4,10 +4,10 @@ apt_key: keyserver="keyserver.ubuntu.com" id="0xcbcb082a1bb943db" state=present - name: APT | Add MariaDB repository - apt_repository: repo='deb {{ mariadb_repository }} {{ ansible_distribution_release }} main' state=present + apt_repository: repo='deb {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present - name: APT | Add MariaDB (src) repository - apt_repository: repo='deb-src {{ mariadb_repository }} {{ ansible_distribution_release }} main' state=present + apt_repository: repo='deb-src {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present when: mysql_upstream_apt_src - name: INCLUDE | Normal Install diff --git a/tasks/install/percona/apt.yml b/tasks/install/percona/apt.yml index ed966ac..bd6b98a 100644 --- a/tasks/install/percona/apt.yml +++ b/tasks/install/percona/apt.yml @@ -7,9 +7,9 @@ template: src=etc/apt/preferences.d/95-percona.j2 dest=/etc/apt/preferences.d/95-percona - name: APT_REPOSITORY | Add Percona repository - apt_repository: repo='deb {{ percona_repository }} {{ ansible_distribution_release }} main' state=present + apt_repository: repo='deb {{ mysql_percona_repository }} {{ ansible_distribution_release }} main' state=present - name: APT_RESPOSITORY | Add Percona (src) repository - apt_repository: repo='deb-src {{ percona_repository }} {{ ansible_distribution_release }} main' state=present + apt_repository: repo='deb-src {{ mysql_percona_repository }} {{ ansible_distribution_release }} main' state=present when: mysql_upstream_apt_src diff --git a/tasks/install/percona/upstream.yml b/tasks/install/percona/upstream.yml index b770490..155d587 100644 --- a/tasks/install/percona/upstream.yml +++ b/tasks/install/percona/upstream.yml @@ -4,13 +4,13 @@ include: apt.yml - name: DEBCONF | Prepare MySQL silent installation (root password) - debconf: name='percona-server-server-{{ percona_version }}' question='percona-server-server/root_password' vtype='password' value='{{ mysql_root_password }}' + debconf: name='percona-server-server-{{ mysql_percona_version }}' question='percona-server-server/root_password' vtype='password' value='{{ mysql_root_password }}' when: not mysql_exists.stat.exists - name: DEBCONF | Prepare MySQL silent installation (root password) - debconf: name='percona-server-server-{{ percona_version }}' question='percona-server-server/root_password_again' vtype='password' value='{{ mysql_root_password }}' + debconf: name='percona-server-server-{{ mysql_percona_version }}' question='percona-server-server/root_password_again' vtype='password' value='{{ mysql_root_password }}' when: not mysql_exists.stat.exists - name: APT | Install Percona - apt: update_cache=yes cache_valid_time=3600 pkg='percona-server-server-{{ percona_version }}' state=present + apt: update_cache=yes cache_valid_time=3600 pkg='percona-server-server-{{ mysql_percona_version }}' state=present diff --git a/templates/etc/mysql/conf.d/09-galera.cnf.j2 b/templates/etc/mysql/conf.d/09-galera.cnf.j2 index 2991ad3..3ec5274 100644 --- a/templates/etc/mysql/conf.d/09-galera.cnf.j2 +++ b/templates/etc/mysql/conf.d/09-galera.cnf.j2 @@ -11,7 +11,7 @@ # Global wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so -wsrep_cluster_address=gcomm://{{ mariadb_galera_members | join(",") }} +wsrep_cluster_address=gcomm://{{ mysql_galera_members | join(",") }} # TODO: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_sst_method wsrep_sst_method=rsync # TODO: wsrep_cluster_name="my_wsrep_cluster" diff --git a/tests/group_vars/mariadbgalera b/tests/group_vars/mariadbgalera index 66d2e95..58f72bb 100644 --- a/tests/group_vars/mariadbgalera +++ b/tests/group_vars/mariadbgalera @@ -1,5 +1,5 @@ mysql_vendor: 'mariadb_galera' -mariadb_galera_members: +mysql_galera_members: - '192.168.200.18' - '192.168.200.19' - '192.168.200.20' diff --git a/tests/test.yml b/tests/test.yml index e0992b1..e839eb3 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -41,7 +41,7 @@ vars: mysql_galera_primary_node: 'jessie-upstream-mariadbgalera-1' mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" - mariadb_version: '10.1' + mysql_mariadb_version: '10.1' roles: - ../../ diff --git a/tests/travis.yml b/tests/travis.yml index 8bd308b..934fe89 100644 --- a/tests/travis.yml +++ b/tests/travis.yml @@ -4,7 +4,7 @@ vars: mysql_replication_master: true mysql_bind_address: '{{ ansible_eth0.ipv4.address }}' - mariadb_galera_members: + mysql_galera_members: - '{{ ansible_eth0.ipv4.address }}' mysql_galera_primary_node: 'localhost' roles: From 0f1d2bcdcf351cf6f8222ec8f0fa2b6e8caf130f Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 1 Jun 2017 15:56:08 +0200 Subject: [PATCH 51/75] Auto install percona apt repos if needed --- README.md | 1 + defaults/main.yml | 2 +- tasks/install/main.yml | 6 ++++++ tests/group_vars/all | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d8fd42..4e8de3a 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co - `mysql_mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) - `mysql_percona_version`: 5.5 / 5.6 / 5.7 - `mysql_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) +- `mysql_use_percona_apt`: Force using Percona APT repository (useful when you want to use latest version of percona toolkits, xtrabackup... etc) Dependencies ------------ diff --git a/defaults/main.yml b/defaults/main.yml index 9071f82..341eb24 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -133,7 +133,7 @@ mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mari # ------------------------------------- mysql_percona_version: '5.6' mysql_percona_repository: 'http://repo.percona.com/apt' - +mysql_use_percona_apt: false # Galera mysql_galera_resetup: false diff --git a/tasks/install/main.yml b/tasks/install/main.yml index f404112..28d6561 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -11,6 +11,12 @@ (mysql_origin == 'upstream' and mysql_vendor == 'percona') ) +- name: INCLUDE | Use Percona repository + include: 'percona/apt.yml' + when: > + mysql_use_percona_apt and + not (mysql_origin == 'upstream' and mysql_vendor == 'percona') + - name: INCLUDE | Install MySQL from default repo include: 'mysql/default.yml' when: mysql_origin == 'default' and mysql_vendor == 'mysql' diff --git a/tests/group_vars/all b/tests/group_vars/all index a728730..71d3a78 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,3 +1,4 @@ mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' mysql_extra_configuration: innodb_commit_concurrency: 0 +mysql_use_percona_apt: true From 80906079c0d9da6775ec5d2531a8b85e93ea96da Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 1 Jun 2017 16:26:24 +0200 Subject: [PATCH 52/75] Ensure service is started before request it --- tasks/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 878af9a..0758241 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -36,6 +36,9 @@ - name: INCLUDE | Secure install include: 'secure.yml' +- name: SERVICE | Ensure service is started + service: name=mysql state=started + - name: MYSQL_DB | Create databases mysql_db: name={{ item }} state=present with_items: "{{ mysql_databases }}" From bd97bae2f37b4f7b88d422fd196c814ea71270c3 Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 10:36:47 +0200 Subject: [PATCH 53/75] Fix broken link Fix the broken link to the MariaDB repositories tool. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e8de3a..5f5c9cc 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co ### Packaging - `mysql_mariadb_version`: 10.0 / 10.1 / 10.2 -- `mysql_mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](http://mariadb.org/mariadb/repositories/)) +- `mysql_mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](https://downloads.mariadb.org/mariadb/repositories)) - `mysql_percona_version`: 5.5 / 5.6 / 5.7 - `mysql_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) - `mysql_use_percona_apt`: Force using Percona APT repository (useful when you want to use latest version of percona toolkits, xtrabackup... etc) From 2aec278e00d81fec092f104dbe716a96d31654bc Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Jun 2017 16:15:44 +0200 Subject: [PATCH 54/75] Stretch support - Support Debian Stretch (MariaDB debian/upstream + Galera) - Doc updated - New travis tests (with Vagrant) - Drop support of mysql_innodb_additional_mem_pool_size - Xtrabackup optionnal installation + package name updatable - Fix many issues with replication (Ansible 2.3) - Auto-retreive master IP address on tests - MySQL tools per OS release --- .travis.yml | 34 ++++-- README.md | 29 +++-- Vagrantfile | 114 ++++++++++++------ defaults/main.yml | 3 +- meta/main.yml | 5 +- tasks/install/main.yml | 11 +- tasks/install/mariadb/default.yml | 1 - tasks/install/mariadb/upstream.yml | 4 +- tasks/main.yml | 3 + tasks/replication/slave.yml | 8 +- tasks/replication/slave/import_data.yml | 8 +- tasks/replication/slave/replication.yml | 1 - tasks/replication/slave/ssh.yml | 19 +++ templates/etc/mysql/my.cnf.j2 | 3 - tests/README.md | 24 +--- tests/debian-jessie.Dockerfile | 5 - tests/gen.pl | 84 ------------- tests/group_vars/all | 3 +- tests/group_vars/default | 1 - tests/group_vars/mariadb | 1 - tests/group_vars/mariadbgalera | 6 +- tests/group_vars/percona | 1 - tests/group_vars/slave | 1 - tests/group_vars/upstream | 1 - tests/host_vars/jessie-default-mariadb-slave | 1 - tests/host_vars/jessie-default-mysql-slave | 1 - tests/host_vars/jessie-upstream-mariadb-slave | 1 - tests/host_vars/jessie-upstream-percona-slave | 1 - tests/test.yml | 38 ++++-- vars/Debian-jessie.yml | 7 ++ vars/Debian-stretch.yml | 6 + 31 files changed, 215 insertions(+), 210 deletions(-) create mode 100644 tasks/replication/slave/ssh.yml delete mode 100644 tests/debian-jessie.Dockerfile delete mode 100755 tests/gen.pl delete mode 100644 tests/group_vars/default delete mode 100644 tests/group_vars/mariadb delete mode 100644 tests/group_vars/percona delete mode 100644 tests/group_vars/upstream delete mode 100644 tests/host_vars/jessie-default-mariadb-slave delete mode 100644 tests/host_vars/jessie-default-mysql-slave delete mode 100644 tests/host_vars/jessie-upstream-mariadb-slave delete mode 100644 tests/host_vars/jessie-upstream-percona-slave create mode 100644 vars/Debian-jessie.yml create mode 100644 vars/Debian-stretch.yml diff --git a/.travis.yml b/.travis.yml index 5fa2309..d42413f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,38 @@ -matrix: - include: - - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mysql - - env: PLATFORM=debian-jessie ORIGIN=default VENDOR=mariadb - - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=mariadb - - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=mariadb_galera - - env: PLATFORM=debian-jessie ORIGIN=upstream VENDOR=percona +env: + - PLATFORM='docker-jessie-default-mysql-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-jessie-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-jessie-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-jessie-upstream-percona-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-jessie-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-stretch-default-mysql-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' sudo: required dist: trusty +language: python + services: - docker -language: python +before_install: + - wget https://releases.hashicorp.com/vagrant/1.9.5/vagrant_1.9.5_x86_64.deb + - sudo dpkg -i vagrant_1.9.5_x86_64.deb + +install: + - pip install "$ANSIBLE_VERSION" script: - - docker build -f tests/$PLATFORM.Dockerfile -t test-$PLATFORM . && docker run -e "ORIGIN=$ORIGIN" -e "VENDOR=$VENDOR" --name $PLATFORM test-$PLATFORM + - VAGRANT_DEFAULT_PROVIDER=docker vagrant up $PLATFORM + - > + VAGRANT_DEFAULT_PROVIDER=docker vagrant provision $PLATFORM + | grep -q 'changed=0.*failed=0' + && (echo 'Idempotence test: pass' && exit 0) + || (echo 'Idempotence test: fail' && exit 1) + - VAGRANT_DEFAULT_PROVIDER=docker vagrant status notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/README.md b/README.md index 5f5c9cc..b56b5ab 100644 --- a/README.md +++ b/README.md @@ -5,18 +5,31 @@ MySQL vendors for Debian Ansible role Install and configure MySQL or MariaDB (Galera Cluster) or Percona Server. Manage replication (master/slave). Create users and databases. -| OS | Vendor | Origin | Managed versions | -| --------------- | ----------------------- | --------- | ------------------- | -| Debian Jessie | MySQL | Debian | 5.5 / 5.6 | -| Debian Jessie | MariaDB | Debian | 10.0 | -| Debian Jessie | MariaDB | Upstream | 10.0 / 10.1 / 10.2 | -| Debian Jessie | MariaDB Galera Cluster | Upstream | 10.1 / 10.2 | -| Debian Jessie | Percona server | Upstream | 5.5 / 5.6 / 5.7 | +| OS | Vendor | Origin | Managed versions | +| --------------- | ----------------------- | --------- | ------------------------- | +| Debian Jessie | MySQL | Debian | 5.5 / 5.6 | +| Debian Jessie | MariaDB | Debian | 10.0 | +| Debian Jessie | MariaDB | Upstream | 10.0 / 10.1 / 10.2 / 10.3 | +| Debian Jessie | MariaDB Galera Cluster | Upstream | 10.1 / 10.2 | +| Debian Jessie | Percona server | Upstream | 5.5 / 5.6 / 5.7 | +| Debian Stretch | MariaDB | Debian | 10.1 | +| Debian Stretch | MariaDB | Upstream | 10.1 / 10.2 / 10.3 | +| Debian Stretch | MariaDB Galera Cluster | Upstream | 10.1 / 10.2 | + +Notes +----- + +* MySQL 5.6 on Jessie needs backports repository +* MySQL server no longer exists on Debian Stretch +* Percona Server is not available (soon?) on Debian Stretch +* Galera Cluster is experimental +* Due to Vagrant + Docker limitation (private network), replication/galera can't be checked with Travis +* If you need to test this role with Vagrant, you must install hostmanager plugin: `vagrant plugin install vagrant-hostmanager` Requirements ------------ -None. But if you need MySQL 5.6 (from Debian respository), you must install backports. +None. Role Variables -------------- diff --git a/Vagrantfile b/Vagrantfile index c0f4bf3..06e5a87 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,42 +5,86 @@ Vagrant.configure("2") do |config| - vms = [ - ["jessie-default-mysql-master", "debian/jessie64", "192.168.200.10", ["jessie","default","mysql","master"]], - ["jessie-default-mysql-slave", "debian/jessie64", "192.168.200.11", ["jessie","default","mysql","slave"]], - ["jessie-upstream-mariadb-master", "debian/jessie64", "192.168.200.12", ["jessie","upstream","mariadb","master"]], - ["jessie-upstream-mariadb-slave", "debian/jessie64", "192.168.200.13", ["jessie","upstream","mariadb","slave"]], - ["jessie-upstream-percona-master", "debian/jessie64", "192.168.200.14", ["jessie","upstream","percona","master"]], - ["jessie-upstream-percona-slave", "debian/jessie64", "192.168.200.15", ["jessie","upstream","percona","slave"]], - ["jessie-default-mariadb-master", "debian/jessie64", "192.168.200.16", ["jessie","default","mariadb","master"]], - ["jessie-default-mariadb-slave", "debian/jessie64", "192.168.200.17", ["jessie","default","mariadb","slave"]], - ["jessie-upstream-mariadbgalera-1", "debian/jessie64", "192.168.200.18", ["jessie","upstream","mariadbgalera","1"]], - ["jessie-upstream-mariadbgalera-2", "debian/jessie64", "192.168.200.19", ["jessie","upstream","mariadbgalera","2"]], - ["jessie-upstream-mariadbgalera-3", "debian/jessie64", "192.168.200.20", ["jessie","upstream","mariadbgalera","3"]] - ] + vbox_deb_jessie = 'debian/jessie64' + vbox_deb_stretch = 'debian/stretch64' + dk_deb_jessie = 'hanxhx/vagrant-ansible:debian8' + dk_deb_stretch = 'hanxhx/vagrant-ansible:debian9' - config.vm.provider "virtualbox" do |v| - v.cpus = 1 - v.memory = 256 - end + config.hostmanager.enabled = true + config.hostmanager.manage_host = false + config.hostmanager.manage_guest = true + config.hostmanager.ignore_private_ip = false + config.hostmanager.include_offline = false - vms.each do |vm| - config.vm.define vm[0] do |m| - m.vm.hostname = vm[0] - m.vm.box = vm[1] - m.vm.network "private_network", ip: vm[2] + cases = [ + # Debian Jessie + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: dk_deb_jessie, vars: {mysql_origin: 'default', mysql_vendor: 'mysql' }, groups: ['master'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'default', mysql_vendor: 'mysql' }, groups: ['slave'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: dk_deb_jessie, vars: {mysql_origin: 'default', mysql_vendor: 'mariadb' }, groups: ['master'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'default', mysql_vendor: 'mariadb' }, groups: ['slave'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: dk_deb_jessie, vars: {mysql_origin: 'upstream', mysql_vendor: 'mariadb' }, groups: ['master'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'upstream', mysql_vendor: 'mariadb' }, groups: ['slave'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: dk_deb_jessie, vars: {mysql_origin: 'upstream', mysql_vendor: 'percona' }, groups: ['master'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'upstream', mysql_vendor: 'percona' }, groups: ['slave'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: dk_deb_jessie, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '1'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '2'] }, + { os_name: 'jessie', vbox: vbox_deb_jessie, docker: nil, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '3'] }, + # Debian Stretch + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mysql_origin: 'default', mysql_vendor: 'mysql' }, groups: ['master'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'default', mysql_vendor: 'mysql' }, groups: ['slave'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mysql_origin: 'default', mysql_vendor: 'mariadb' }, groups: ['master'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'default', mysql_vendor: 'mariadb' }, groups: ['slave'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mysql_origin: 'upstream', mysql_vendor: 'mariadb' }, groups: ['master'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'upstream', mysql_vendor: 'mariadb' }, groups: ['slave'] }, +# { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mysql_origin: 'upstream', mysql_vendor: 'percona' }, groups: ['master'] }, +# { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'upstream', mysql_vendor: 'percona' }, groups: ['slave'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '1'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '2'] }, + { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mysql_origin: 'upstream' }, groups: ['mariadbgalera', '3'] }, + ] - m.vm.provision "ansible" do |ansible| - ansible.playbook = "tests/test.yml" - ansible.groups = { - vm[3][0] => vm[0], - vm[3][1] => vm[0], - vm[3][2] => vm[0], - vm[3][3] => vm[0], - } - ansible.verbose = 'vv' - ansible.sudo = true - end - end - end + cases.each_with_index do |opts,index| + name = 'docker-' + opts[:os_name] + '-' + opts[:vars].map{|k,v| "#{v}"}.join('-') + '-' + opts[:groups].join('-') + iplsb = 10 + index + ip = '192.168.201.' + iplsb.to_s + next if opts[:docker].nil? + + config.vm.define name do |m| + m.vm.network "private_network", ip: ip + m.vm.provider "docker" do |d| + d.image = opts[:docker] + d.remains_running = true + d.has_ssh = true + end + m.vm.provision "ansible" do |ansible| + ansible.playbook = "tests/test.yml" + ansible.verbose = 'vv' + ansible.sudo = true + ansible.extra_vars = opts[:vars].merge({ is_docker: true }) + ansible.groups = { opts[:groups][0] => name } + end + end + end + + cases.each_with_index do |opts,index| + name = 'vbox-' + opts[:os_name] + '-' + opts[:vars].map{|k,v| "#{v}"}.join('-') + '-' + opts[:groups].join('-') + iplsb = 10 + index + ip = '192.168.200.' + iplsb.to_s + config.vm.define name do |m| + m.vm.hostname = name + m.vm.box = opts[:vbox] + m.vm.network "private_network", ip: ip + m.vm.provider "virtualbox" do |v| + v.cpus = 1 + v.memory = 256 + end + m.vm.provision "ansible" do |ansible| + ansible.playbook = "tests/test.yml" + ansible.verbose = 'vv' + ansible.sudo = true + ansible.extra_vars = opts[:vars].merge({ is_docker: false }) + ansible.groups = { opts[:groups][0] => name } + end + end + end end diff --git a/defaults/main.yml b/defaults/main.yml index 341eb24..b6c9ff9 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -45,7 +45,6 @@ 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_additional_mem_pool_size: '20M' # See: http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_additional_mem_pool_size mysql_innodb_log_file_size: '64M' mysql_innodb_log_buffer_size: '8M' mysql_innodb_flush_log_at_trx_commit: '1' @@ -134,6 +133,8 @@ mysql_mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mysql_mari mysql_percona_version: '5.6' mysql_percona_repository: 'http://repo.percona.com/apt' mysql_use_percona_apt: false +mysql_install_xtrabackup_package: false +mysql_xtrabackup_package: "{{ mysql_default_xtrabackup_package }}" # Galera mysql_galera_resetup: false diff --git a/meta/main.yml b/meta/main.yml index 4f3f416..d996cff 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -4,11 +4,12 @@ galaxy_info: description: Install and configure MySQL or MariaDB (Galera Cluster) or Percona server on Debian company: license: GPLv2 - min_ansible_version: 2.0 + min_ansible_version: 2.3 platforms: - name: Debian versions: - jessie + - stretch galaxy_tags: - database - database:sql @@ -20,5 +21,7 @@ galaxy_info: - debian - galera - cluster + - jessie + - stretch dependencies: [] diff --git a/tasks/install/main.yml b/tasks/install/main.yml index 28d6561..68bf356 100644 --- a/tasks/install/main.yml +++ b/tasks/install/main.yml @@ -35,9 +35,8 @@ - name: APT | Install few MySQL related tools apt: pkg={{ item }} state=present install_recommends=no - with_items: - - mytop - - percona-toolkit - - percona-xtrabackup - - python-mysqldb - - mysqltuner + with_items: "{{ mysql_tools }}" + +- name: APT | Install percona-xtrabackup if needed + apt: pkg={{ mysql_xtrabackup_package }} + when: mysql_install_xtrabackup_package diff --git a/tasks/install/mariadb/default.yml b/tasks/install/mariadb/default.yml index c76defe..5056b7e 100644 --- a/tasks/install/mariadb/default.yml +++ b/tasks/install/mariadb/default.yml @@ -19,4 +19,3 @@ - name: APT | Install Galera apt: pkg=galera-3 state=present when: mysql_vendor == 'mariadb_galera' - diff --git a/tasks/install/mariadb/upstream.yml b/tasks/install/mariadb/upstream.yml index 72c4fba..7867fcc 100644 --- a/tasks/install/mariadb/upstream.yml +++ b/tasks/install/mariadb/upstream.yml @@ -1,7 +1,8 @@ --- - name: APT | Install MariaDB key - apt_key: keyserver="keyserver.ubuntu.com" id="0xcbcb082a1bb943db" state=present + apt_key: keyserver="keyserver.ubuntu.com" id={{ item }} state=present + with_items: ['0xcbcb082a1bb943db', '0xf1656f24c74cd1d8'] - name: APT | Add MariaDB repository apt_repository: repo='deb {{ mysql_mariadb_repository }} {{ ansible_distribution_release }} main' state=present @@ -12,4 +13,3 @@ - name: INCLUDE | Normal Install include: default.yml - diff --git a/tasks/main.yml b/tasks/main.yml index 0758241..58ac38e 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,5 +1,8 @@ --- +- name: INCLUDE_VARS | Related to OS version + include_vars: "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" + - name: STAT | Check if mysql exists stat: path=/etc/init.d/mysql register: mysql_exists diff --git a/tasks/replication/slave.yml b/tasks/replication/slave.yml index e02bc9c..e3502b4 100644 --- a/tasks/replication/slave.yml +++ b/tasks/replication/slave.yml @@ -15,13 +15,17 @@ ignore_errors: yes register: slave_status +- name: INCLUDE | Transfert /etc/mysql/debian.cnf from master + include: slave/ssh.yml + when: mysql_slave_replicate_mysqldb or ((slave_status.failed is defined or not slave_status.Is_Slave) and mysql_slave_import_data) + - name: INCLUDE | Import data include: slave/import_data.yml - when: slave_status.failed is defined and mysql_slave_import_data + when: (slave_status.failed is defined or not slave_status.Is_Slave) and mysql_slave_import_data - name: INCLUDE | Configure replication include: slave/replication.yml - when: slave_status.failed is defined or mysql_slave_force_setup + when: (slave_status.failed is defined or not slave_status.Is_Slave) or mysql_slave_force_setup - name: INCLUDE | Transfert /etc/mysql/debian.cnf from master include: slave/debiancnf.yml diff --git a/tasks/replication/slave/import_data.yml b/tasks/replication/slave/import_data.yml index 4013e75..ba25216 100644 --- a/tasks/replication/slave/import_data.yml +++ b/tasks/replication/slave/import_data.yml @@ -1,7 +1,6 @@ --- # Doc: https://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_gtid.html - - name: WAIT_FOR | source data (prevent rsync bug) - TODO find another hack wait_for: host={{ mysql_slave_import_from }} port=22 @@ -26,14 +25,15 @@ - name: SET_FACT | related to mysql datadir set_fact: - mysql_mysql_datadir: "{{ datadir.msg[0][1] }}" - mysql_binlog_info: "{{ datadir.msg[0][1] }}/xtrabackup_binlog_info" + mysql_mysql_datadir: "{{ datadir.msg }}" + mysql_binlog_info: "{{ datadir.msg }}/xtrabackup_binlog_info" - name: SERVICE | Stop MySQL before importing data service: name=mysql state=stopped +# TODO: add an "ignore warning" - name: COMMAND | Sync backup to slave - TODO remove vagrant as static user (see why mysql_backup_user is not working) - shell: "sudo -E rsync --rsync-path='sudo rsync' -a -e 'ssh -o StrictHostKeyChecking=no' vagrant@{{ mysql_slave_import_from }}:{{ mysql_backup_dir }}/ {{ mysql_mysql_datadir }}/" + shell: "sudo -E rsync --rsync-path='sudo rsync' -a -e 'ssh -o StrictHostKeyChecking=no' {{ mysql_backup_user }}@{{ mysql_slave_import_from }}:{{ mysql_backup_dir }}/ {{ mysql_mysql_datadir }}/" become: no - name: FILE | Re-apply owner diff --git a/tasks/replication/slave/replication.yml b/tasks/replication/slave/replication.yml index d8d3b8a..3cf14d7 100644 --- a/tasks/replication/slave/replication.yml +++ b/tasks/replication/slave/replication.yml @@ -20,4 +20,3 @@ - name: MYSQL_REPLICATION | Start slave mysql_replication: mode=startslave - diff --git a/tasks/replication/slave/ssh.yml b/tasks/replication/slave/ssh.yml new file mode 100644 index 0000000..c9e5ceb --- /dev/null +++ b/tasks/replication/slave/ssh.yml @@ -0,0 +1,19 @@ +--- + +- name: SHELL | Create SSH key if needed on slave + shell: "ssh-keygen -b 2048 -t rsa -f {{ ansible_env.HOME }}/.ssh/id_rsa -q -N ''" + args: + creates: "{{ ansible_env.HOME }}/.ssh/id_rsa" + +- name: COMMAND | Get pub key + command: cat {{ ansible_env.HOME }}/.ssh/id_rsa.pub + register: pub_key + changed_when: false + +- name: AUTHORIZED_KEY | Auth slave to backup host + authorized_key: + user: "{{ mysql_backup_user }}" + state: present + key: "{{ pub_key.stdout }}" + delegate_to: "{{ mysql_slave_import_from }}" + become: yes diff --git a/templates/etc/mysql/my.cnf.j2 b/templates/etc/mysql/my.cnf.j2 index 11d9c7e..9d6f03b 100644 --- a/templates/etc/mysql/my.cnf.j2 +++ b/templates/etc/mysql/my.cnf.j2 @@ -63,9 +63,6 @@ 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 }} -{% if mysql_innodb_additional_mem_pool_size is defined %} -innodb_additional_mem_pool_size = {{ mysql_innodb_additional_mem_pool_size }} -{% endif %} # 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 }} diff --git a/tests/README.md b/tests/README.md index 918f34a..196c231 100644 --- a/tests/README.md +++ b/tests/README.md @@ -4,9 +4,8 @@ About tests IMPORTANT --------- -- DO NOT `vagrant up`! My Vagrantfile provides 14 VMs (256MB each)... -- Each slave communicate to his master. You can't mix mysql and mariadb. -- This tests uses my [MySQL role](https://github.com/HanXHX/ansible-mysql). +- DO NOT `vagrant up`! My Vagrantfile provides many VMs... +- Each slave communicate to his master. You can't mix mysql and mariadb. Tests ----- @@ -19,25 +18,6 @@ Wait master fully installed before run slave. Example: ``` -sudo ansible-galaxy install HanXHX.mysql vagrant up jessie-upstream-mariadb-master vagrant up jessie-upstream-mariadb-slave ``` - -Supported platforms -------------------- - -- Debian Jessie - -Supported MySQL vendors ------------------------ - -- MariaDB 10.0 / 10.1 / 10.2 (from Debian Jessie or MariaDB repository) -- MySQL 5.5 (from Debian repositories) -- Percona Server 5.5 / 5.6 / 5.7 (from Percona Repository) - -About MySQL 5.6 ---------------- - -You can get MySQL 5.6 for Debian with [Dotdeb](https://www.dotdeb.org) with my [Dotdeb role](https://github.com/HanXHX/ansible-debian-dotdeb). I give no support with this version (pull-request accepted). It can work but without GTID. - diff --git a/tests/debian-jessie.Dockerfile b/tests/debian-jessie.Dockerfile deleted file mode 100644 index e9099cd..0000000 --- a/tests/debian-jessie.Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM williamyeh/ansible:debian8-onbuild - -RUN apt-get update -RUN apt-get install -y python-netaddr -CMD ["sh", "tests/travis.sh"] diff --git a/tests/gen.pl b/tests/gen.pl deleted file mode 100755 index d19840b..0000000 --- a/tests/gen.pl +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/perl - -# -# This script generates ansible test config for Vagrant -# - -use strict; -use warnings; -use Socket; - -my @a = ( - "jessie-default-mysql-master", - "jessie-default-mysql-slave", - "jessie-upstream-mariadb-master", - "jessie-upstream-mariadb-slave", - "jessie-upstream-percona-master", - "jessie-upstream-percona-slave", - "jessie-default-mariadb-master", - "jessie-default-mariadb-slave", - "jessie-upstream-mariadbgalera-1", - "jessie-upstream-mariadbgalera-2", - "jessie-upstream-mariadbgalera-3" -); - -my $start_ip = '192.168.200.10'; -my $iip = ip2long($start_ip); - -my @galera = (); - -foreach my $n (@a) -{ - my @data = split(/-/, $n); - printf( - '["%s", "debian/%s64", "%s", [%s]],' . "\n", - $n, - $data[0], - long2ip($iip), - join(',', map { sprintf('"%s"', $_) } @data) - ); - - if($data[-1] eq 'slave') - { - open(FILE, '>', "host_vars/$n"); - printf FILE (qq/his_master: '%s'\n/, long2ip($iip)); - close(FILE); - } - -# if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') -# { -# open(FILE, '>', "host_vars/$n"); -# printf FILE (qq/galera_id: '%s'\n/, $data[-1]); -# close(FILE); -# } - - if($data[-2] eq 'mariadbgalera') - { - push(@galera, long2ip($iip)); - goto SKIP; - } - - open(FILE, '>', "group_vars/" . $data[2]); - printf FILE (qq/mysql_vendor: '%s'\n/, $data[2]); - close(FILE); - - SKIP: - $iip++; -} - -open(FILE, '>', 'group_vars/mariadbgalera'); -say FILE qq/mysql_vendor: 'mariadb_galera'/; -say FILE qq/mariadb_galera_members:/; -foreach(@galera) -{ - say FILE qq/ - '$_'/; -} -close(FILE); - -sub ip2long { - return unpack("l*", pack("l*", unpack("N*", inet_aton(shift)))); -} - -sub long2ip { - return inet_ntoa(pack("N*", shift)); -} diff --git a/tests/group_vars/all b/tests/group_vars/all index 71d3a78..a6ea88c 100644 --- a/tests/group_vars/all +++ b/tests/group_vars/all @@ -1,4 +1,5 @@ -mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' +mysql_bind_address: '0.0.0.0' mysql_extra_configuration: innodb_commit_concurrency: 0 mysql_use_percona_apt: true +mysql_install_xtrabackup_package: true diff --git a/tests/group_vars/default b/tests/group_vars/default deleted file mode 100644 index 0ad8c51..0000000 --- a/tests/group_vars/default +++ /dev/null @@ -1 +0,0 @@ -mysql_origin: 'default' diff --git a/tests/group_vars/mariadb b/tests/group_vars/mariadb deleted file mode 100644 index c4bf047..0000000 --- a/tests/group_vars/mariadb +++ /dev/null @@ -1 +0,0 @@ -mysql_vendor: 'mariadb' diff --git a/tests/group_vars/mariadbgalera b/tests/group_vars/mariadbgalera index 58f72bb..0a6e9e8 100644 --- a/tests/group_vars/mariadbgalera +++ b/tests/group_vars/mariadbgalera @@ -1,5 +1,5 @@ mysql_vendor: 'mariadb_galera' mysql_galera_members: - - '192.168.200.18' - - '192.168.200.19' - - '192.168.200.20' + - '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-upstream-mariadbgalera-1' + - '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-upstream-mariadbgalera-2' + - '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-upstream-mariadbgalera-3' diff --git a/tests/group_vars/percona b/tests/group_vars/percona deleted file mode 100644 index a8d9776..0000000 --- a/tests/group_vars/percona +++ /dev/null @@ -1 +0,0 @@ -mysql_vendor: 'percona' diff --git a/tests/group_vars/slave b/tests/group_vars/slave index 1af3ad2..b1349bf 100644 --- a/tests/group_vars/slave +++ b/tests/group_vars/slave @@ -2,7 +2,6 @@ mysql_replication_master: false mysql_replication_slave: true mysql_replication_user: 'replication' mysql_replication_password: '1a2b3c' -mysql_replication_host: '{{ his_master }}' mysql_server_id: 2 mysql_slave_ignore_db: ['norepl'] diff --git a/tests/group_vars/upstream b/tests/group_vars/upstream deleted file mode 100644 index 5b92d9b..0000000 --- a/tests/group_vars/upstream +++ /dev/null @@ -1 +0,0 @@ -mysql_origin: 'upstream' diff --git a/tests/host_vars/jessie-default-mariadb-slave b/tests/host_vars/jessie-default-mariadb-slave deleted file mode 100644 index f09b8ac..0000000 --- a/tests/host_vars/jessie-default-mariadb-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.17' diff --git a/tests/host_vars/jessie-default-mysql-slave b/tests/host_vars/jessie-default-mysql-slave deleted file mode 100644 index 3f65dca..0000000 --- a/tests/host_vars/jessie-default-mysql-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.11' diff --git a/tests/host_vars/jessie-upstream-mariadb-slave b/tests/host_vars/jessie-upstream-mariadb-slave deleted file mode 100644 index 47eee0e..0000000 --- a/tests/host_vars/jessie-upstream-mariadb-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.13' diff --git a/tests/host_vars/jessie-upstream-percona-slave b/tests/host_vars/jessie-upstream-percona-slave deleted file mode 100644 index a421c89..0000000 --- a/tests/host_vars/jessie-upstream-percona-slave +++ /dev/null @@ -1 +0,0 @@ -his_master: '192.168.200.15' diff --git a/tests/test.yml b/tests/test.yml index e839eb3..688b9f6 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -1,19 +1,13 @@ --- - hosts: all - pre_tasks: - - local_action: shell ssh-add $HOME/.vagrant.d/insecure_private_key - become: no - changed_when: false tasks: - apt: pkg={{ item }} state=present update_cache=yes cache_valid_time=3600 with_items: + - ca-certificates + - curl - strace - vim - - get_url: > - url=https://raw.githubusercontent.com/HanXHX/ansible-debian-bootstrap/master/files/bashrc - dest=/root/.bashrc - force=yes - hosts: master roles: @@ -26,22 +20,40 @@ when: c.changed - hosts: slave + pre_tasks: + - name: SHELL | Get master IP + shell: getent hosts {{ ansible_hostname | replace ('slave', 'master') }} | cut -d ' ' -f 1 + register: ip + changed_when: false + - set_fact: + # MySQL don't read /etc/hosts (from vagrant host plugin) + mysql_replication_host: "{{ ip.stdout }}" + # Need this to use vagrant 'delegate_to' + mysql_slave_import_from: "{{ ansible_hostname | replace ('slave', 'master') }}" roles: - ../../ tasks: - copy: src=import2.sql dest=/tmp/import2.sql - delegate_to: "{{ his_master }}" + delegate_to: "{{ mysql_slave_import_from }}" register: c - mysql_db: name={{ item }} state=import target=/tmp/import2.sql with_items: ['testrepl', 'norepl'] - delegate_to: "{{ his_master }}" + delegate_to: "{{ mysql_slave_import_from }}" when: c.changed + - mysql_replication: mode=getslave + register: slave + - fail: msg="Slave issue" + when: slave.Slave_IO_Running != 'Yes' or slave.Slave_SQL_Running != 'Yes' - hosts: mariadbgalera vars: - mysql_galera_primary_node: 'jessie-upstream-mariadbgalera-1' - mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" - mysql_mariadb_version: '10.1' + mysql_galera_primary_node: '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-upstream-mariadbgalera-1' + mysql_wsrep_node_address: "{{ ansible_all_ipv4_addresses[0] }}" + mysql_mariadb_version: '10.2' + pre_tasks: + - set_fact: + mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" + when: not is_docker roles: - ../../ diff --git a/vars/Debian-jessie.yml b/vars/Debian-jessie.yml new file mode 100644 index 0000000..8f67125 --- /dev/null +++ b/vars/Debian-jessie.yml @@ -0,0 +1,7 @@ +mysql_tools: + - mytop + - percona-toolkit + - python-mysqldb + - mysqltuner + +mysql_default_xtrabackup_package: 'percona-xtrabackup' diff --git a/vars/Debian-stretch.yml b/vars/Debian-stretch.yml new file mode 100644 index 0000000..a56b5a0 --- /dev/null +++ b/vars/Debian-stretch.yml @@ -0,0 +1,6 @@ +mysql_tools: + - percona-toolkit + - python-mysqldb + - mysqltuner + +mysql_default_xtrabackup_package: 'percona-xtrabackup-24' From 91bfbb1e927a6ca39cd93d76c0d586421bfa63d1 Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Jun 2017 16:25:39 +0200 Subject: [PATCH 55/75] Fix travis: mariadb from debian packages --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d42413f..d72a089 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,11 @@ env: - PLATFORM='docker-jessie-default-mysql-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - - PLATFORM='docker-jessie-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-jessie-default-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-jessie-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-jessie-upstream-percona-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-jessie-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-stretch-default-mysql-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - - PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - PLATFORM='docker-stretch-default-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' From ae398688e134f9601d2a5fb3665c3efcccf64cbc Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Jun 2017 16:27:36 +0200 Subject: [PATCH 56/75] Travis: add vagrant plugin hostmanager --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d72a089..cefbd62 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ services: before_install: - wget https://releases.hashicorp.com/vagrant/1.9.5/vagrant_1.9.5_x86_64.deb - sudo dpkg -i vagrant_1.9.5_x86_64.deb + - vagrant plugin install vagrant-hostmanager install: - pip install "$ANSIBLE_VERSION" From 312560ed3204a9dfb95ea4ae1692f678eb91c8da Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Jun 2017 17:43:35 +0200 Subject: [PATCH 57/75] Bypass ansible issue (with MariaDB 10.2) --- tests/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test.yml b/tests/test.yml index 688b9f6..bfa7d4d 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -49,7 +49,7 @@ vars: mysql_galera_primary_node: '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-upstream-mariadbgalera-1' mysql_wsrep_node_address: "{{ ansible_all_ipv4_addresses[0] }}" - mysql_mariadb_version: '10.2' + mysql_mariadb_version: '10.1' pre_tasks: - set_fact: mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" From 546652e46b932c89280a72cb4caa86250b2ddcbd Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Wed, 28 Jun 2017 17:44:17 +0200 Subject: [PATCH 58/75] Fix bootstrap galera according to latest versions --- tasks/galera/bootstrap.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tasks/galera/bootstrap.yml b/tasks/galera/bootstrap.yml index 4d094eb..4cd34d1 100644 --- a/tasks/galera/bootstrap.yml +++ b/tasks/galera/bootstrap.yml @@ -18,8 +18,11 @@ command: galera_new_cluster when: ansible_service_mgr == 'systemd' - - name: COMMAND | Bootstrap first node (clean init) - command: '/etc/init.d/mysql bootstrap' + - name: SERVICE | Bootstrap first node (clean init) + service: + name: mysql + state: started + arguments: --wsrep-new-cluster register: bootstrap_run when: ansible_service_mgr != 'systemd' From 9f939e888b99adcc25852b882842e0ee5fa7816f Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 29 Jun 2017 10:29:12 +0200 Subject: [PATCH 59/75] Travis: don't check mariadb upstream stretch (#19) --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index cefbd62..39fbc19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,12 @@ env: - PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' +matrix: + allow_failures: + - env: PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - env: PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' + fast_finish: true + sudo: required dist: trusty From 47be1b60a6502de2b201badd5f6d524c4daf1a7e Mon Sep 17 00:00:00 2001 From: "Jasper N. Brouwer" Date: Wed, 28 Jun 2017 21:44:45 +0200 Subject: [PATCH 60/75] 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 61/75] 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 62/75] 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 63/75] 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 64/75] 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 65/75] 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 66/75] 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 67/75] 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 68/75] 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 69/75] 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 From e5034f4296b802487657d41b8ab32e761c614d39 Mon Sep 17 00:00:00 2001 From: Mitchel Date: Fri, 27 Oct 2017 15:16:53 +0200 Subject: [PATCH 70/75] Quote password Quote password to allow characters like `;` --- templates/root/my.cnf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/root/my.cnf b/templates/root/my.cnf index dae1d87..6052e60 100644 --- a/templates/root/my.cnf +++ b/templates/root/my.cnf @@ -4,5 +4,4 @@ [client] user=root -password={{ mysql_root_password }} - +password="{{ mysql_root_password }}" From 680141689b2f7b95bcb0068c6be7d9caf4d5332f Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 2 Nov 2017 14:58:47 +0100 Subject: [PATCH 71/75] TravisCI: allow failure on all galera conf --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 39fbc19..8074115 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: matrix: allow_failures: - - env: PLATFORM='docker-stretch-upstream-mariadb-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - env: PLATFORM='docker-jessie-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' - env: PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' fast_finish: true From 8e256a78ae4ba700a772ca68d15786970c460caf Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Thu, 2 Nov 2017 15:01:46 +0100 Subject: [PATCH 72/75] Fix travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8074115..41ba0b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: matrix: allow_failures: - - env: PLATFORM='docker-jessie-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - env: PLATFORM='docker-jessie-upstream-percona-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' - env: PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' fast_finish: true From 4bf07cc4c64f6282537b6ea4c9691c3dc9687f8a Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Fri, 3 Nov 2017 11:09:18 +0100 Subject: [PATCH 73/75] Fix travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 41ba0b2..87bf772 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: matrix: allow_failures: - - env: PLATFORM='docker-jessie-upstream-percona-master' ANSIBLE_VERSION='ansible>=2.3,<2.4' + - env: PLATFORM='docker-jessie-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' - env: PLATFORM='docker-stretch-upstream-mariadbgalera-1' ANSIBLE_VERSION='ansible>=2.3,<2.4' fast_finish: true From fea0dcffaef370ca69849b519f811db10a3d25eb Mon Sep 17 00:00:00 2001 From: Emilien Mantel Date: Sat, 9 Dec 2017 17:10:55 +0100 Subject: [PATCH 74/75] Donation --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index b56b5ab..c3eafe7 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,18 @@ License GPLv2 +Donation +-------- + +If this code helped you, or if you’ve used them for your projects, feel free to buy me some :beers: + +- Bitcoin: `1BQwhBeszzWbUTyK4aUyq3SRg7rBSHcEQn` +- Ethereum: `63abe6b2648fd892816d87a31e3d9d4365a737b5` +- Litecoin: `LeNDw34zQLX84VvhCGADNvHMEgb5QyFXyD` +- Monero: `45wbf7VdQAZS5EWUrPhen7Wo4hy7Pa7c7ZBdaWQSRowtd3CZ5vpVw5nTPphTuqVQrnYZC72FXDYyfP31uJmfSQ6qRXFy3bQ` + +No crypto-currency? :star: the project is also a way of saying thank you! :sunglasses: + Author Information ------------------ From ab63c1ccc54a3b1d967b0429ad24d6e0193ac3da Mon Sep 17 00:00:00 2001 From: Daniel Bacher Date: Wed, 14 Feb 2018 13:28:55 +0100 Subject: [PATCH 75/75] make role python3 compatible (#24) --- templates/etc/mysql/conf.d/10-extra.cnf.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/etc/mysql/conf.d/10-extra.cnf.j2 b/templates/etc/mysql/conf.d/10-extra.cnf.j2 index adc6f96..55f521b 100644 --- a/templates/etc/mysql/conf.d/10-extra.cnf.j2 +++ b/templates/etc/mysql/conf.d/10-extra.cnf.j2 @@ -3,7 +3,7 @@ # ------------------------------------------- [mysqld] -{% for key, value in mysql_extra_configuration.iteritems() %} +{% for key, value in mysql_extra_configuration.items() %} {% if value is defined or value is not none %} {{ key }} = {{ value }} {% else %}