diff --git a/tools/migrations/migrate_from_symfony_3_to_5.sh b/tools/migrations/migrate_from_symfony_3_to_5.sh new file mode 100755 index 0000000000000000000000000000000000000000..ab803da7c71d771e4ee4c9ad8d84ddc5588ce43c --- /dev/null +++ b/tools/migrations/migrate_from_symfony_3_to_5.sh @@ -0,0 +1,58 @@ +#!/bin/bash +BASE_DIR=$(realpath "$(dirname $0)/../..") +source $BASE_DIR/.env + +BACKUP_DB="${MYSQL_DATABASE}_BACKUP_3_TO_5" +mysql_cmd="docker-compose exec mysql mysql -u root -p$MYSQL_ROOT_PASSWORD" + +# +# Step 1 backup the db +# + +$mysql_cmd -e "use $BACKUP_DB" +backup=$? + +if [ "$backup" -ne 0 ]; then + echo "Backup DB does not exists, saving the current DB" + # The backup db does not exists + 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 + echo "Backup done" +else + echo "A previous backup exists, skipping backup step" +fi + +# +# Step 2 Reload db with initial data +# + +docker-compose exec memorekall-member composer reload-db + +# +# Step 3 remove artifact data and copy data from backup table +# + +echo "Droping fixture capsule" +$mysql_cmd $MYSQL_DATABASE -e "delete from capsule" +echo "Done" +echo "Droping fixture users" +$mysql_cmd $MYSQL_DATABASE -e "delete from user" +echo "Done" + +TABLES="user reset_password_request capsule capsuleGroup capsules_groups doctrine_migration_versions editeur_capsule invitation_editeur_capsule" +for table in $TABLES; do + echo "Reloading table $table" + 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/, $//' + ) + #echo $COLUMNS + # TODO : what should we do about columns with name mismatch ex user.credential_expired ? + $mysql_cmd -e "INSERT INTO $MYSQL_DATABASE.$table SELECT $COLUMNS FROM $BACKUP_DB.$table;" + echo "done" +done +echo "All done"