# Copyright: (c) 2019, Andrew Klychkov (@Andersson007) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Preparation: - name: Create user for replication shell: "echo \"GRANT REPLICATION SLAVE ON *.* TO '{{ replication_user }}'@'localhost' IDENTIFIED BY '{{ replication_pass }}'; FLUSH PRIVILEGES;\" | mysql -P {{ primary_db.port }} -h 127.0.0.1" - name: Create test database mysql_db: login_host: 127.0.0.1 login_port: '{{ primary_db.port }}' state: present name: '{{ test_db }}' - name: Dump all databases from the master shell: 'mysqldump -P {{ primary_db.port }} -h 127.0.01 --all-databases --master-data=2 > {{ dump_path }}' - name: Restore the dump to the replica shell: 'mysql -P {{ replica_db.port }} -h 127.0.0.1 < {{ dump_path }}' # Test getmaster mode: - name: Get master status mysql_replication: login_host: 127.0.0.1 login_port: "{{ primary_db.port }}" mode: getmaster register: master_status - assert: that: - master_status.Is_Master == true - master_status.Position != 0 - master_status is not changed # Test changemaster mode: - name: Run replication mysql_replication: login_host: 127.0.0.1 login_port: "{{ replica_db.port }}" mode: changemaster master_host: 127.0.0.1 master_port: "{{ primary_db.port }}" master_user: "{{ replication_user }}" master_password: "{{ replication_pass }}" master_log_file: mysql-bin.000001 master_log_pos: '{{ master_status.Position }}' register: result - assert: that: - result is changed - result.queries[0] is match("CHANGE MASTER ('\S+' )?TO MASTER_HOST='[0-9.]+',MASTER_USER='\w+',MASTER_PASSWORD='[*]{8}',MASTER_PORT=\d+,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=\d+") # Test startslave mode: - name: Start slave mysql_replication: login_host: 127.0.0.1 login_port: "{{ replica_db.port }}" mode: startslave register: result - assert: that: - result is changed - result.queries == ["START SLAVE"] # Test getslave mode: - name: Get replica status mysql_replication: login_host: 127.0.0.1 login_port: "{{ replica_db.port }}" mode: getslave register: slave_status - assert: that: - slave_status.Is_Slave == true - slave_status.Master_Host == '127.0.0.1' - slave_status.Exec_Master_Log_Pos == master_status.Position - slave_status.Master_Port == {{ primary_db.port }} - slave_status.Last_IO_Errno == 0 - slave_status.Last_IO_Error == '' - slave_status is not changed # Test stopslave mode: - name: Stop slave mysql_replication: login_host: 127.0.0.1 login_port: "{{ replica_db.port }}" mode: stopslave register: result - assert: that: - result is changed - result.queries == ["STOP SLAVE"]