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"