Full buster optim (#38)
* Remove Stretch and Percona support * Delete root password management (On Buster, it uses socket auth) * Fix sync backups files master -> slave * Cleanup legacy code on replication slave * Use modern configuration * Debian buster configuration style * Drop logrotate management (useless) * Add new default values in defaults/main.yml (according with MariaDB doc) * Travis with Ansible 2.8+ * Drop feature "don't replicate mysql database" * Fully compatible with python3pull/40/head 2.0.0
							parent
							
								
									ba8477d8ed
								
							
						
					
					
						commit
						0b4983e090
					
				
								
									
									
										
											24
										
									
									.travis.yml
									
									
									
									
								
								
							
							
										
											24
										
									
									.travis.yml
									
									
									
									
								|  | @ -1,20 +1,12 @@ | |||
| env: | ||||
|   - PLATFORM='docker-stretch-default-master'    ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-stretch-upstream-master'   ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-stretch-default-galera-1'  ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-buster-default-master'     ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-buster-upstream-master'    ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-buster-default-galera-1'   ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-buster-upstream-galera-1'  ANSIBLE_VERSION='ansible>=2.6,<2.7' | ||||
|   - PLATFORM='docker-stretch-default-master'    ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-stretch-upstream-master'   ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-stretch-default-galera-1'  ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-buster-default-master'     ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-buster-upstream-master'    ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-buster-default-galera-1'   ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-buster-upstream-galera-1'  ANSIBLE_VERSION='ansible>=2.7,<2.8' | ||||
|   - PLATFORM='docker-buster-default-master'     ANSIBLE_VERSION='ansible>=2.8,<2.9' | ||||
|   - PLATFORM='docker-buster-upstream-master'    ANSIBLE_VERSION='ansible>=2.8,<2.9' | ||||
|   - PLATFORM='docker-buster-default-galera-1'   ANSIBLE_VERSION='ansible>=2.8,<2.9' | ||||
|   - PLATFORM='docker-buster-upstream-galera-1'  ANSIBLE_VERSION='ansible>=2.8,<2.9' | ||||
|   - PLATFORM='docker-buster-default-master'     ANSIBLE_VERSION='ansible>=2.9,<2.10' | ||||
|   - PLATFORM='docker-buster-upstream-master'    ANSIBLE_VERSION='ansible>=2.9,<2.10' | ||||
|   - PLATFORM='docker-buster-default-galera-1'   ANSIBLE_VERSION='ansible>=2.9,<2.10' | ||||
|   - PLATFORM='docker-buster-upstream-galera-1'  ANSIBLE_VERSION='ansible>=2.9,<2.10' | ||||
| 
 | ||||
| sudo: required | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,8 +7,6 @@ Install and configure MariaDB (Galera Cluster). Manage replication (master/slave | |||
| 
 | ||||
| | OS              | Origin    | MariaDB versions          | | ||||
| | --------------- | --------- | ------------------------- | | ||||
| | Debian Stretch  | Debian    | 10.1                      | | ||||
| | Debian Stretch  | Upstream  | 10.1 / 10.2 / 10.3 / 10.4 | | ||||
| | Debian Buster   | Debian    | 10.3                      | | ||||
| | Debian Buster   | Upstream  | 10.3 / 10.4               | | ||||
| 
 | ||||
|  | @ -18,12 +16,11 @@ Notes | |||
| * 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` | ||||
| * Percona Xtrabackup is not available in upstream repository. This feature is disabled in the role. | ||||
| 
 | ||||
| Requirements | ||||
| ------------ | ||||
| 
 | ||||
| Ansible 2.5+ | ||||
| Ansible 2.8+ | ||||
| 
 | ||||
| Role Variables | ||||
| -------------- | ||||
|  | @ -32,8 +29,6 @@ Role Variables | |||
| 
 | ||||
| ### Configuration | ||||
| 
 | ||||
| - `mariadb_root_password`: root password (should be protected with [vault](http://docs.ansible.com/playbooks_vault.html)) | ||||
| 
 | ||||
| If you need a feature you can't configure, you can use this list. These config will go to `/etc/mysql/conf.d/01-extra`. | ||||
| 
 | ||||
| - `mariadb_extra_config`: key/value hash see [default vars file](defaults/main.yml) | ||||
|  | @ -64,8 +59,6 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co | |||
| 
 | ||||
| - `mariadb_version`: depends Debian version | ||||
| - `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](https://downloads.mariadb.org/mariadb/repositories)) | ||||
| - `mariadb_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html)) | ||||
| - `mariadb_use_percona_apt`: Force using Percona APT repository (useful when you want to use latest version of percona toolkits, xtrabackup... etc) | ||||
| 
 | ||||
| Dependencies | ||||
| ------------ | ||||
|  |  | |||
|  | @ -5,8 +5,6 @@ | |||
| 
 | ||||
| Vagrant.configure("2") do |config| | ||||
| 
 | ||||
|   vbox_deb_stretch = 'debian/stretch64' | ||||
|   dk_deb_stretch = 'hanxhx/vagrant-ansible:debian9' | ||||
|   vbox_deb_buster = 'debian/buster64' | ||||
|   dk_deb_buster = 'hanxhx/vagrant-ansible:debian10' | ||||
| 
 | ||||
|  | @ -17,39 +15,17 @@ Vagrant.configure("2") do |config| | |||
|   config.hostmanager.include_offline = false | ||||
| 
 | ||||
|   cases = [ | ||||
|     # ======================== | ||||
|     # Debian Stretch | ||||
|     # ======================== | ||||
| 
 | ||||
|     # Default replication | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default'  }, groups: ['master'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'default'  }, groups: ['slave'] }, | ||||
| 
 | ||||
|     # Upstream replication | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['master'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, | ||||
| 
 | ||||
|     # Galera Debian | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default'  }, groups: ['galera', '1'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'default'  }, groups: ['galera', '2'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'default'  }, groups: ['galera', '3'] }, | ||||
| 
 | ||||
|     # Galera Upstream | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '1'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'upstream' }, groups: ['galera', '2'] }, | ||||
|     { os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil,            vars: {mariadb_origin: 'upstream' }, groups: ['galera', '3'] }, | ||||
| 
 | ||||
|     # ======================== | ||||
|     # Debian Buster | ||||
|     # ======================== | ||||
| 
 | ||||
|     # Default replication | ||||
|     { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default'  }, groups: ['master'] }, | ||||
| #   { os_name: 'buster', vbox: vbox_deb_buster, docker: nil,           vars: {mariadb_origin: 'default'  }, groups: ['slave'] }, | ||||
|     { os_name: 'buster', vbox: vbox_deb_buster, docker: nil,           vars: {mariadb_origin: 'default'  }, groups: ['slave'] }, | ||||
| 
 | ||||
|     # Upstream replication | ||||
|     { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'upstream' }, groups: ['master'] }, | ||||
| #   { os_name: 'buster', vbox: vbox_deb_buster, docker: nil,           vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, | ||||
|     { os_name: 'buster', vbox: vbox_deb_buster, docker: nil,           vars: {mariadb_origin: 'upstream' }, groups: ['slave'] }, | ||||
| 
 | ||||
|     # Galera Debian | ||||
|     { os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default'  }, groups: ['galera', '1'] }, | ||||
|  |  | |||
|  | @ -5,24 +5,19 @@ | |||
| # ------------------------------------- | ||||
| mariadb_origin: 'default' | ||||
| mariadb_use_galera: false | ||||
| mariadb_root_password: 'change_me_NOW' | ||||
| mariadb_notify_restart: true | ||||
| mariadb_upstream_apt_src: false | ||||
| mariadb_manage_logrotate: true | ||||
| 
 | ||||
| # ------------------------------------- | ||||
| # Configuration | ||||
| # ------------------------------------- | ||||
| 
 | ||||
| # MariaDB configuration template | ||||
| mariadb_config_template: 'etc/mysql/my.cnf.j2' | ||||
| 
 | ||||
| # MariaDB connection settings. | ||||
| mariadb_port: "3306" | ||||
| mariadb_bind_address: '127.0.0.1' | ||||
| mariadb_datadir: '/var/lib/mysql' | ||||
| mariadb_pid_file: '/var/run/mysqld/mysqld.pid' | ||||
| mariadb_socket: '/var/run/mysqld/mysqld.sock' | ||||
| mariadb_pid_file: '/run/mysqld/mysqld.pid' | ||||
| mariadb_socket: '/run/mysqld/mysqld.sock' | ||||
| 
 | ||||
| # Slow query log settings. | ||||
| mariadb_slow_query_log_enabled: false | ||||
|  | @ -30,37 +25,38 @@ mariadb_slow_query_log_file: '/var/log/mysql/mysql_slow.log' | |||
| mariadb_slow_query_time: 2 | ||||
| 
 | ||||
| # Memory settings (default values optimized ~512MB RAM). | ||||
| # Fine Tuning | ||||
| mariadb_key_buffer_size: '256M' | ||||
| mariadb_max_allowed_packet: '64M' | ||||
| mariadb_table_open_cache: '256' | ||||
| mariadb_sort_buffer_size: '1M' | ||||
| mariadb_max_connections: 100 | ||||
| mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}" | ||||
| 
 | ||||
| 
 | ||||
| mariadb_table_open_cache: '2000' | ||||
| mariadb_sort_buffer_size: '2M' | ||||
| mariadb_read_buffer_size: '1M' | ||||
| mariadb_read_rnd_buffer_size: '4M' | ||||
| mariadb_myisam_sort_buffer_size: '64M' | ||||
| mariadb_thread_cache_size: '8' | ||||
| mariadb_read_rnd_buffer_size: '2M' | ||||
| mariadb_myisam_sort_buffer_size: '128M' | ||||
| mariadb_thread_cache_size: '256' | ||||
| mariadb_query_cache_size: '16M' | ||||
| 
 | ||||
| # Other settings. | ||||
| mariadb_wait_timeout: 28800 | ||||
| 
 | ||||
| # Try number of CPU's * 2 for thread_concurrency. | ||||
| mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}" | ||||
| 
 | ||||
| # InnoDB settings. | ||||
| mariadb_innodb_file_per_table: '1' | ||||
| mariadb_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M" | ||||
| mariadb_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 | ||||
| mariadb_innodb_log_buffer_size: '8M' | ||||
| mariadb_innodb_flush_log_at_trx_commit: '1' | ||||
| mariadb_innodb_lock_wait_timeout: 50 | ||||
| 
 | ||||
| # mysqldump settings. | ||||
| mariadb_mysqldump_max_allowed_packet: '64M' | ||||
| 
 | ||||
| # Logging settings. | ||||
| mariadb_log_error: '/var/log/mysql/mysql_error.log' | ||||
| mariadb_syslog_tag: 'mysql' | ||||
| 
 | ||||
| # mysqldump settings. | ||||
| mariadb_mysqldump_max_allowed_packet: '64M' | ||||
| 
 | ||||
| # ------------------------------------- | ||||
| # Extra configuration | ||||
| # ------------------------------------- | ||||
|  | @ -101,8 +97,6 @@ mariadb_slave_import_data: true | |||
| mariadb_slave_import_from: "{{ mariadb_replication_host }}" | ||||
| # Delete dump after slave configuration (set false if you have many slaves to install, it avoids to create many dumps) | ||||
| mariadb_slave_import_flush_dump: true | ||||
| # Slave uses mysql database from master? | ||||
| mariadb_slave_replicate_mysqldb: true | ||||
| # Don't replicate these DBs/tables | ||||
| mariadb_slave_ignore_db: [] | ||||
| mariadb_slave_ignore_table: [] | ||||
|  | @ -139,11 +133,3 @@ mariadb_wsrep_node_address: false # Set primary node IP | |||
| mariadb_galera_members: [] | ||||
| mariadb_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453 | ||||
| mariadb_wsrep_stt_method: 'rsync' | ||||
| 
 | ||||
| # ------------------------------------- | ||||
| # Percona | ||||
| # ------------------------------------- | ||||
| mariadb_percona_repository: 'http://repo.percona.com/apt' | ||||
| mariadb_use_percona_apt: false | ||||
| mariadb_install_xtrabackup_package: false | ||||
| mariadb_xtrabackup_package: "{{ mariadb_default_xtrabackup_package }}" | ||||
|  |  | |||
|  | @ -4,11 +4,10 @@ galaxy_info: | |||
|   description: Install and configure MariaDB (and Galera Cluster) on Debian | ||||
|   company: | ||||
|   license: GPLv2 | ||||
|   min_ansible_version: 2.5 | ||||
|   min_ansible_version: 2.8 | ||||
|   platforms: | ||||
|   - name: Debian | ||||
|     versions: | ||||
|     - stretch | ||||
|     - buster | ||||
|   galaxy_tags: | ||||
|   - database | ||||
|  | @ -19,6 +18,5 @@ galaxy_info: | |||
|   - debian | ||||
|   - galera | ||||
|   - cluster | ||||
|   - stretch | ||||
| dependencies: [] | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,8 +2,8 @@ | |||
| 
 | ||||
| - name: TEMPLATE | Deploy Galera configuration | ||||
|   template: | ||||
|     src: etc/mysql/conf.d/09-galera.cnf.j2 | ||||
|     dest: /etc/mysql/conf.d/09-galera.cnf | ||||
|     src: etc/mysql/mariadb.conf.d/20-galera.cnf.j2 | ||||
|     dest: /etc/mysql/mariadb.conf.d/20-galera.cnf | ||||
|   register: galeraconfig | ||||
| 
 | ||||
| - name: INCLUDE | Bootstrap first node | ||||
|  |  | |||
|  | @ -1,9 +1,5 @@ | |||
| --- | ||||
| 
 | ||||
| - name: INCLUDE | Setup Percona repository | ||||
|   import_tasks: 'percona/apt.yml' | ||||
|   when: mariadb_use_percona_apt | bool | ||||
| 
 | ||||
| - name: INCLUDE | Setup MariaDB repository | ||||
|   import_tasks: 'mariadb/upstream.yml' | ||||
|   when: mariadb_origin == 'upstream' | ||||
|  | @ -15,8 +11,3 @@ | |||
|   apt: | ||||
|     pkg: "{{ mariadb_tools }}" | ||||
|     install_recommends: no | ||||
| 
 | ||||
| - name: APT | Install percona-xtrabackup if needed | ||||
|   apt: | ||||
|     pkg: "{{ mariadb_xtrabackup_package }}" | ||||
|   when: mariadb_install_xtrabackup_package | bool | ||||
|  |  | |||
|  | @ -1,26 +1,5 @@ | |||
| --- | ||||
| 
 | ||||
| - name: SHELL | Get MariaDB target version | ||||
|   shell: "LANG=C apt-cache depends mariadb-server | awk -F '-' '/Depends/ { print $NF }'" | ||||
|   register: apt_mariadb_version | ||||
|   changed_when: false | ||||
| 
 | ||||
| - name: DEBCONF | Prepare MariaDB silent installation (root password) | ||||
|   debconf: | ||||
|     name: 'mariadb-server-{{ apt_mariadb_version.stdout }}' | ||||
|     question: 'mysql-server/root_password' | ||||
|     vtype: 'password' | ||||
|     value: '{{ mariadb_root_password }}' | ||||
|   when: not mariadb_exists.stat.exists | ||||
| 
 | ||||
| - name: DEBCONF | Prepare MariaDB silent installation (root password again) | ||||
|   debconf: | ||||
|     name: 'mariadb-server-{{ apt_mariadb_version.stdout }}' | ||||
|     question: 'mysql-server/root_password_again' | ||||
|     vtype: 'password' | ||||
|     value: '{{ mariadb_root_password }}' | ||||
|   when: not mariadb_exists.stat.exists | ||||
| 
 | ||||
| - name: APT | Install MariaDB server | ||||
|   apt: | ||||
|     pkg: mariadb-server | ||||
|  |  | |||
|  | @ -1,16 +0,0 @@ | |||
| --- | ||||
| 
 | ||||
| - name: APT | Install Percona repository | ||||
|   apt: | ||||
|     deb: https://repo.percona.com/apt/percona-release_latest.generic_all.deb | ||||
| 
 | ||||
| - name: COMMAND | Enable percona tools repository | ||||
|   command: percona-release enable tools release | ||||
|   args: | ||||
|     creates: /etc/apt/sources.list.d/percona-tools-release.list | ||||
|   register: p | ||||
| 
 | ||||
| - name: APT | Update cache | ||||
|   apt: | ||||
|     update_cache: yes | ||||
|   when: p.changed | ||||
|  | @ -1,13 +1,5 @@ | |||
| --- | ||||
| 
 | ||||
| - block: | ||||
| 
 | ||||
|     - name: SET_FACT | Bypass https://github.com/ansible/ansible/issues/19874 | ||||
|       set_fact: | ||||
|         ansible_distribution_release: 'buster' | ||||
| 
 | ||||
|   when: ansible_facts.distribution_major_version == "buster/sid" | ||||
| 
 | ||||
| - name: INCLUDE_VARS | Related to OS version | ||||
|   include_vars: "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" | ||||
| 
 | ||||
|  | @ -20,35 +12,27 @@ | |||
| - name: INCLUDE | Install | ||||
|   import_tasks: install/main.yml | ||||
| 
 | ||||
| - name: TEMPLATE | Deploy configuration | ||||
| - name: TEMPLATE | Deploy config files | ||||
|   template: | ||||
|     src: "{{ mariadb_config_template }}" | ||||
|     dest: /etc/mysql/my.cnf | ||||
|     src: "{{ item }}" | ||||
|     dest: "/{{ item | replace('.j2', '') }}" | ||||
|   loop: | ||||
|     - etc/mysql/my.cnf | ||||
|     - etc/mysql/conf.d/mysqldump.cnf.j2 | ||||
|     - etc/mysql/mariadb.conf.d/10-extra.cnf.j2 | ||||
|     - etc/mysql/mariadb.conf.d/50-client.cnf.j2 | ||||
|     - etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2 | ||||
|     - etc/mysql/mariadb.conf.d/50-server.cnf.j2 | ||||
|   register: config | ||||
| 
 | ||||
| - name: TEMPLATE | Deploy extra configuration | ||||
|   template: | ||||
|     src: etc/mysql/conf.d/10-extra.cnf.j2 | ||||
|     dest: /etc/mysql/conf.d/10-extra.cnf | ||||
|   register: extraconfig | ||||
| 
 | ||||
| - name: SERVICE | Restart now (prevent bugs) | ||||
|   service: | ||||
|     name: mysql | ||||
|     state: restarted | ||||
|   when: | ||||
|     (config.changed or extraconfig.changed) and | ||||
|     config.changed and | ||||
|     not mariadb_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 | ||||
| 
 | ||||
| - name: INCLUDE | Galera | ||||
|   import_tasks: galera/main.yml | ||||
|   when: mariadb_use_galera | ||||
|  | @ -80,9 +64,3 @@ | |||
|     host_all: "{{ item.host_all | default(omit) }}" | ||||
|     state: present | ||||
|   loop: "{{ mariadb_users }}" | ||||
| 
 | ||||
| - name: TEMPLATE | Deploy logrotate configuration | ||||
|   template: | ||||
|     src: "etc/logrotate.d/mysql-server.j2" | ||||
|     dest: "/etc/logrotate.d/mysql-server" | ||||
|   when: mariadb_manage_logrotate | bool | ||||
|  |  | |||
|  | @ -2,6 +2,6 @@ | |||
| 
 | ||||
| - name: TEMPLATE | Deploy master configuration | ||||
|   template: | ||||
|     src: etc/mysql/conf.d/50-master.cnf.j2 | ||||
|     dest: /etc/mysql/conf.d/50-master.cnf | ||||
|     src: etc/mysql/mariadb.conf.d/40-master.cnf.j2 | ||||
|     dest: /etc/mysql/mariadb.conf.d/40-master.cnf | ||||
|   notify: restart mariadb | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ | |||
| 
 | ||||
| - name: TEMPLATE | Deploy slave configuration | ||||
|   template: | ||||
|     src: etc/mysql/conf.d/51-slave.cnf.j2 | ||||
|     dest: /etc/mysql/conf.d/51-slave.cnf | ||||
|     src: etc/mysql/mariadb.conf.d/40-slave.cnf.j2 | ||||
|     dest: /etc/mysql/mariadb.conf.d/40-slave.cnf | ||||
|   notify: restart mariadb | ||||
| 
 | ||||
| - name: MYSQL_REPLICATION | Get slave status | ||||
|  | @ -18,27 +18,16 @@ | |||
|   ignore_errors: yes | ||||
|   register: slave_status | ||||
| 
 | ||||
| - name: INCLUDE | Transfert /etc/mysql/debian.cnf from master | ||||
|   import_tasks: slave/ssh.yml | ||||
|   when: mariadb_slave_replicate_mysqldb or ((slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data) | ||||
| 
 | ||||
| - name: INCLUDE | Import data | ||||
|   import_tasks: slave/import_data.yml | ||||
|   when: (slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data | ||||
|   when: (slave_status.failed or not slave_status.Is_Slave) and mariadb_slave_import_data | ||||
| 
 | ||||
| - name: INCLUDE | Configure replication | ||||
|   import_tasks: slave/replication.yml | ||||
|   when: (slave_status.failed is defined or not slave_status.Is_Slave) or mariadb_slave_force_setup | ||||
| 
 | ||||
| - name: INCLUDE | Transfert /etc/mysql/debian.cnf from master | ||||
|   import_tasks: slave/debiancnf.yml | ||||
|   when: mariadb_slave_replicate_mysqldb | ||||
| - name: Configure GTID Recplication | ||||
|   import_tasks: slave/gtid.yml | ||||
|   when: slave_status.failed or not slave_status.Is_Slave or mariadb_slave_force_setup | ||||
| 
 | ||||
| - name: MYSQL_REPLICATION | Get slave status | ||||
|   mysql_replication: | ||||
|     mode: getslave | ||||
|   ignore_errors: yes | ||||
|   register: slave_status | ||||
| 
 | ||||
| - name: Configure GTID | ||||
|   import_tasks: slave/gtid.yml | ||||
|  |  | |||
|  | @ -1,25 +0,0 @@ | |||
| --- | ||||
| 
 | ||||
| - name: FETCH | Get /etc/mysql/debian.cnf on master | ||||
|   fetch: | ||||
|     src: /etc/mysql/debian.cnf | ||||
|     dest: /tmp/{{ mariadb_slave_import_from }}/debian.cnf | ||||
|     flat: yes | ||||
|   changed_when: false | ||||
|   delegate_to: "{{ mariadb_slave_import_from }}" | ||||
| 
 | ||||
| - name: LOCAL_ACTION FILE | Secure fetched file | ||||
|   local_action: | ||||
|     module: file | ||||
|     path: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" | ||||
|     mode: 0600 | ||||
|   become: no | ||||
| 
 | ||||
| - name: COPY | Fetched file to /etc/mysql/debian.cnf | ||||
|   copy: | ||||
|     src: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" | ||||
|     dest: /etc/mysql/debian.cnf | ||||
|     owner: root | ||||
|     group: root | ||||
|     mode: 0600 | ||||
|   notify: restart mariadb | ||||
|  | @ -1,15 +1,25 @@ | |||
| --- | ||||
| 
 | ||||
| # Need this hack before: | ||||
| # - https://github.com/ansible/ansible/issues/29214 | ||||
| # - https://mariadb.com/kb/en/mariadb/global-transaction-id/#switching-an-existing-old-style-slave-to-use-gtid | ||||
| 
 | ||||
| - name: MYSQL_REPLICATION | Stop slave | ||||
|   mysql_replication: | ||||
|     mode: stopslave | ||||
| 
 | ||||
| - name: COMMAND | Migrate to MariaDB GTID | ||||
| - name: MYSQL_REPLICATION | Configure master host | ||||
|   mysql_replication: | ||||
|     mode: changemaster | ||||
|     master_host: "{{ mariadb_replication_host }}" | ||||
|     master_port: "{{ mariadb_replication_port }}" | ||||
|     master_user: "{{ mariadb_replication_user }}" | ||||
|     master_password: "{{ mariadb_replication_password }}" | ||||
| 
 | ||||
| # -- Wait this PR in Ansible released version (https://github.com/ansible/ansible/pull/62648) | ||||
| # name: MYSQL_REPLICATION | Setup replication with GTID | ||||
| # mysql_replication: | ||||
| #   master_use_gtid: current_pos | ||||
| 
 | ||||
| - name: COMMAND | Configure GTID | ||||
|   command: mariadb -e "CHANGE MASTER TO master_use_gtid=current_pos"; | ||||
|   changed_when: true | ||||
| 
 | ||||
| - name: MYSQL_REPLICATION | Start slave | ||||
|   mysql_replication: | ||||
|  |  | |||
|  | @ -1,39 +1,51 @@ | |||
| --- | ||||
| 
 | ||||
| # 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: "{{ mariadb_slave_import_from }}" | ||||
|     port: 22 | ||||
| - name: FILE | Create SSH client dir | ||||
|   file: | ||||
|     path: "{{ ansible_env.HOME }}/.ssh" | ||||
|     state: directory | ||||
|     mode: 0700 | ||||
| 
 | ||||
| - name: OPENSSH_KEYPAIR | Create SSH key | ||||
|   openssh_keypair: | ||||
|     path: "{{ ansible_env.HOME }}/.ssh/id_rsa" | ||||
|   register: gen_ssh | ||||
| 
 | ||||
| - block: | ||||
| 
 | ||||
|   - name: AUTHORIZED_KEY | Auth slave to backup host | ||||
|     authorized_key: | ||||
|       user: "{{ mariadb_backup_user }}" | ||||
|       state: present | ||||
|       key: "{{ gen_ssh.public_key }}" | ||||
| 
 | ||||
|   - name: FILE | Create backup directory | ||||
|     file: | ||||
|       path: "{{ mariadb_backup_dir }}" | ||||
|       state: directory | ||||
| 
 | ||||
|   - name: COMMAND | Prepare backup another server | ||||
|   command: innobackupex --no-timestamp {{ mariadb_backup_dir }} | ||||
|     command: "mariabackup --backup -u root --target-dir={{ mariadb_backup_dir }}" | ||||
|     args: | ||||
|     creates: "{{ mariadb_backup_dir }}" | ||||
|   delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|       creates: "{{ mariadb_backup_dir }}/xtrabackup_info" | ||||
|     register: backup | ||||
| 
 | ||||
|   - name: SHELL | Dump | ||||
|   shell: "innobackupex --apply-log {{ mariadb_backup_dir }}" | ||||
|   delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|     shell: "mariabackup --prepare --target-dir={{ mariadb_backup_dir }}" | ||||
|     when: backup.changed | ||||
|     register: prep | ||||
|     changed_when: "'This target seems to be not prepared yet' in prep.stderr" | ||||
| 
 | ||||
| - name: FILE | Remove mysql db from backup | ||||
|   file: | ||||
|     path: "{{ mariadb_backup_dir }}/mysql" | ||||
|     state: absent | ||||
|   delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|   when: backup.changed and not mariadb_slave_replicate_mysqldb | ||||
| 
 | ||||
| - name: MYSQL_VARIABLES | Get datadir | ||||
|   mysql_variables: | ||||
|     variable: datadir | ||||
|   register: datadir | ||||
| 
 | ||||
| - name: SET_FACT | related to mysql datadir | ||||
| - name: SET_FACT | Get MariaDB datadir | ||||
|   set_fact: | ||||
|     mariadb_datadir: "{{ datadir.msg }}" | ||||
|     mariadb_binlog_info: "{{ datadir.msg }}/xtrabackup_binlog_info" | ||||
| 
 | ||||
| - name: SERVICE | Stop MariaDB before importing data | ||||
|   service: | ||||
|  | @ -53,29 +65,17 @@ | |||
|     group: mysql | ||||
|     recurse: yes | ||||
| 
 | ||||
| - name: SHELL | Remove InnoDB redo logs | ||||
|   shell: "rm -f {{ mariadb_datadir }}/ib_logfile*" | ||||
|   args: | ||||
|     removes: "{{ mariadb_datadir }}/ib_logfile0" | ||||
|     warn: false | ||||
| 
 | ||||
| - name: SERVICE | Start MariaDB | ||||
|   service: | ||||
|     name: mysql | ||||
|     state: started | ||||
| 
 | ||||
| - name: SHELL | Get master_log_file | ||||
|   command: "awk '{ print $1 }' {{ mariadb_binlog_info }}" | ||||
|   register: master_log_file | ||||
| 
 | ||||
| - name: SHELL | Get master_log_pos | ||||
|   command: "awk '{ print $2 }' {{ mariadb_binlog_info }}" | ||||
|   register: master_log_pos | ||||
| 
 | ||||
| - name: SHELL | Get master GTID | ||||
|   command: "awk '{ print $3 }' {{ mariadb_binlog_info }}" | ||||
|   register: master_gtid | ||||
| 
 | ||||
| - name: SET_FACT | master_log_file | ||||
|   set_fact: | ||||
|     mariadb_master_log_file: "{{ master_log_file.stdout }}" | ||||
|     mariadb_master_log_pos: "{{ master_log_pos.stdout }}" | ||||
|     mariadb_master_gtid: "{{ master_gtid.stdout }}" | ||||
| 
 | ||||
| - name: FILE | Delete dump | ||||
|   file: | ||||
|     path: "{{ mariadb_backup_dir }}" | ||||
|  |  | |||
|  | @ -1,19 +0,0 @@ | |||
| --- | ||||
| 
 | ||||
| - 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: "{{ mariadb_backup_user }}" | ||||
|     state: present | ||||
|     key: "{{ pub_key.stdout }}" | ||||
|   delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|   become: yes | ||||
|  | @ -1,16 +1,5 @@ | |||
| --- | ||||
| 
 | ||||
| - name: MYSQL_USER | Update mysql root password for all root accounts | ||||
|   mysql_user: | ||||
|     name: root | ||||
|     host: "{{ item }}" | ||||
|     password: "{{ mariadb_root_password }}" | ||||
|   loop: | ||||
|     - "{{ ansible_hostname }}" | ||||
|     - 127.0.0.1 | ||||
|     - ::1 | ||||
|     - localhost | ||||
| 
 | ||||
| - name: MYSQL_USER | Remove all anonymous users | ||||
|   mysql_user: | ||||
|     name: '' | ||||
|  |  | |||
|  | @ -1,6 +0,0 @@ | |||
| # {{ ansible_managed }} | ||||
| 
 | ||||
| Explanation: Prevent Debian upgrades on percona packages | ||||
| Package: * | ||||
| Pin: release o=Percona Development Team | ||||
| Pin-Priority: 1001 | ||||
|  | @ -0,0 +1,4 @@ | |||
| [mysqldump] | ||||
| quick | ||||
| quote-names | ||||
| max_allowed_packet	= {{ mariadb_mysqldump_max_allowed_packet }}  | ||||
|  | @ -29,6 +29,3 @@ binlog_format=ROW | |||
| default_storage_engine=InnoDB | ||||
| innodb_autoinc_lock_mode=2 | ||||
| innodb_doublewrite=1 | ||||
| {% if mariadb_version == '10.0'%} | ||||
| query_cache_size=0 | ||||
| {% endif %} | ||||
|  | @ -2,7 +2,6 @@ | |||
| # {{ ansible_managed }} | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # Replication master | ||||
| 
 | ||||
| [mysqld] | ||||
|  | @ -12,9 +12,6 @@ read-only | |||
| {% endif %} | ||||
| 
 | ||||
| # --> Ignore DB/tables | ||||
| {% if not mariadb_slave_replicate_mysqldb %} | ||||
| replicate-ignore-db=mysql | ||||
| {% endif %} | ||||
| {% for db in mariadb_slave_ignore_db %} | ||||
| replicate-ignore-db={{ db }} | ||||
| {% endfor %} | ||||
|  | @ -0,0 +1,29 @@ | |||
| # | ||||
| # {{ ansible_managed }} | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # This group is read by the client library | ||||
| # Use it for options that affect all clients, but not the server | ||||
| # | ||||
| 
 | ||||
| [client] | ||||
| # Default is Latin1, if you need UTF-8 set this (also in server section) | ||||
| default-character-set = utf8mb4 | ||||
| 
 | ||||
| # socket location | ||||
| socket = {{ mariadb_socket }} | ||||
| 
 | ||||
| # Example of client certificate usage | ||||
| # ssl-cert=/etc/mysql/client-cert.pem | ||||
| # ssl-key=/etc/mysql/client-key.pem | ||||
| # | ||||
| # Allow only TLS encrypted connections | ||||
| # ssl-verify-server-cert=on | ||||
| 
 | ||||
| # This group is *never* read by mysql client library, though this | ||||
| # /etc/mysql/mariadb.cnf.d/client.cnf file is not read by Oracle MySQL | ||||
| # client anyway. | ||||
| # If you use the same .cnf file for MySQL and MariaDB, | ||||
| # use it for MariaDB-only client options | ||||
| [client-mariadb] | ||||
|  | @ -0,0 +1,34 @@ | |||
| # | ||||
| # {{ ansible_managed }} | ||||
| # | ||||
| 
 | ||||
| # NOTE: This file is read only by the traditional SysV init script, not systemd. | ||||
| # MariaDB systemd does _not_ utilize mysqld_safe nor read this file. | ||||
| # | ||||
| # For similar behaviour, systemd users should create the following file: | ||||
| # /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf | ||||
| # | ||||
| # To achieve the same result as the default 50-mysqld_safe.cnf, please create | ||||
| # /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf | ||||
| # with the following contents: | ||||
| # | ||||
| # [Service] | ||||
| # User=mysql | ||||
| # StandardOutput=syslog | ||||
| # StandardError=syslog | ||||
| # SyslogFacility=daemon | ||||
| # SyslogLevel=err | ||||
| # SyslogIdentifier=mysqld | ||||
| # | ||||
| # For more information, please read https://mariadb.com/kb/en/mariadb/systemd/ | ||||
| # | ||||
| 
 | ||||
| [mysqld_safe] | ||||
| # This will be passed to all mysql clients | ||||
| # It has been reported that passwords should be enclosed with ticks/quotes | ||||
| # especially if they contain "#" chars... | ||||
| # Remember to edit /etc/mysql/debian.cnf when changing the socket location. | ||||
| socket		= {{ mariadb_socket }} | ||||
| nice		= 0 | ||||
| skip_log_error | ||||
| syslog | ||||
|  | @ -0,0 +1,163 @@ | |||
| # | ||||
| # {{ ansible_managed }} | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # These groups are read by MariaDB server. | ||||
| # Use it for options that only the server (but not clients) should see | ||||
| # | ||||
| # See the examples of server my.cnf files in /usr/share/mysql | ||||
| 
 | ||||
| # this is read by the standalone daemon and embedded servers | ||||
| [server] | ||||
| 
 | ||||
| # this is only for the mysqld standalone daemon | ||||
| [mysqld] | ||||
| 
 | ||||
| # | ||||
| # * Basic Settings | ||||
| # | ||||
| user                    = mysql | ||||
| pid-file                = {{ mariadb_pid_file }} | ||||
| socket                  = {{ mariadb_socket }} | ||||
| port                    = {{ mariadb_port }} | ||||
| basedir                 = /usr | ||||
| datadir                 = {{ mariadb_datadir }} | ||||
| tmpdir                  = /tmp | ||||
| lc-messages-dir         = /usr/share/mysql | ||||
| #skip-external-locking | ||||
| 
 | ||||
| # Instead of skip-networking the default is now to listen only on | ||||
| # localhost which is more compatible and is not less secure. | ||||
| bind-address            = {{ mariadb_bind_address }} | ||||
| 
 | ||||
| # | ||||
| # * Fine Tuning | ||||
| # | ||||
| key_buffer_size         = {{ mariadb_key_buffer_size }} | ||||
| max_allowed_packet      = {{ mariadb_max_allowed_packet }} | ||||
| #thread_stack           = 192K | ||||
| thread_cache_size       = {{ mariadb_thread_cache_size }} | ||||
| # This replaces the startup script and checks MyISAM tables if needed | ||||
| # the first time they are touched | ||||
| #myisam_recover_options = BACKUP | ||||
| max_connections         = {{ mariadb_max_connections }} | ||||
| #table_cache            = 64 | ||||
| thread_concurrency      = {{ mariadb_thread_concurrency }} | ||||
| 
 | ||||
| # Other tuning setting | ||||
| table_open_cache        = {{ mariadb_table_open_cache }} | ||||
| sort_buffer_size        = {{ mariadb_sort_buffer_size }} | ||||
| read_buffer_size        = {{ mariadb_read_buffer_size }} | ||||
| read_rnd_buffer_size    = {{ mariadb_read_rnd_buffer_size }} | ||||
| myisam_sort_buffer_size = {{ mariadb_myisam_sort_buffer_size }} | ||||
| 
 | ||||
| # | ||||
| # * Query Cache Configuration | ||||
| # | ||||
| query_cache_size        = {{ mariadb_query_cache_size }} | ||||
| 
 | ||||
| # | ||||
| # * Logging and Replication | ||||
| # | ||||
| # Both location gets rotated by the cronjob. | ||||
| # Be aware that this log type is a performance killer. | ||||
| # As of 5.1 you can enable the log at runtime! | ||||
| #general_log_file       = /var/log/mysql/mysql.log | ||||
| #general_log            = 1 | ||||
| # | ||||
| # Error log - should be very few entries. | ||||
| # | ||||
| {% if mariadb_log_error == 'syslog' %} | ||||
| syslog | ||||
| syslog-tag = {{ mariadb_syslog_tag }} | ||||
| {% else %} | ||||
| log-error = {{ mariadb_log_error }} | ||||
| {% endif %} | ||||
| 
 | ||||
| # | ||||
| # Enable the slow query log to see queries with especially long duration | ||||
| #slow_query_log_file    = /var/log/mysql/mariadb-slow.log | ||||
| #long_query_time        = 10 | ||||
| #log_slow_rate_limit    = 1000 | ||||
| #log_slow_verbosity     = query_plan | ||||
| #log-queries-not-using-indexes | ||||
| {% if mariadb_slow_query_log_enabled %} | ||||
| slow_query_log_file = {{ mariadb_slow_query_log_file }} | ||||
| long_query_time = {{ mariadb_slow_query_time }} | ||||
| slow_query_log = 1 | ||||
| {% endif %} | ||||
| 
 | ||||
| # | ||||
| # The following can be used as easy to replay backup logs or for replication. | ||||
| # note: if you are setting up a replication slave, see README.Debian about | ||||
| #       other settings you may need to change. | ||||
| #server-id              = 1 | ||||
| #log_bin                = /var/log/mysql/mysql-bin.log | ||||
| #expire_logs_days       = 10 | ||||
| #max_binlog_size        = 100M | ||||
| #binlog_do_db           = include_database_name | ||||
| #binlog_ignore_db       = exclude_database_name | ||||
| 
 | ||||
| # | ||||
| # * Security Features | ||||
| # | ||||
| # Read the manual, too, if you want chroot! | ||||
| #chroot = /var/lib/mysql/ | ||||
| # | ||||
| # For generating SSL certificates you can use for example the GUI tool "tinyca". | ||||
| # | ||||
| #ssl-ca = /etc/mysql/cacert.pem | ||||
| #ssl-cert = /etc/mysql/server-cert.pem | ||||
| #ssl-key = /etc/mysql/server-key.pem | ||||
| # | ||||
| # Accept only connections using the latest and most secure TLS protocol version. | ||||
| # ..when MariaDB is compiled with OpenSSL: | ||||
| #ssl-cipher = TLSv1.2 | ||||
| # ..when MariaDB is compiled with YaSSL (default in Debian): | ||||
| #ssl = on | ||||
| 
 | ||||
| # | ||||
| # * Character sets | ||||
| # | ||||
| # MySQL/MariaDB default is Latin1, but in Debian we rather default to the full | ||||
| # utf8 4-byte character set. See also client.cnf | ||||
| # | ||||
| character-set-server  = utf8mb4 | ||||
| collation-server      = utf8mb4_general_ci | ||||
| 
 | ||||
| # | ||||
| # * InnoDB | ||||
| # | ||||
| # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. | ||||
| # Read the manual for more InnoDB related options. There are many! | ||||
| innodb_file_per_table = 1 | ||||
| innodb_buffer_pool_size = {{ mariadb_innodb_buffer_pool_size }} | ||||
| innodb_log_buffer_size = {{ mariadb_innodb_log_buffer_size }} | ||||
| innodb_flush_log_at_trx_commit = {{ mariadb_innodb_flush_log_at_trx_commit }} | ||||
| innodb_lock_wait_timeout = {{ mariadb_innodb_lock_wait_timeout }} | ||||
| innodb_log_file_size = {{ mariadb_innodb_log_file_size }} | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # * Unix socket authentication plugin is built-in since 10.0.22-6 | ||||
| # | ||||
| # Needed so the root database user can authenticate without a password but | ||||
| # only when running as the unix root user. | ||||
| # | ||||
| # Also available for other users if required. | ||||
| # See https://mariadb.com/kb/en/unix_socket-authentication-plugin/ | ||||
| 
 | ||||
| # this is only for embedded server | ||||
| [embedded] | ||||
| 
 | ||||
| # This group is only read by MariaDB servers, not by MySQL. | ||||
| # If you use the same .cnf file for MySQL and MariaDB, | ||||
| # you can put MariaDB-only options here | ||||
| [mariadb] | ||||
| 
 | ||||
| # This group is only read by MariaDB-10.3 servers. | ||||
| # If you use the same .cnf file for MariaDB of different versions, | ||||
| # use this group for options that older servers don't understand | ||||
| [mariadb-10.3] | ||||
| 
 | ||||
|  | @ -0,0 +1,23 @@ | |||
| # The MariaDB configuration file | ||||
| # | ||||
| # The MariaDB/MySQL tools read configuration files in the following order: | ||||
| # 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, | ||||
| # 2. "/etc/mysql/conf.d/*.cnf" to set global options. | ||||
| # 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. | ||||
| # 4. "~/.my.cnf" to set user-specific options. | ||||
| # | ||||
| # If the same option is defined multiple times, the last one will apply. | ||||
| # | ||||
| # One can use all long options that the program supports. | ||||
| # Run program with --help to get a list of available options and with | ||||
| # --print-defaults to see which it would actually understand and use. | ||||
| 
 | ||||
| # | ||||
| # This group is read both both by the client and the server | ||||
| # use it for options that affect everything | ||||
| # | ||||
| [client-server] | ||||
| 
 | ||||
| # Import all .cnf files from configuration directory | ||||
| !includedir /etc/mysql/conf.d/ | ||||
| !includedir /etc/mysql/mariadb.conf.d/ | ||||
|  | @ -1,81 +0,0 @@ | |||
| # | ||||
| # {{ ansible_managed }} | ||||
| # | ||||
| 
 | ||||
| [client] | ||||
| port = {{ mariadb_port }} | ||||
| socket = {{ mariadb_socket }} | ||||
| 
 | ||||
| [mysqld] | ||||
| port = {{ mariadb_port }} | ||||
| bind-address = {{ mariadb_bind_address }} | ||||
| datadir = {{ mariadb_datadir }} | ||||
| socket = {{ mariadb_socket }} | ||||
| 
 | ||||
| {# TODO: FIX later #} | ||||
| # Logging configuration. | ||||
| {% if mariadb_log_error == 'syslog' %} | ||||
| syslog | ||||
| syslog-tag = {{ mariadb_syslog_tag }} | ||||
| {% else %} | ||||
| log-error = {{ mariadb_log_error }} | ||||
| {% endif %} | ||||
| 
 | ||||
| {% if mariadb_slow_query_log_enabled %} | ||||
| # Slow query log configuration. | ||||
| slow_query_log = 1 | ||||
| slow_query_log_file = {{ mariadb_slow_query_log_file }} | ||||
| long_query_time = {{ mariadb_slow_query_time }} | ||||
| {% endif %} | ||||
| 
 | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links = 0 | ||||
| 
 | ||||
| # User is ignored when systemd is used (fedora >= 15). | ||||
| user = mysql | ||||
| 
 | ||||
| # http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html | ||||
| ;performance_schema | ||||
| 
 | ||||
| # Memory settings. | ||||
| key_buffer_size = {{ mariadb_key_buffer_size }} | ||||
| max_allowed_packet = {{ mariadb_max_allowed_packet }} | ||||
| table_open_cache = {{ mariadb_table_open_cache }} | ||||
| sort_buffer_size = {{ mariadb_sort_buffer_size }} | ||||
| read_buffer_size = {{ mariadb_read_buffer_size }} | ||||
| read_rnd_buffer_size = {{ mariadb_read_rnd_buffer_size }} | ||||
| myisam_sort_buffer_size = {{ mariadb_myisam_sort_buffer_size }} | ||||
| thread_cache_size = {{ mariadb_thread_cache_size }} | ||||
| query_cache_size = {{ mariadb_query_cache_size }} | ||||
| 
 | ||||
| # Other settings. | ||||
| wait_timeout = {{ mariadb_wait_timeout }} | ||||
| 
 | ||||
| # Try number of CPU's * 2 for thread_concurrency. | ||||
| thread_concurrency = {{ mariadb_thread_concurrency }} | ||||
| 
 | ||||
| # InnoDB settings. | ||||
| innodb_file_per_table = {{ mariadb_innodb_file_per_table }} | ||||
| innodb_buffer_pool_size = {{ mariadb_innodb_buffer_pool_size }} | ||||
| innodb_log_buffer_size = {{ mariadb_innodb_log_buffer_size }} | ||||
| innodb_flush_log_at_trx_commit = {{ mariadb_innodb_flush_log_at_trx_commit }} | ||||
| innodb_lock_wait_timeout = {{ mariadb_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 = {{ mariadb_innodb_log_file_size }} | ||||
| 
 | ||||
| [mysqldump] | ||||
| quick | ||||
| max_allowed_packet = {{ mariadb_mysqldump_max_allowed_packet }} | ||||
| 
 | ||||
| [mysqld_safe] | ||||
| pid-file = {{ mariadb_pid_file }} | ||||
| 
 | ||||
| # | ||||
| # * IMPORTANT: Additional settings that can override those from this file! | ||||
| #   The files must end with '.cnf', otherwise they'll be ignored. | ||||
| # | ||||
| !includedir /etc/mysql/conf.d/ | ||||
| 
 | ||||
| # vim: set ft=dosini : | ||||
|  | @ -1,7 +0,0 @@ | |||
| # ------------------------------------------ | ||||
| # {{ ansible_managed }} | ||||
| # ------------------------------------------ | ||||
| 
 | ||||
| [client] | ||||
| user=root | ||||
| password="{{ mariadb_root_password }}" | ||||
|  | @ -5,19 +5,19 @@ IMPORTANT | |||
| --------- | ||||
| 
 | ||||
| - DO NOT `vagrant up`! My Vagrantfile provides many VMs... | ||||
| - Each slave communicate to his master. You can't mix mysql and mariadb. | ||||
| - Each slave communicate to his master. | ||||
| 
 | ||||
| Tests | ||||
| ----- | ||||
| 
 | ||||
| - vagrant up the master | ||||
| - vagrant up the slave | ||||
| - vagrant up the-master | ||||
| - vagrant up the-slave | ||||
| 
 | ||||
| Wait master fully installed before run slave. | ||||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| ``` | ||||
| vagrant up stretch-upstream-mariadb-master | ||||
| vagrant up stretch-upstream-mariadb-slave | ||||
| vagrant up vbox-buster-default-master | ||||
| vagrant up vbox-buster-default-slave | ||||
| ``` | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| mariadb_bind_address: '0.0.0.0' | ||||
| mariadb_extra_configuration: | ||||
|   innodb_commit_concurrency: 0 | ||||
| mariadb_use_percona_apt: true | ||||
| mariadb_install_xtrabackup_package: true | ||||
| mariadb_slow_query_log_enabled: true | ||||
|  |  | |||
|  | @ -3,13 +3,16 @@ | |||
| - hosts: all | ||||
|   gather_facts: false | ||||
|   pre_tasks: | ||||
| 
 | ||||
|     - name: SETUP | Get facts | ||||
|       setup: | ||||
|       register: s | ||||
| 
 | ||||
|     - name: DEBUG | Show facts | ||||
|       debug: | ||||
|         var: s | ||||
|   tasks: | ||||
| 
 | ||||
|     - name: APT | Install some packages | ||||
|       apt: | ||||
|         name: "{{ p }}" | ||||
|  | @ -22,11 +25,13 @@ | |||
|   roles: | ||||
|     - ../../ | ||||
|   tasks: | ||||
| 
 | ||||
|     - name: COPY | Deploy first dump | ||||
|       copy: | ||||
|         src: import1.sql | ||||
|         dest: /tmp/import1.sql | ||||
|       register: c | ||||
| 
 | ||||
|     - name: MYSQL_DB | Import first dump | ||||
|       mysql_db: | ||||
|         name: "{{ item }}" | ||||
|  | @ -37,37 +42,47 @@ | |||
| 
 | ||||
| - 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 | ||||
| 
 | ||||
|     - name: SET_FACT | Apply some configuration | ||||
|       set_fact: | ||||
|         # MariaDB don't read /etc/hosts (from vagrant host plugin) | ||||
|         mariadb_replication_host: "{{ ip.stdout }}" | ||||
|         # Need this to use vagrant 'delegate_to' | ||||
|         mariadb_slave_import_from: "{{ ansible_hostname | replace ('slave', 'master') }}" | ||||
| 
 | ||||
|   roles: | ||||
|     - ../../ | ||||
|   tasks: | ||||
| 
 | ||||
|     - block: | ||||
| 
 | ||||
|       - name: COPY | Deploy dump | ||||
|         copy: | ||||
|           src: import2.sql | ||||
|           dest: /tmp/import2.sql | ||||
|         delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|         register: c | ||||
| 
 | ||||
|       - name: MYSQL_DB | Import another dump | ||||
|         mysql_db: | ||||
|           name: "{{ item }}" | ||||
|           state: import | ||||
|           target: /tmp/import2.sql | ||||
|         loop: ['testrepl', 'norepl'] | ||||
|       delegate_to: "{{ mariadb_slave_import_from }}" | ||||
|         when: c.changed | ||||
| 
 | ||||
|       delegate_to: "{{ mariadb_slave_import_from }}" | ||||
| 
 | ||||
|     - name: MYSQL_REPLICATION | Get slave infos | ||||
|       mysql_replication: | ||||
|         mode: getslave | ||||
|       register: slave | ||||
| 
 | ||||
|     - name: FAIL | if slave threads are not running | ||||
|       fail: | ||||
|         msg: "Slave issue" | ||||
|  | @ -75,14 +90,12 @@ | |||
| 
 | ||||
| - hosts: galera | ||||
|   pre_tasks: | ||||
|     - name: SET_FACT | Bypass https://github.com/ansible/ansible/issues/19874 | ||||
|       set_fact: | ||||
|         ansible_distribution_release: 'buster' | ||||
|       when: ansible_facts.distribution_major_version == "buster/sid" | ||||
| 
 | ||||
|     - name: SET_FACT | Apply some configuration | ||||
|       set_fact: | ||||
|         mariadb_galera_primary_node: '{% if is_docker %}docker-{% else %}vbox-{% endif %}{{ ansible_distribution_release }}-{{ mariadb_origin }}-galera-1' | ||||
|         mariadb_wsrep_node_address: "{{ '127.0.0.1' if is_docker else ansible_eth1.ipv4.address }}" | ||||
|         mariadb_version: '10.3' | ||||
| 
 | ||||
|   roles: | ||||
|     - ../../ | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| mariadb_tools: | ||||
|   - percona-toolkit | ||||
|   - python-mysqldb | ||||
|   - mariadb-backup | ||||
|   - mysqltuner | ||||
| 
 | ||||
| mariadb_default_xtrabackup_package: 'percona-xtrabackup-24' | ||||
|   - percona-toolkit | ||||
|   - python{% if ansible_python_version is version('3', '>=') %}3{% endif %}-mysqldb | ||||
|  |  | |||
|  | @ -1,6 +0,0 @@ | |||
| mariadb_tools: | ||||
|   - percona-toolkit | ||||
|   - python-mysqldb | ||||
|   - mysqltuner | ||||
| 
 | ||||
| mariadb_default_xtrabackup_package: 'percona-xtrabackup-24' | ||||
		Loading…
	
		Reference in New Issue