mirror of
https://github.com/ansible-collections/community.mysql.git
synced 2025-06-20 23:30:23 -07:00
Fix deprecated options from MySQL 8.2 (#662)
* Fix show master status for MySQL 8.2+ * Fix mysqldump option form --master-data to --source-data * Fix incompatibility between mysqldump 8.0 and MySQL 8.4 Installing the same version between the client and the server makes sense anyway. The incompatibility arise when you use mysqldump with --source-data. The the tool tries to perform a SHOW MASTER STATUS which is deprecated in MySQL 8.2+. * Fix missing condition * Fix unit tests * Add a query resolver depending on implementation and version * Sanity * Fix SHOW REPLICA STATUS queries * Fix mariadb's SHOW REPLICA HOSTS query * Fix CHANGE MASTER for MySQL 8.0.23+ * Fix integration test for CHANGE MASTER * Fix integration test for CHANGE MASTER * Fix replication queries for MySQL 8.0.23+ and 8.4+ * Revert file edited by mistake * Enhance tests format
This commit is contained in:
parent
c503dc5b6b
commit
cd9f4fcf57
14 changed files with 503 additions and 94 deletions
|
@ -1,3 +1,4 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
|
@ -18,8 +19,7 @@
|
|||
# Tests of channel parameter:
|
||||
- import_tasks: mysql_replication_channel.yml
|
||||
when:
|
||||
- db_engine == 'mysql' # FIXME: mariadb introduces FOR CHANNEL in 10.7
|
||||
- mysql8022_and_higher == true # FIXME: mysql 5.7 should work, but our tets fails, why?
|
||||
- db_engine == 'mysql' # FIXME: mariadb introduces FOR CHANNEL in 10.7
|
||||
|
||||
# Tests of resetprimary mode:
|
||||
- import_tasks: mysql_replication_resetprimary_mode.yml
|
||||
|
@ -30,3 +30,4 @@
|
|||
- import_tasks: mysql_replication_changereplication_mode.yml
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.23', '>=')
|
||||
|
|
|
@ -32,10 +32,15 @@
|
|||
channel: '{{ test_channel }}'
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
- name: Assert that run replication with channel is changed and query matches for MariaDB and MySQL < 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == result_query
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.23', '<'))
|
||||
vars:
|
||||
result_query: ["CHANGE MASTER TO MASTER_HOST='{{ mysql_host }}',\
|
||||
MASTER_USER='{{ replication_user }}',MASTER_PASSWORD='********',\
|
||||
|
@ -43,6 +48,21 @@
|
|||
'{{ mysql_primary_status.File }}',MASTER_LOG_POS=\
|
||||
{{ mysql_primary_status.Position }} FOR CHANNEL '{{ test_channel }}'"]
|
||||
|
||||
- name: Assert that run replication with channel is changed and query matches for MySQL >= 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == result_query
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.23', '>=')
|
||||
vars:
|
||||
result_query: ["CHANGE REPLICATION SOURCE TO SOURCE_HOST='{{ mysql_host }}',\
|
||||
SOURCE_USER='{{ replication_user }}',SOURCE_PASSWORD='********',\
|
||||
SOURCE_PORT={{ mysql_primary_port }},SOURCE_LOG_FILE=\
|
||||
'{{ mysql_primary_status.File }}',SOURCE_LOG_POS=\
|
||||
{{ mysql_primary_status.Position }} FOR CHANNEL '{{ test_channel }}'"]
|
||||
|
||||
# Test startreplica mode:
|
||||
- name: Start replica with channel
|
||||
mysql_replication:
|
||||
|
@ -83,7 +103,10 @@
|
|||
mysql_host_value: '{{ mysql_host }}'
|
||||
mysql_primary_port_value: '{{ mysql_primary_port }}'
|
||||
test_channel_value: '{{ test_channel }}'
|
||||
when: mysql8022_and_higher == false
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.22', '<'))
|
||||
|
||||
- assert:
|
||||
that:
|
||||
|
@ -99,7 +122,9 @@
|
|||
mysql_host_value: '{{ mysql_host }}'
|
||||
mysql_primary_port_value: '{{ mysql_primary_port }}'
|
||||
test_channel_value: '{{ test_channel }}'
|
||||
when: mysql8022_and_higher == true
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.22', '>=')
|
||||
|
||||
|
||||
# Test stopreplica mode:
|
||||
|
|
|
@ -9,16 +9,6 @@
|
|||
login_host: '{{ mysql_host }}'
|
||||
|
||||
block:
|
||||
- name: Set mysql8022_and_higher
|
||||
set_fact:
|
||||
mysql8022_and_higher: false
|
||||
|
||||
- name: Set mysql8022_and_higher
|
||||
set_fact:
|
||||
mysql8022_and_higher: true
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.22', '>=')
|
||||
|
||||
# We use iF NOT EXISTS because the GITHUB Action:
|
||||
# "ansible-community/ansible-test-gh-action" uses "--retry-on-error".
|
||||
|
@ -136,11 +126,10 @@
|
|||
that:
|
||||
- result is not failed
|
||||
|
||||
# Test changeprimary mode:
|
||||
# primary_ssl_ca will be set as '' to check the module's behaviour for #23976,
|
||||
# must be converted to an empty string
|
||||
- name: Run replication
|
||||
mysql_replication:
|
||||
- name: Test changeprimary mode with empty primary_ssl_ca
|
||||
community.mysql.mysql_replication:
|
||||
<<: *mysql_params
|
||||
login_port: '{{ mysql_replica1_port }}'
|
||||
mode: changeprimary
|
||||
|
@ -151,14 +140,18 @@
|
|||
primary_log_file: '{{ mysql_primary_status.File }}'
|
||||
primary_log_pos: '{{ mysql_primary_status.Position }}'
|
||||
primary_ssl_ca: ''
|
||||
primary_ssl: no
|
||||
primary_ssl: false
|
||||
register: result
|
||||
|
||||
- name: Assert that changeprimmary is changed and return expected query
|
||||
assert:
|
||||
- name: Assert that changeprimmary is changed and return expected query for MariaDB and MySQL < 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == expected_queries
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.23', '<'))
|
||||
vars:
|
||||
expected_queries: ["CHANGE MASTER TO MASTER_HOST='{{ mysql_host }}',\
|
||||
MASTER_USER='{{ replication_user }}',MASTER_PASSWORD='********',\
|
||||
|
@ -166,6 +159,22 @@
|
|||
'{{ mysql_primary_status.File }}',MASTER_LOG_POS=\
|
||||
{{ mysql_primary_status.Position }},MASTER_SSL=0,MASTER_SSL_CA=''"]
|
||||
|
||||
- name: Assert that changeprimmary is changed and return expected query for MySQL > 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == expected_queries
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.23', '>=')
|
||||
vars:
|
||||
expected_queries: ["CHANGE REPLICATION SOURCE TO \
|
||||
SOURCE_HOST='{{ mysql_host }}',\
|
||||
SOURCE_USER='{{ replication_user }}',SOURCE_PASSWORD='********',\
|
||||
SOURCE_PORT={{ mysql_primary_port }},SOURCE_LOG_FILE=\
|
||||
'{{ mysql_primary_status.File }}',SOURCE_LOG_POS=\
|
||||
{{ mysql_primary_status.Position }},SOURCE_SSL=0,SOURCE_SSL_CA=''"]
|
||||
|
||||
# Test startreplica mode:
|
||||
- name: Start replica
|
||||
mysql_replication:
|
||||
|
@ -201,7 +210,10 @@
|
|||
vars:
|
||||
mysql_host_value: "{{ mysql_host }}"
|
||||
mysql_primary_port_value: "{{ mysql_primary_port }}"
|
||||
when: mysql8022_and_higher is falsy(convert_bool=True)
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.22', '<'))
|
||||
|
||||
- name: Assert that getreplica returns expected values for MySQL newer than 8.0.22
|
||||
assert:
|
||||
|
@ -216,7 +228,9 @@
|
|||
vars:
|
||||
mysql_host_value: "{{ mysql_host }}"
|
||||
mysql_primary_port_value: "{{ mysql_primary_port }}"
|
||||
when: mysql8022_and_higher is truthy(convert_bool=True)
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.22', '>=')
|
||||
|
||||
# Create test table and add data to it:
|
||||
- name: Create test table
|
||||
|
@ -243,13 +257,18 @@
|
|||
assert:
|
||||
that:
|
||||
- replica_status.Exec_Master_Log_Pos != mysql_primary_status.Position
|
||||
when: mysql8022_and_higher == false
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.22', '<'))
|
||||
|
||||
- name: Assert that getreplica Log_Pos is different for MySQL newer than 8.0.22
|
||||
assert:
|
||||
that:
|
||||
- replica_status.Exec_Source_Log_Pos != mysql_primary_status.Position
|
||||
when: mysql8022_and_higher == true
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.22', '>=')
|
||||
|
||||
- name: Start replica that is already running
|
||||
mysql_replication:
|
||||
|
|
|
@ -18,10 +18,24 @@
|
|||
primary_delay: '{{ test_primary_delay }}'
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
- name: Assert that run replication is changed and query match expectation for MariaDB and MySQL < 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == ["CHANGE MASTER TO MASTER_DELAY=60"]
|
||||
- result is changed
|
||||
- result.queries == ["CHANGE MASTER TO MASTER_DELAY=60"]
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.0.23', '<'))
|
||||
|
||||
- name: Assert that run replication is changed and query match expectation for MySQL >= 8.0.23
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == ["CHANGE REPLICATION SOURCE TO SOURCE_DELAY=60"]
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.0.23', '>=')
|
||||
|
||||
# Auxiliary step:
|
||||
- name: Start replica
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
---
|
||||
# Copyright: (c) 2019, Andrew Klychkov (@Andersson007) <aaklychkov@mail.ru>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
|
@ -38,10 +39,24 @@
|
|||
mode: resetprimary
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
- name: Assert that reset primary is changed and query matches for MariaDB and MySQL < 8.4
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == ["RESET MASTER"]
|
||||
- result is changed
|
||||
- result.queries == ["RESET MASTER"]
|
||||
when:
|
||||
- >
|
||||
db_engine == 'mariadb' or
|
||||
(db_engine == 'mysql' and db_version is version('8.4.0', '<'))
|
||||
|
||||
- name: Assert that reset primary is changed and query matches for MySQL > 8.4
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.queries == ["RESET BINARY LOGS AND GTIDS"]
|
||||
when:
|
||||
- db_engine == 'mysql'
|
||||
- db_version is version('8.4.0', '>=')
|
||||
|
||||
# Get primary final status:
|
||||
- name: Get primary status
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue