Hi folks, new user here, and love this IAM. Its working great in all respects, however, i recently decide to test disaster recovery and spun up a local version in containers running on postgresql. I backed up everything using pg_dumpall and then tried to restore that to a new postgres instance container using psql, which it did without any errors, when I brought fusionAuth up again pointing to the restored database, it would not launch, instead it gave me, hundreds of errors in fusionauth container log like:
2025-01-31 16:33:44 fusionauth-1 | Starting fusionauth-app...
2025-01-31 16:33:44 fusionauth-1 | --> Logging to /usr/local/fusionauth/logs/fusionauth-app.log
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.600 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Loading FusionAuth configuration file [/usr/local/fusionauth/config/fusionauth.properties]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.611 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Set property [fusionauth-app.url] set to [http://fusionauth:9011] using configured value.
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.612 PM INFO com.inversoft.configuration.BasePropertiesFileInversoftConfiguration -
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [database.mysql.enforce-utf8mb4] with value [true]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [FUSIONAUTH_APP_RUNTIME_MODE] with value [development]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [SEARCH_TYPE] with value [elasticsearch]
2025-01-31 16:33:44 fusionauth-1 |
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.629 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Loading FusionAuth configuration file [/usr/local/fusionauth/config/fusionauth.properties]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.629 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Set property [fusionauth-app.url] set to [http://fusionauth:9011] using configured value.
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.629 PM INFO com.inversoft.configuration.BasePropertiesFileInversoftConfiguration -
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [database.mysql.enforce-utf8mb4] with value [true]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [FUSIONAUTH_APP_RUNTIME_MODE] with value [development]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [SEARCH_TYPE] with value [elasticsearch]
2025-01-31 16:33:44 fusionauth-1 |
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.682 PM INFO com.inversoft.maintenance.DefaultMaintenanceModeWorkflow -
2025-01-31 16:33:44 fusionauth-1 |
2025-01-31 16:33:44 fusionauth-1 | ---------------------------------------------------------------------------------------------------------
2025-01-31 16:33:44 fusionauth-1 | ---------------------------------- Entering Silent Configuration Mode -----------------------------------
2025-01-31 16:33:44 fusionauth-1 | ---------------------------------------------------------------------------------------------------------
2025-01-31 16:33:44 fusionauth-1 |
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.773 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Attempting to lock database to support multi-node configurations
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.778 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Obtained a database lock
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.800 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Database Version [1.55.1]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.802 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Latest Migration Version [1.55.1]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.803 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Attempting to unlock database to support multi-node configurations
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.803 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Unlock completed
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.804 PM INFO com.inversoft.search.ElasticRestClientHelper - Connecting to Elasticsearch at [http://search:9200]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.996 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Loading FusionAuth configuration file [/usr/local/fusionauth/config/fusionauth.properties]
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.996 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Set property [fusionauth-app.url] set to [http://fusionauth:9011] using configured value.
2025-01-31 16:33:44 fusionauth-1 | 2025-01-31 11:33:44.996 PM INFO com.inversoft.configuration.BasePropertiesFileInversoftConfiguration -
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [database.mysql.enforce-utf8mb4] with value [true]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [FUSIONAUTH_APP_RUNTIME_MODE] with value [development]
2025-01-31 16:33:44 fusionauth-1 | - Overriding default value of property [SEARCH_TYPE] with value [elasticsearch]
2025-01-31 16:33:44 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.040 PM INFO com.inversoft.maintenance.MaintenanceModePoller - Poller started to Wait for configuration to be completed.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.041 PM INFO io.fusionauth.app.primeframework.FusionHTTPContextAuthSetup - Initializing the FusionAuth HTTP Context.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.071 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Database Version [1.55.1]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.071 PM INFO com.inversoft.maintenance.db.JDBCMaintenanceModeDatabaseService - [b5TD7Q] Latest Migration Version [1.55.1]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.072 PM INFO com.inversoft.search.ElasticRestClientHelper - Connecting to Elasticsearch at [http://search:9200]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.078 PM INFO io.fusionauth.app.guice.FusionAuthModule -
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | ---------------------------------------------------------------------------------------------------------
2025-01-31 16:33:45 fusionauth-1 | --------------------------------- Starting FusionAuth version [1.55.1] ----------------------------------
2025-01-31 16:33:45 fusionauth-1 | ---------------------------------------------------------------------------------------------------------
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.171 PM INFO io.fusionauth.api.plugin.guice.PluginModule - No plugins found
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.219 PM INFO io.fusionauth.api.service.system.NodeService - Node [ee607efc-5736-480b-b3ad-3308126a8fbb] started.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.380 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Loading FusionAuth configuration file [/usr/local/fusionauth/config/fusionauth.properties]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.380 PM INFO io.fusionauth.api.configuration.DefaultFusionAuthConfiguration - Set property [fusionauth-app.url] set to [http://fusionauth:9011] using configured value.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.381 PM INFO com.inversoft.configuration.BasePropertiesFileInversoftConfiguration -
2025-01-31 16:33:45 fusionauth-1 | - Overriding default value of property [database.mysql.enforce-utf8mb4] with value [true]
2025-01-31 16:33:45 fusionauth-1 | - Overriding default value of property [FUSIONAUTH_APP_RUNTIME_MODE] with value [development]
2025-01-31 16:33:45 fusionauth-1 | - Overriding default value of property [SEARCH_TYPE] with value [elasticsearch]
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.381 PM INFO com.inversoft.jdbc.hikari.DataSourceProvider - Connecting to PostgreSQL database at [jdbc:postgresql://db2:5432/fusionauth]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.384 PM INFO com.zaxxer.hikari.HikariDataSource - Database-background - Starting...
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.398 PM INFO com.zaxxer.hikari.HikariDataSource - Database-background - Start completed.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.673 PM INFO com.inversoft.jdbc.hikari.DataSourceProvider - Connecting to PostgreSQL database at [jdbc:postgresql://db2:5432/fusionauth]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.673 PM INFO com.zaxxer.hikari.HikariDataSource - Database-primary - Starting...
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.678 PM INFO com.zaxxer.hikari.pool.HikariPool - Database-primary - Added connection org.postgresql.jdbc.PgConnection@175f859e
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.678 PM INFO com.zaxxer.hikari.HikariDataSource - Database-primary - Start completed.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.754 PM INFO com.inversoft.jdbc.hikari.DataSourceProvider - Connecting to PostgreSQL database at [jdbc:postgresql://db2:5432/fusionauth]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.755 PM INFO com.zaxxer.hikari.HikariDataSource - Database-secondary - Starting...
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.759 PM INFO com.zaxxer.hikari.pool.HikariPool - Database-secondary - Added connection org.postgresql.jdbc.PgConnection@21f91efa
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.759 PM INFO com.zaxxer.hikari.HikariDataSource - Database-secondary - Start completed.
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.921 PM INFO com.inversoft.scheduler.DefaultScheduler - Starting up scheduler
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.922 PM INFO com.inversoft.scheduler.DefaultScheduler - Scheduler is running
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.952 PM ERROR com.inversoft.scheduler.LogAndRetainFailureHandler - The scheduled service [class io.fusionauth.api.service.cache.CORSConfigurationCacheLoader] failed but will be re-run.
2025-01-31 16:33:45 fusionauth-1 | org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:81)
2025-01-31 16:33:45 fusionauth-1 | at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
2025-01-31 16:33:45 fusionauth-1 | at java.base/java.lang.reflect.Method.invoke(Method.java:580)
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.session.SqlSessionManager$SqlSessionInterceptor.invoke(SqlSessionManager.java:355)
2025-01-31 16:33:45 fusionauth-1 | at jdk.proxy2/jdk.proxy2.$Proxy61.selectOne(Unknown Source)
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.session.SqlSessionManager.selectOne(SqlSessionManager.java:164)
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
2025-01-31 16:33:45 fusionauth-1 | at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
2025-01-31 16:33:45 fusionauth-1 | at jdk.proxy2/jdk.proxy2.$Proxy63.retrieve(Unknown Source)
2025-01-31 16:33:45 fusionauth-1 | at io.fusionauth.api.service.cache.CORSConfigurationCacheLoader.internalLoad(CORSConfigurationCacheLoader.java:36)
2025-01-31 16:33:45 fusionauth-1 | at com.inversoft.cache.BaseSingleValueCacheLoader.load(BaseSingleValueCacheLoader.java:13)
2025-01-31 16:33:45 fusionauth-1 | at io.fusionauth.api.service.cache.CORSConfigurationCacheLoader.run(CORSConfigurationCacheLoader.java:30)
2025-01-31 16:33:45 fusionauth-1 | at com.inversoft.scheduler.InjectableRunnable.run(InjectableRunnable.java:56)
2025-01-31 16:33:45 fusionauth-1 | at com.inversoft.scheduler.DefaultScheduler.<init>(DefaultScheduler.java:70)
2025-01-31 16:33:45 fusionauth-1 | at com.inversoft.scheduler.DefaultScheduler$$FastClassByGuice$$9ed33ea.GUICE$TRAMPOLINE(<generated>)
2025-01-31 16:33:45 fusionauth-1 | at com.inversoft.scheduler.DefaultScheduler$$FastClassByGuice$$9ed33ea.apply(<generated>)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:169)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:60)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:213)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:186)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:113)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.Guice.createInjector(Guice.java:87)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.Guice.createInjector(Guice.java:69)
2025-01-31 16:33:45 fusionauth-1 | at com.google.inject.Guice.createInjector(Guice.java:59)
2025-01-31 16:33:45 fusionauth-1 | at org.primeframework.mvc.guice.GuiceBootstrap.initialize(GuiceBootstrap.java:60)
2025-01-31 16:33:45 fusionauth-1 | at org.primeframework.mvc.BasePrimeMain.hup(BasePrimeMain.java:69)
2025-01-31 16:33:45 fusionauth-1 | at org.primeframework.mvc.BasePrimeMain.start(BasePrimeMain.java:100)
2025-01-31 16:33:45 fusionauth-1 | at io.fusionauth.app.FusionAuthMain.main(FusionAuthMain.java:27)
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.958 PM INFO com.inversoft.search.ElasticRestClientHelper - Connecting to Elasticsearch at [http://search:9200]
2025-01-31 16:33:45 fusionauth-1 | 2025-01-31 11:33:45.961 PM ERROR com.inversoft.scheduler.LogAndRetainFailureHandler - The scheduled service [class io.fusionauth.api.service.cache.IdentityProviderCacheLoader] failed but will be re-run.
2025-01-31 16:33:45 fusionauth-1 | com.google.inject.ProvisionException: Unable to provision, see the following errors:
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | 1) [Guice/ErrorInCustomProvider]: TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
2025-01-31 16:33:45 fusionauth-1 | at FusionAuthMVCModule.configure(FusionAuthMVCModule.java:31)
2025-01-31 16:33:45 fusionauth-1 | \_ installed by: FusionAuthModule -> Modules$OverrideModule -> FusionAuthMVCModule
2025-01-31 16:33:45 fusionauth-1 | at FusionAuthObjectMapperProvider.<init>(FusionAuthObjectMapperProvider.java:24)
2025-01-31 16:33:45 fusionauth-1 | \_ for 2nd parameter
2025-01-31 16:33:45 fusionauth-1 | while locating FusionAuthObjectMapperProvider
2025-01-31 16:33:45 fusionauth-1 | at FusionAuthContentModule.bindObjectMapper(FusionAuthContentModule.java:24)
2025-01-31 16:33:45 fusionauth-1 | \_ installed by: FusionAuthModule -> Modules$OverrideModule -> FusionAuthContentModule
2025-01-31 16:33:45 fusionauth-1 | at DefaultCipherService.<init>(DefaultCipherService.java:37)
2025-01-31 16:33:45 fusionauth-1 | \_ for 1st parameter
2025-01-31 16:33:45 fusionauth-1 | while locating DefaultCipherService
2025-01-31 16:33:45 fusionauth-1 | at DefaultReactorCore.<init>(DefaultReactorCore.java:66)
2025-01-31 16:33:45 fusionauth-1 | \_ for 1st parameter
2025-01-31 16:33:45 fusionauth-1 | while locating DefaultReactorCore
2025-01-31 16:33:45 fusionauth-1 | at InstanceManager.<init>(InstanceManager.java:38)
2025-01-31 16:33:45 fusionauth-1 | \_ for 3rd parameter
2025-01-31 16:33:45 fusionauth-1 | at DefaultReactorService.<init>(DefaultReactorService.java:90)
2025-01-31 16:33:45 fusionauth-1 | \_ for 5th parameter
2025-01-31 16:33:45 fusionauth-1 | while locating DefaultReactorService
2025-01-31 16:33:45 fusionauth-1 | at DefaultPasswordService.<init>(DefaultPasswordService.java:52)
2025-01-31 16:33:45 fusionauth-1 | \_ for 3rd parameter
2025-01-31 16:33:45 fusionauth-1 | while locating DefaultPasswordService
2025-01-31 16:33:45 fusionauth-1 | at FusionAuthConnector.<init>(FusionAuthConnector.java:43)
2025-01-31 16:33:45 fusionauth-1 | \_ for 2nd parameter
2025-01-31 16:33:45 fusionauth-1 | while locating FusionAuthConnector
2025-01-31 16:33:45 fusionauth-1 | while locating Connector annotated with @Element(setName=,uniqueId=56, type=MAPBINDER, keyType=ConnectorType)
2025-01-31 16:33:45 fusionauth-1 | at DefaultAuthenticationService.<init>(DefaultAuthenticationService.java:140)
2025-01-31 16:33:45 fusionauth-1 | \_ for 4th parameter
2025-01-31 16:33:45 fusionauth-1 | while locating DefaultAuthenticationService
2025-01-31 16:33:45 fusionauth-1 | at AppleIdentityProviderAuthenticationService.<init>(AppleIdentityProviderAuthenticationService.java:76)
2025-01-31 16:33:45 fusionauth-1 | \_ for 2nd parameter
2025-01-31 16:33:45 fusionauth-1 | while locating AppleIdentityProviderAuthenticationService
2025-01-31 16:33:45 fusionauth-1 | while locating IdentityProviderAuthenticationService annotated with @Element(setName=,uniqueId=114, type=MAPBINDER, keyType=IdentityProviderType)
2025-01-31 16:33:45 fusionauth-1 | at IdentityProviderCacheLoader.<init>(IdentityProviderCacheLoader.java:39)
2025-01-31 16:33:45 fusionauth-1 | \_ for 4th parameter
2025-01-31 16:33:45 fusionauth-1 | while locating IdentityProviderCacheLoader
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | Learn more:
2025-01-31 16:33:45 fusionauth-1 | https://github.com/google/guice/wiki/ERROR_IN_CUSTOM_PROVIDER
2025-01-31 16:33:45 fusionauth-1 |
2025-01-31 16:33:45 fusionauth-1 | 1 error
These appear to be duplicates create during restore, but i was hoping conventional backup logic would work with postgres & fusionAuth.
Im i missing something obvious? what do other folks do using pg and FA?
Thanks in advance
Franco