From 96d4cc59d59760200174688b77b09aecf3b91038 Mon Sep 17 00:00:00 2001 From: Nathan ter Bogt Date: Thu, 23 Oct 2025 17:44:04 +1300 Subject: [PATCH 1/4] Mysql concurrent import of SQL --- mysql/scripts/database-import-tables | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mysql/scripts/database-import-tables b/mysql/scripts/database-import-tables index 77c5e14..e82b15d 100644 --- a/mysql/scripts/database-import-tables +++ b/mysql/scripts/database-import-tables @@ -2,14 +2,24 @@ DATABASE=$1 DUMP_DIR=$2 +MAX_CONCURRENT=4 mysql-drop-tables ${MYSQL_USERNAME} ${MYSQL_PASSWORD} ${MYSQL_HOSTNAME} ${DATABASE} -for i in ${DUMP_DIR}/*.sql -do - echo "Starting to import: $i" +# define the worker function +import_sql() { + local sqlfile="$1" + echo "Starting to import: $sqlfile" start=$(date +%s) - MYSQL_PWD="${MYSQL_PASSWORD}" mysql --user=${MYSQL_USERNAME} --host=${MYSQL_HOSTNAME} ${DATABASE} < $i + MYSQL_PWD="${MYSQL_PASSWORD}" mysql --user=${MYSQL_USERNAME} --host=${MYSQL_HOSTNAME} ${DATABASE} < $sqlfile end=$(date +%s) - echo "Finished importing $i in: $(($end-$start)) seconds" -done + echo "Finished importing $sqlfile in: $(($end-$start)) seconds" +} +export -f import_sql +export DATABASE +export MYSQL_HOSTNAME +export MYSQL_USERNAME +export MYSQL_PASSWORD + +find "$DUMP_DIR" -type f -name '*.sql' -print0 \ + | xargs -0 -n1 -P"$MAX_CONCURRENT" bash -c 'import_sql "$@"' _ From 17e8e572c91b281c3588eb425ff169ad73f5b46a Mon Sep 17 00:00:00 2001 From: Nathan ter Bogt Date: Fri, 24 Oct 2025 14:30:26 +1300 Subject: [PATCH 2/4] Use the latest mtk --- mysql/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql/Dockerfile b/mysql/Dockerfile index 137f265..c7e4aab 100644 --- a/mysql/Dockerfile +++ b/mysql/Dockerfile @@ -34,7 +34,7 @@ ADD my.cnf /etc/mysql/mysql.cnf # MTK - A toolkit for exporting, sanitizing and packaging MySQL database. # https://github.com/skpr/mtk -COPY --from=ghcr.io/skpr/mtk:v2.1.1 /usr/local/bin/mtk /usr/local/bin/mtk +COPY --from=ghcr.io/skpr/mtk:v2.3.0 /usr/local/bin/mtk /usr/local/bin/mtk USER mysql From 57b5f84329be7e8123aaa215d80b6366e1ad13e1 Mon Sep 17 00:00:00 2001 From: Nathan ter Bogt Date: Mon, 27 Oct 2025 20:22:48 +1300 Subject: [PATCH 3/4] Get the number of CPUs for workers --- mysql/scripts/database-import-tables | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mysql/scripts/database-import-tables b/mysql/scripts/database-import-tables index e82b15d..34b5802 100644 --- a/mysql/scripts/database-import-tables +++ b/mysql/scripts/database-import-tables @@ -2,7 +2,14 @@ DATABASE=$1 DUMP_DIR=$2 + +# work out the number of cpus MAX_CONCURRENT=4 +if command -v "nproc" &> /dev/null; then + MAX_CONCURRENT=$(nproc) +elif command -v "sysctl" &> /dev/null; then + MAX_CONCURRENT=$(sysctl -n hw.ncpu) +fi mysql-drop-tables ${MYSQL_USERNAME} ${MYSQL_PASSWORD} ${MYSQL_HOSTNAME} ${DATABASE} From b76d111abd51ee82618296d17275ea1da2bde627 Mon Sep 17 00:00:00 2001 From: Nathan ter Bogt Date: Thu, 30 Oct 2025 10:12:16 +1300 Subject: [PATCH 4/4] Always use 4 --- mysql/scripts/database-import-tables | 7 ------- 1 file changed, 7 deletions(-) diff --git a/mysql/scripts/database-import-tables b/mysql/scripts/database-import-tables index 34b5802..e82b15d 100644 --- a/mysql/scripts/database-import-tables +++ b/mysql/scripts/database-import-tables @@ -2,14 +2,7 @@ DATABASE=$1 DUMP_DIR=$2 - -# work out the number of cpus MAX_CONCURRENT=4 -if command -v "nproc" &> /dev/null; then - MAX_CONCURRENT=$(nproc) -elif command -v "sysctl" &> /dev/null; then - MAX_CONCURRENT=$(sysctl -n hw.ncpu) -fi mysql-drop-tables ${MYSQL_USERNAME} ${MYSQL_PASSWORD} ${MYSQL_HOSTNAME} ${DATABASE}