diff --git a/seed-database/README.md b/seed-database/README.md index a7a40704c17..41b627c80b5 100644 --- a/seed-database/README.md +++ b/seed-database/README.md @@ -2,6 +2,11 @@ Used by development docker composition only. +Files in this folder are mounted into MariaDB's `/docker-entrypoint-initdb.d`. +They are only processed when `/var/lib/mysql` is empty, so reusing the +`database` volume will skip these imports. If you want to re-run the seed, +remove the volume first (for example with `docker compose down -v`). + Put an `.sql` dump of your database in this directory. You can call the file anything you want as long as it ends with `.sql`. diff --git a/sp7_db_setup_check.sh b/sp7_db_setup_check.sh index e93cd194773..d4ad2ce56eb 100644 --- a/sp7_db_setup_check.sh +++ b/sp7_db_setup_check.sh @@ -197,6 +197,11 @@ else fi # Create migrator user if it doesn't exist +if [[ "$SAME_MASTER_AND_MIGRATOR" == true ]]; then + echo "Migrator user '$MIGRATOR_NAME' uses the same credentials as master." + echo "Skipping creation/grant steps for a separate migrator account." + echo "Relying on master privileges for runtime connections." +else USER_EXISTS=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -sse \ "SELECT COUNT(*) FROM mysql.user WHERE user = '$SQL_MIGRATOR_NAME' AND host = '$CLIENT_HOST';") @@ -216,14 +221,16 @@ fi if [[ "$NEW_MIGRATOR_USER_CREATED" -eq 1 ]]; then echo "Granting privileges to new user..." - echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER_ESCAPED_FOR_LIKE}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" - - if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -e "GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER_ESCAPED_FOR_LIKE}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then - echo "Error: Failed to grant privileges to new user." - exit 1 - fi else - echo "Skipping privilege grant for migrator user: user already exists. Verifying privileges on '${DB_NAME}'..." + echo "Migrator user already exists. Refreshing privileges on '${DB_NAME}'..." +fi + +echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" + +if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ + -e "GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then + echo "Error: Failed to grant privileges to migrator user." + exit 1 fi GRANTS_OUTPUT="$(mysql -N -B --raw -h "$DB_HOST" -P "$DB_PORT" \ @@ -254,6 +261,7 @@ else echo "$GRANTS_OUTPUT" exit 1 fi +fi # Create app user if it doesn't exist USER_EXISTS=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -sse \ @@ -292,13 +300,14 @@ else if [[ "$NEW_APP_USER_CREATED" -eq 1 ]]; then echo "Granting privileges to new user..." - echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER_ESCAPED_FOR_LIKE}\`.* TO ${SQL_APP_USER_NAME}@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" - if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER_ESCAPED_FOR_LIKE}\`.* TO '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then - echo "Error: Failed to grant privileges to new user." - exit 1 - fi else - echo "Skipping privilege grant for app user: user already exists. Verifying privileges on '${DB_NAME}'..." + echo "App user already exists. Refreshing privileges on '${DB_NAME}'..." +fi + +echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO ${SQL_APP_USER_NAME}@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" +if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then + echo "Error: Failed to grant privileges to app user." + exit 1 fi APP_GRANTS_RAW="$(mysql -N -B -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ @@ -327,6 +336,7 @@ else echo "Required (any one GRANT must include all of): ${APP_REQUIRED_PRIVS[*]}" echo "Grants found:" echo "$APP_GRANTS_RAW" + exit 1 fi fi