From 3256299f3a0f8226e20872193109e55c348953b9 Mon Sep 17 00:00:00 2001 From: Sebastien Curt <sebastien.curt@tetras-libre.fr> Date: Mon, 31 Jan 2022 13:19:39 +0100 Subject: [PATCH] fix migration from symfony 3 to 5 script --- .../migrations/migrate_from_symfony_3_to_5.sh | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/tools/migrations/migrate_from_symfony_3_to_5.sh b/tools/migrations/migrate_from_symfony_3_to_5.sh index e0c26ab..a9899a0 100755 --- a/tools/migrations/migrate_from_symfony_3_to_5.sh +++ b/tools/migrations/migrate_from_symfony_3_to_5.sh @@ -1,5 +1,5 @@ -#!/bin/bash -BASE_DIR=$(realpath "$(dirname $0)/../..") +#!/usr/bin/env bash +BASE_DIR=$PWD source $BASE_DIR/.env BACKUP_DB="${MYSQL_DATABASE}_BACKUP_3_TO_5" @@ -18,9 +18,7 @@ if [ "$backup" -ne 0 ]; then echo "Creating DB $BACKUP_DB" $mysql_cmd -e "CREATE DATABASE $BACKUP_DB" echo "Saving $MYSQL_DATABASE to $BACKUP_DB" - docker-compose exec mysql mysqldump -u root -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE |\ - grep -v Warning | - docker exec -i $(docker-compose ps -q mysql) mysql -u root -p$MYSQL_ROOT_PASSWORD $BACKUP_DB + docker-compose exec -e BACKUP_DB=$BACKUP_DB mysql bash -c 'mysqldump -u root -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE | grep -v Warning | mysql -u root -p$MYSQL_ROOT_PASSWORD $BACKUP_DB' ret=$? if [ $ret -ne 0 ]; then echo "Backup failed, aborting" @@ -54,13 +52,11 @@ COLUMNS_REPLACEMENTS[user]="roles,\(.*\)credential_expired/'[\"USER_ROLE\"]' as # Old capsule table does not have a password field COLUMNS_REPLACEMENTS[capsule]='password/SUBSTRING(edition_link, -40) as password/' -TABLES="user reset_password_request capsule doctrine_migration_versions editeur_capsule" +TABLES="user capsule editeur_capsule" echo "SET foreign_key_checks = 0;" > $$.sql + for table in $TABLES; do - COLUMNS=$($mysql_cmd --batch --disable-column-names \ - -e "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND TABLE_SCHEMA='$MYSQL_DATABASE'" |\ - grep -v "Warning" | tr '\r\n' ', ' | sed 's/, $//' - ) + COLUMNS=$(docker-compose exec -T -e TABLE=$table mysql bash -c 'mysql -u root -p$MYSQL_ROOT_PASSWORD --batch --disable-column-names -e "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = \"$TABLE\" AND TABLE_SCHEMA=\"$MYSQL_DATABASE\"" | grep -v "Warning" | tr -d "\r" | tr "\n" ", " | sed "s/,\$//"') if [ ! -z "${COLUMNS_REPLACEMENTS[$table]}" ]; then COLUMNS_OLD=$(echo $COLUMNS | sed "s/${COLUMNS_REPLACEMENTS[$table]}") else @@ -69,9 +65,10 @@ for table in $TABLES; do echo "DELETE FROM $MYSQL_DATABASE.$table;" >> $$.sql echo "INSERT INTO $MYSQL_DATABASE.$table ($COLUMNS) SELECT $COLUMNS_OLD FROM $BACKUP_DB.$table;" >> $$.sql done + # Ensure that dt_maj is not NULL echo "UPDATE $MYSQL_DATABASE.capsule SET dt_maj=dt_crea WHERE dt_maj IS NULL;" >> $$.sql echo "SET foreign_key_checks = 1;" >> $$.sql cat $$.sql | docker exec -i $(docker-compose ps -q mysql) mysql -u root -p$MYSQL_ROOT_PASSWORD echo "All done" -rm $$.sql +# rm $$.sql -- GitLab