From 5fefc81fa1387528e145402752706b41810d4726 Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 13:26:09 +0300 Subject: [PATCH 01/12] db_import_speed_up --- .../tasks/revert-dump.yml | 15 +++++++++---- .../database_sync-mysql/tasks/sync.yml | 21 +++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index 80898e7d..0445c44e 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -1,7 +1,14 @@ --- -- name: Revert database from dump. - ansible.builtin.shell: "set -o pipefail && bzcat {{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ previous_build_number }}.sql.bz2 | mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }}" - args: - executable: /bin/bash +- name: Unpack dump file. + ansible.builtin.unarchive: + src: "{{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ previous_build_number }}.sql.bz2" + dest: "/tmp/{{ database.database }}-{{ previous_build_number }}.sql" + run_once: true when: previous_build_number > 0 + +- name: Revert database from dump. + ansible.builtin.command: + cmd: "mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }} < /tmp/{{ database.database }}-{{ previous_build_number }}.sql" + delegate_to: localhost run_once: true + when: previous_build_number > 0 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 7815868f..d5a7f515 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -93,6 +93,10 @@ ansible.builtin.set_fact: mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.bz2" +- name: Register tmp target unpacked dump name. + ansible.builtin.set_fact: + mysql_sync_target_dump_unpacked_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql" + - name: Get target last known good build number. ansible.builtin.command: argv: @@ -126,6 +130,16 @@ 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 }}" + +- name: Delete temporary dump file on target. + ansible.builtin.file: + path: "{{ mysql_sync_target_dump_path }}" + state: absent + - name: Drop target database. ansible.builtin.command: cmd: "mysql --defaults-extra-file={{ database.target.credentials_file }} -e 'drop database if exists {{ mysql_sync_target_database }};'" @@ -135,13 +149,12 @@ cmd: "mysql --defaults-extra-file={{ database.target.credentials_file }} -e 'create database {{ mysql_sync_target_database }};'" - name: Repopulate database from dump. - ansible.builtin.shell: "set -o pipefail && bzcat {{ mysql_sync_target_dump_path }} | mysql --defaults-extra-file={{ database.target.credentials_file }} {{ mysql_sync_target_database }}" - args: - executable: /bin/bash + ansible.builtin.command: + cmd: "mysql --defaults-extra-file={{ database.target.credentials_file }} {{ mysql_sync_target_database }} < {{ mysql_sync_target_dump_unpacked_path }}" - name: Delete temporary dump file on target. ansible.builtin.file: - path: "{{ mysql_sync_target_dump_path }}" + path: "{{ mysql_sync_target_dump_unpacked_path }}" state: absent - name: Delete temporary dump file on source. From 69579e45744c95b5643330964febb09d273316bf Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 13:34:56 +0300 Subject: [PATCH 02/12] db_import_speed_up_fixed --- .../database_backup/database_backup-mysql/tasks/revert-dump.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index 0445c44e..ee4b852e 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -9,6 +9,5 @@ - name: Revert database from dump. ansible.builtin.command: cmd: "mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }} < /tmp/{{ database.database }}-{{ previous_build_number }}.sql" - delegate_to: localhost run_once: true when: previous_build_number > 0 From dbcd09e064ff95b965a1f5bba61e5b44f34174bd Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 14:17:47 +0300 Subject: [PATCH 03/12] db_import_speed_up_fix2 --- .../database_backup-mysql/tasks/revert-dump.yml | 10 ++++++++-- .../database_sync/database_sync-mysql/tasks/sync.yml | 9 +++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index ee4b852e..722887a8 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -7,7 +7,13 @@ when: previous_build_number > 0 - name: Revert database from dump. - ansible.builtin.command: - cmd: "mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }} < /tmp/{{ database.database }}-{{ previous_build_number }}.sql" + ansible.builtin.shell: "mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }} < /tmp/{{ database.database }}-{{ previous_build_number }}.sql" + args: + executable: /bin/bash run_once: true when: previous_build_number > 0 + +- name: Delete unpacked dump file. + ansible.builtin.file: + path: "/tmp/{{ database.database }}-{{ previous_build_number }}.sql" + state: absent 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 d5a7f515..7bfaea0b 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -93,7 +93,7 @@ ansible.builtin.set_fact: mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.bz2" -- name: Register tmp target unpacked dump name. +- 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" @@ -149,10 +149,11 @@ cmd: "mysql --defaults-extra-file={{ database.target.credentials_file }} -e 'create database {{ mysql_sync_target_database }};'" - name: Repopulate database from dump. - ansible.builtin.command: - cmd: "mysql --defaults-extra-file={{ database.target.credentials_file }} {{ mysql_sync_target_database }} < {{ mysql_sync_target_dump_unpacked_path }}" + ansible.builtin.shell: "mysql --defaults-extra-file={{ database.target.credentials_file }} {{ mysql_sync_target_database }} < {{ mysql_sync_target_dump_unpacked_path }}" + args: + executable: /bin/bash -- name: Delete temporary dump file on target. +- name: Delete temporary unpacked dump file on target. ansible.builtin.file: path: "{{ mysql_sync_target_dump_unpacked_path }}" state: absent From 187e503e60b88f28b0719d851d5369e4e6804cdf Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 14:19:49 +0300 Subject: [PATCH 04/12] db_import_speed_up_fix3 --- .../database_backup/database_backup-mysql/tasks/revert-dump.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index 722887a8..07cc1530 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -17,3 +17,5 @@ ansible.builtin.file: path: "/tmp/{{ database.database }}-{{ previous_build_number }}.sql" state: absent + run_once: true + when: previous_build_number > 0 From d284adb8be966fdfe6d4c33435623a2aca24f646 Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 16:47:16 +0300 Subject: [PATCH 05/12] db_import_speed_up_fix4 --- .../database_backup/database_backup-mysql/tasks/revert-dump.yml | 1 + roles/sync/database_sync/database_sync-mysql/tasks/sync.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index 07cc1530..38522af3 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -3,6 +3,7 @@ ansible.builtin.unarchive: src: "{{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ previous_build_number }}.sql.bz2" dest: "/tmp/{{ database.database }}-{{ previous_build_number }}.sql" + remote_src: true run_once: true when: previous_build_number > 0 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 7bfaea0b..11b50d12 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -134,6 +134,7 @@ ansible.builtin.unarchive: src: "{{ mysql_sync_target_dump_path }}" dest: "{{ mysql_sync_target_dump_unpacked_path }}" + remote_src: true - name: Delete temporary dump file on target. ansible.builtin.file: From 5c845f83f689b8b0a9d67b8d43736692f9c51490 Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 18:46:31 +0300 Subject: [PATCH 06/12] db_import_speed_up_fix5_and_gzip --- .../database_sync-mysql/defaults/main.yml | 2 + .../database_sync-mysql/tasks/sync.yml | 63 ++++++++++++++++--- 2 files changed, 55 insertions(+), 10 deletions(-) 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: From 0976176094df5484165066a77b1b9d4d0dbfdb3d Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 19:27:22 +0300 Subject: [PATCH 07/12] db_import_speed_up_fix6 --- .../database_sync-mysql/tasks/sync.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) 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 e4b040a0..5be6f8a9 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -42,8 +42,7 @@ - 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 + when: database.source.use_gzip - name: Get source last known good build number. ansible.builtin.command: @@ -111,8 +110,7 @@ - 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 + when: database.source.use_gzip - name: Register tmp unpacked target dump name. ansible.builtin.set_fact: @@ -152,8 +150,7 @@ dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.gz" flat: true delegate_to: "{{ database.source.host }}" - when: - - database.source.use_gzip + when: database.source.use_gzip - name: Copy dump file to destination - BZIP2. ansible.builtin.copy: @@ -164,8 +161,7 @@ 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 + 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 }}" @@ -176,8 +172,7 @@ 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 + when: database.source.use_gzip - name: Delete temporary dump file on target. ansible.builtin.file: From 061b7ab63d458c2c419f3c9a68df2ef1668f7b1f Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 19:38:22 +0300 Subject: [PATCH 08/12] db_import_speed_up_fix7 --- .../database_sync-mysql/defaults/main.yml | 3 +-- .../database_sync-mysql/tasks/sync.yml | 17 +++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) 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 72add57e..763a12ec 100644 --- a/roles/sync/database_sync/database_sync-mysql/defaults/main.yml +++ b/roles/sync/database_sync/database_sync-mysql/defaults/main.yml @@ -2,6 +2,7 @@ mysql_sync: mysqldump_params: "{{ _mysqldump_params }}" # set in _init but you can override here cleanup: true # if false leaves tmp database dump on deploy server for debugging purposes + use_gzip: false # Default is bzip2, set to true if you want to use databases: - source: # Name of the database to take a dump from. @@ -24,8 +25,6 @@ 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 5be6f8a9..8075537e 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -42,7 +42,8 @@ - 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 + when: + - mysql_sync.use_gzip - name: Get source last known good build number. ansible.builtin.command: @@ -80,7 +81,7 @@ delegate_to: "{{ database.source.host }}" when: - database.source.fresh_db - - database.source.use_gzip + - mysql_sync.use_gzip - name: Find source database host. ansible.builtin.command: @@ -110,7 +111,8 @@ - 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 + when: + - mysql_sync.use_gzip - name: Register tmp unpacked target dump name. ansible.builtin.set_fact: @@ -150,7 +152,8 @@ dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.gz" flat: true delegate_to: "{{ database.source.host }}" - when: database.source.use_gzip + when: + - mysql_sync.use_gzip - name: Copy dump file to destination - BZIP2. ansible.builtin.copy: @@ -161,7 +164,8 @@ 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 + when: + - mysql_sync.use_gzip - name: Unpack dump file - BZIP2. ansible.builtin.shell: "bzip2 -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" @@ -172,7 +176,8 @@ 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 + when: + - mysql_sync.use_gzip - name: Delete temporary dump file on target. ansible.builtin.file: From 43c8c7486e2e770f6da0d86017becb2450e20b13 Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 19:49:05 +0300 Subject: [PATCH 09/12] db_import_speed_up_fix_typo --- .../database_sync/database_sync-mysql/defaults/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 763a12ec..d4866c2c 100644 --- a/roles/sync/database_sync/database_sync-mysql/defaults/main.yml +++ b/roles/sync/database_sync/database_sync-mysql/defaults/main.yml @@ -1,8 +1,8 @@ --- mysql_sync: - mysqldump_params: "{{ _mysqldump_params }}" # set in _init but you can override here - cleanup: true # if false leaves tmp database dump on deploy server for debugging purposes - use_gzip: false # Default is bzip2, set to true if you want to use + mysqldump_params: "{{ _mysqldump_params }}" # set in _init but you can override here. + cleanup: true # if false leaves tmp database dump on deploy server for debugging purposes. + use_gzip: false # if true gzip will be used instead of default bzip2. databases: - source: # Name of the database to take a dump from. From f0aec2ea9eebb86c1e2c4290576f60b2aa51c79c Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 20:10:55 +0300 Subject: [PATCH 10/12] db_import_speed_up_fix8 --- .../database_sync-mysql/tasks/sync.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 8075537e..03449374 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -38,6 +38,8 @@ - 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" + when: + - not mysql_sync.use_gzip - name: Register remote dump name (from database) - GZIP. ansible.builtin.set_fact: @@ -107,6 +109,8 @@ - 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" + when: + - not mysql_sync.use_gzip - name: Register tmp target dump name - GZIP. ansible.builtin.set_fact: @@ -145,6 +149,8 @@ dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" flat: true delegate_to: "{{ database.source.host }}" + when: + - not mysql_sync.use_gzip - name: Fetch dump file - GZIP. ansible.builtin.fetch: @@ -159,6 +165,8 @@ ansible.builtin.copy: src: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" dest: "{{ mysql_sync_target_dump_path }}" + when: + - not mysql_sync.use_gzip - name: Copy dump file to destination - GZIP. ansible.builtin.copy: @@ -210,11 +218,14 @@ - name: Delete temporary dump file on deploy server. ansible.builtin.file: - path: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" + path: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql{{ item }}" state: absent delegate_to: localhost when: - mysql_sync.cleanup + with_items: + - ".bz2" + - ".gz" - name: Enable all autoscale processes on source ASG. ansible.builtin.command: > From 5463a5b4169f3a65adf33e4352529aa8ce3bef1e Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 21 Jun 2023 20:14:06 +0300 Subject: [PATCH 11/12] db_import_speed_up_fix9 --- roles/sync/database_sync/database_sync-mysql/tasks/sync.yml | 3 +++ 1 file changed, 3 insertions(+) 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 03449374..9cf2b250 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -75,6 +75,7 @@ delegate_to: "{{ database.source.host }}" when: - database.source.fresh_db + - not mysql_sync.use_gzip - 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 }}" @@ -179,6 +180,8 @@ ansible.builtin.shell: "bzip2 -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" args: executable: /bin/bash + when: + - not mysql_sync.use_gzip - name: Unpack dump file - GZIP. ansible.builtin.shell: "gzip -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" From 85d648af1f4fd493fef25b37fd46c336d8adc19a Mon Sep 17 00:00:00 2001 From: tim Date: Thu, 22 Jun 2023 11:04:45 +0300 Subject: [PATCH 12/12] db_import_speed_up_refactoring --- .../database_sync-mysql/defaults/main.yml | 2 +- .../database_sync-mysql/tasks/sync.yml | 86 +++++-------------- 2 files changed, 24 insertions(+), 64 deletions(-) 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 d4866c2c..88143a7b 100644 --- a/roles/sync/database_sync/database_sync-mysql/defaults/main.yml +++ b/roles/sync/database_sync/database_sync-mysql/defaults/main.yml @@ -2,7 +2,7 @@ mysql_sync: mysqldump_params: "{{ _mysqldump_params }}" # set in _init but you can override here. cleanup: true # if false leaves tmp database dump on deploy server for debugging purposes. - use_gzip: false # if true gzip will be used instead of default bzip2. + archival_method: "bzip2" # oprions are "bzip2" or "gzip". databases: - source: # Name of the database to take a dump from. 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 9cf2b250..ac346444 100644 --- a/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml +++ b/roles/sync/database_sync/database_sync-mysql/tasks/sync.yml @@ -35,17 +35,24 @@ - database.target.asg is defined - database.target.asg | length > 0 -- name: Register remote dump name (from database) - BZIP2. + +- name: Register bzip2 archive type vars. ansible.builtin.set_fact: - mysql_sync_source_dump_path: "/tmp/{{ database.source.database }}_{{ build_number }}_source.sql.bz2" + archive_file_type: "bz2" + archival_command: "bzip2" when: - - not mysql_sync.use_gzip + - mysql_sync.archival_method == 'bzip2' -- name: Register remote dump name (from database) - GZIP. +- name: Register gunzip archive type vars. ansible.builtin.set_fact: - mysql_sync_source_dump_path: "/tmp/{{ database.source.database }}_{{ build_number }}_source.sql.gz" + archive_file_type: "gz" + archival_command: "gzip" when: - - mysql_sync.use_gzip + - mysql_sync.archival_method == 'gzip' + +- name: Register remote dump name (from database). + ansible.builtin.set_fact: + mysql_sync_source_dump_path: "/tmp/{{ database.source.database }}_{{ build_number }}_source.sql.{{ archive_file_type }}" - name: Get source last known good build number. ansible.builtin.command: @@ -68,23 +75,13 @@ mysql_sync_source_database: "{{ database.source.database }}" when: not database.source.type == 'rolling' -- 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 }}" +- name: Take a dump from source database. + ansible.builtin.shell: "set -o pipefail && mysqldump --defaults-extra-file={{ database.source.credentials_file }} {{ mysql_sync.mysqldump_params }} {{ mysql_sync_source_database }} | {{ archival_command }} > {{ mysql_sync_source_dump_path }}" args: executable: /bin/bash delegate_to: "{{ database.source.host }}" when: - database.source.fresh_db - - not mysql_sync.use_gzip - -- 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 - - mysql_sync.use_gzip - name: Find source database host. ansible.builtin.command: @@ -107,17 +104,9 @@ delegate_to: "{{ database.source.host }}" when: not database.source.fresh_db -- name: Register tmp target dump name - BZIP2. +- name: Register tmp target dump name. ansible.builtin.set_fact: - mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.bz2" - when: - - not mysql_sync.use_gzip - -- 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: - - mysql_sync.use_gzip + mysql_sync_target_dump_path: "/tmp/{{ database.target.database }}_{{ build_number }}_target.sql.{{ archive_file_type }}" - name: Register tmp unpacked target dump name. ansible.builtin.set_fact: @@ -144,51 +133,22 @@ mysql_sync_target_database: "{{ database.target.database }}" when: not database.target.type == 'rolling' -- 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 }}" - when: - - not mysql_sync.use_gzip - -- name: Fetch dump file - GZIP. +- name: Fetch dump file. ansible.builtin.fetch: src: "{{ mysql_sync_source_dump_path }}" - dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.gz" + dest: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.{{ archive_file_type }}" flat: true delegate_to: "{{ database.source.host }}" - when: - - mysql_sync.use_gzip -- name: Copy dump file to destination - BZIP2. +- name: Copy dump file to destination. ansible.builtin.copy: - src: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.bz2" + src: "{{ _ce_deploy_build_tmp_dir }}/{{ database.target.database }}.sql.{{ archive_file_type }}" dest: "{{ mysql_sync_target_dump_path }}" - when: - - not mysql_sync.use_gzip -- 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: - - mysql_sync.use_gzip - -- name: Unpack dump file - BZIP2. - ansible.builtin.shell: "bzip2 -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" +- name: Unpack dump file. + ansible.builtin.shell: "{{ archival_command }} -d -c {{ mysql_sync_target_dump_path }} > {{ mysql_sync_target_dump_unpacked_path }}" args: executable: /bin/bash - when: - - not mysql_sync.use_gzip - -- 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: - - mysql_sync.use_gzip - name: Delete temporary dump file on target. ansible.builtin.file: