From b0e957cce8c4c83a4d5772e4f3b8c33c529539af Mon Sep 17 00:00:00 2001 From: dragondaddy Date: Mon, 29 Jan 2024 23:00:54 +0100 Subject: [PATCH] Different approach for db migration --- scripts/_common.sh | 36 ++++++++++++++++++++++++++++++++++++ scripts/upgrade | 20 ++++++-------------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 1e47ce72..19a2f07e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -9,6 +9,42 @@ #================================================= # PERSONAL HELPERS #================================================= +mariadb-to-pg() { + + ynh_print_info --message="Migrating to PostgreSQL database..." + + # Retrieve MySQL user and password + mysqlpwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) + + mysql_db_user="$db_user" + if ynh_mysql_connect_as --user="mmuser" --password="$mysqlpwd" 2> /dev/null <<< ";"; then + # On old instances db_user is `mmuser` + mysql_db_user="mmuser" + fi + + # Use pgloader to migrate database content from MariaDB to PostgreSQL + tmpdir="$(mktemp -d)" + + cat < $tmpdir/commands.load +LOAD DATABASE + FROM mysql://$mysql_db_user:$mysqlpwd@127.0.0.1:3306/$db_name + INTO postgresql://$db_user:$db_pwd@127.0.0.1:5432/$db_name + +WITH include no drop, truncate, create no tables, + create no indexes, preserve index names, no foreign keys, + data only, workers = 16, concurrency = 1, prefetch rows = 10000 + +SET MySQL PARAMETERS +net_read_timeout = '90', +net_write_timeout = '180' + +; +EOT + pgloader $tmpdir/commands.load + + # Remove the MariaDB database + ynh_mysql_remove_db --db_user=$mysql_db_user --db_name=$db_name +} #================================================= # EXPERIMENTAL HELPERS diff --git a/scripts/upgrade b/scripts/upgrade index a6283bd0..85295488 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -57,20 +57,12 @@ fi # MIGRATING DATABASE #================================================= -if mysqlshow | grep -q "^| $db_name "; then - - ynh_script_progression --message="Creating a PostgreSQL database..." --weight=10 - - postgresql_db_pwd=$(ynh_string_random --length=24) - ynh_app_setting_set --app=$app --key=postgresql_db_pwd --value=$postgresql_db_pwd - ynh_psql_test_if_first_run - ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$postgresql_db_pwd - # Migrating from MySQL to PostgreSQL - pgloader mysql://$db_user:$db_pwd@localhost:3306/$db_name postgresql://$db_user:$postgresql_db_pwd@localhost:5432/$db_name - # Removinging MySQL database - ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name -else - ynh_print_info --message="No migration needed" +# Check if using MariaDB +# This migration should be done before the upgrade +if mysqlshow | grep -q "^| $db_name "; then + # Migrate the database from MySQL/MariaDB to PostgreSQL + remove_psql_in_case_of_error=1 + mariadb-to-pg fi #=================================================