diff --git a/roles/sync/database_sync/database_sync-mysql/defaults/main.yml b/roles/sync/database_sync/database_sync-mysql/defaults/main.yml index 48c02b8b..72add57e 100644 --- a/roles/sync/database_sync/database_sync-mysql/defaults/main.yml +++ b/roles/sync/database_sync/database_sync-mysql/defaults/main.yml @@ -24,6 +24,8 @@ mysql_sync: dumps_directory: "/home/{{ deploy_user }}/shared/{{ project_name }}_{{ build_type }}/db_backups/mysql/regular" # If the source is on an ASG, provide the ASG name here. Otherwise, leave empty. asg: "" + # Default is bzip2, set to true if you want to use gzip. + use_gzip: false target: database: "{{ project_name }}_dev" credentials_file: "/home/{{ deploy_user }}/.mysql.creds" diff --git a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml index 11b50d12..e4b040a0 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -35,10 +35,16 @@ - database.target.asg is defined - database.target.asg | length > 0 -- name: Register remote dump name (from database). +- name: Register remote dump name (from database) - BZIP2. ansible.builtin.set_fact: mysql_sync_source_dump_path: "/tmp/{{ database.source.database }}_{{ build_number }}_source.sql.bz2" +- name: Register remote dump name (from database) - GZIP. + ansible.builtin.set_fact: + mysql_sync_source_dump_path: "/tmp/{{ database.source.database }}_{{ build_number }}_source.sql.gz" + when: + - database.source.use_gzip + - name: Get source last known good build number. ansible.builtin.command: argv: @@ -60,7 +66,7 @@ mysql_sync_source_database: "{{ database.source.database }}" when: not database.source.type == 'rolling' -- name: Take a dump from source database. +- name: Take a dump from source database - BZIP2. ansible.builtin.shell: "set -o pipefail && mysqldump --defaults-extra-file={{ database.source.credentials_file }} {{ mysql_sync.mysqldump_params }} {{ mysql_sync_source_database }} | bzip2 > {{ mysql_sync_source_dump_path }}" args: executable: /bin/bash @@ -68,6 +74,15 @@ when: - database.source.fresh_db +- name: Take a dump from source database - GZIP. + ansible.builtin.shell: "set -o pipefail && mysqldump --defaults-extra-file={{ database.source.credentials_file }} {{ mysql_sync.mysqldump_params }} {{ mysql_sync_source_database }} | gzip > {{ mysql_sync_source_dump_path }}" + args: + executable: /bin/bash + delegate_to: "{{ database.source.host }}" + when: + - database.source.fresh_db + - database.source.use_gzip + - name: Find source database host. ansible.builtin.command: cmd: "grep 'host' {{ database.source.credentials_file }}" @@ -89,10 +104,16 @@ delegate_to: "{{ database.source.host }}" when: not database.source.fresh_db -- name: Register tmp target dump name. +- name: Register tmp target dump name - BZIP2. ansible.builtin.set_fact: mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.bz2" +- name: Register tmp target dump name - GZIP. + ansible.builtin.set_fact: + mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.gz" + when: + - database.source.use_gzip + - name: Register tmp unpacked target dump name. ansible.builtin.set_fact: mysql_sync_target_dump_unpacked_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql" @@ -118,23 +139,45 @@ mysql_sync_target_database: "{{ database.target.database }}" when: not database.target.type == 'rolling' -- name: Fetch dump file. +- name: Fetch dump file - BZIP2. ansible.builtin.fetch: src: "{{ mysql_sync_source_dump_path }}" dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" flat: true delegate_to: "{{ database.source.host }}" -- name: Copy dump file to destination. +- name: Fetch dump file - GZIP. + ansible.builtin.fetch: + src: "{{ mysql_sync_source_dump_path }}" + dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.gz" + flat: true + delegate_to: "{{ database.source.host }}" + when: + - database.source.use_gzip + +- name: Copy dump file to destination - BZIP2. ansible.builtin.copy: src: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" dest: "{{ mysql_sync_target_dump_path }}" -- name: Unpack dump file. - ansible.builtin.unarchive: - src: "{{ mysql_sync_target_dump_path }}" - dest: "{{ mysql_sync_target_dump_unpacked_path }}" - remote_src: true +- name: Copy dump file to destination - GZIP. + ansible.builtin.copy: + src: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.gz" + dest: "{{ mysql_sync_target_dump_path }}" + when: + - database.source.use_gzip + +- name: Unpack dump file - BZIP2. + ansible.builtin.shell: "bzip2 -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" + args: + executable: /bin/bash + +- name: Unpack dump file - GZIP. + ansible.builtin.shell: "gzip -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" + args: + executable: /bin/bash + when: + - database.source.use_gzip - name: Delete temporary dump file on target. ansible.builtin.file: