Problem z połączeniem do zdalnej bazy danych

0

Dzień dobry,
postanowiłem sobie przenieś bazę danych o nazwie księgowosc na oddzielny serwer o adresie IP: 10.0.0.11.
Serwer pracuje sobie na Debianie w wersji 12 i ma otwarty port 3306. Dodatkowo sprawdziłem telnetem na innym komputerze czy faktycznie port jest otwarty.
Baza danych pracuje na MySQL, wszystkie loginy oraz hasła są te same co na wcześniejszym serwerze. Za pomocą programu MYSQL Workbench dostaje się na niego bez problemu.
Teraz gdy w moim API zmieniłem sobie ustawienia na nowy serwer otrzymuje takie błędy:

arn: Microsoft.AspNetCore.Server.Kestrel[0]
      Overriding address(es) 'http://[::]:5000'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:9012
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: E:\projekty aplikacji\WebAPI\
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
      Failed to determine the https port for redirect.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 6.0.28 initialized 'AppDbContext' using provider 'MySql.EntityFrameworkCore:1.0.0' with options: None
fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
      An error occurred using the connection to database 'ksiegowosc' on server '10.0.0.11'.
fail: Microsoft.EntityFrameworkCore.Query[10100]
      An exception occurred while iterating over the results of a query for context type 'WebAPI.AppDbContext'.
      System.InvalidCastException: Object cannot be cast from DBNull to other types.
         at System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider)
         at MySql.Data.MySqlClient.Driver.LoadCharacterSetsAsync(MySqlConnection connection, Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.Driver.ConfigureAsync(MySqlConnection connection, Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.MySqlConnection.Open()
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
         at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
         at MySql.EntityFrameworkCore.Storage.Internal.MySQLExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
         at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
      System.InvalidCastException: Object cannot be cast from DBNull to other types.
         at System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider)
         at MySql.Data.MySqlClient.Driver.LoadCharacterSetsAsync(MySqlConnection connection, Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.Driver.ConfigureAsync(MySqlConnection connection, Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Boolean execAsync, CancellationToken cancellationToken)
         at MySql.Data.MySqlClient.MySqlConnection.Open()
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
         at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
         at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
         at MySql.EntityFrameworkCore.Storage.Internal.MySQLExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
         at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()

Oto dodatkowe informacje:
screenshot-20240321012852.png
screenshot-20240321012946.png
Jak mogę rozwiązać ten problem?

Pozdrawiam
Łukasz

2

Sprawdź połączenie poleceniem mysql na hoście aplikacji czy jesteś w stanie się do bazy dostać. To że port jest otwarty to nie wystarczy. Może user nie ma prawa do bazy, może user nie ma uprawnień by sie logować na niego ze zdalnego hosta.

0
hzmzp napisał(a):

Sprawdź połączenie poleceniem mysql na hoście aplikacji czy jesteś w stanie się do bazy dostać. To że port jest otwarty to nie wystarczy. Może user nie ma prawa do bazy, może user nie ma uprawnień by sie logować na niego ze zdalnego hosta.

Ok później sprawdzę to. Tylko za pomocą aplikacji MySQL Workbench którą uruchomiłem na komputerze klienckim wszystko łączy się bez problemu.
Użytkownikiem ksiegowosc również mogę zalogować się z dowolnego hosta.
screenshot-20240321084104.png

abrakadaber napisał(a):

https://stackoverflow.com/questions/74060289/mysqlconnection-open-system-invalidcastexception-object-cannot-be-cast-from-d

BTW problemem jest nowsza wersja MySQLa na osobnej maszynie

Ok to już wiadomo gdzie jest problem. Widać najnowsze nie zawsze oznacza że najlepsze :)

screenshot-20240321084721.png

0
abrakadaber napisał(a):

https://stackoverflow.com/questions/74060289/mysqlconnection-open-system-invalidcastexception-object-cannot-be-cast-from-d

BTW problemem jest nowsza wersja MySQLa na osobnej maszynie

W moim przypadku pomogło zainstalowanie wersji 10.11.7-MariaDB-1:10.11.7+maria~deb12

1 użytkowników online, w tym zalogowanych: 0, gości: 1