Я создал плагин для сбора данных от игроков на моем сервере SCP: SL (игра) и сохранения их в базе данных MySQL.
При подключении к внешним базам данных, расположенным вне моего локального VPS (например, freemysqlhosting), он работает отлично.
Мой локальный VPS работает 10.1.37-MariaDB-0+deb9u1 Debian 9.6 MySQL Server
с последней моно версией.
Проблема начинается, когда я пытаюсь подключиться к моей базе данных MariaDB Linux MySQL локально (через localhost/127.0.0.1).Когда дело доходит до подключения к базе данных, я получаю две разные ошибки:
- одна для localhost (приложение не падает),
- одна для 127.0.0.1 (происходит сбой приложения)
Я получаю эту ошибку, когда хост указан как "localhost"
Unhandled Exception:
MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts. ---> System.AggregateException: One or more errors occurred. ---> System.Net.Sockets.SocketException: An address incompatible with the requested protocol was used
at System.Net.Sockets.SocketAsyncResult.CheckIfThrowDelayedException () [0x00014] in <ac210d81537245bc838518cc8e845861>:0
at System.Net.Sockets.Socket.EndConnect (System.IAsyncResult asyncResult) [0x0002c] in <ac210d81537245bc838518cc8e845861>:0
at System.Net.Sockets.TcpClient.EndConnect (System.IAsyncResult asyncResult) [0x0000c] in <ac210d81537245bc838518cc8e845861>:0
at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00019] in <f2e6809acb14476a81f399aeb800f8f2>:0
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout, System.Threading.CancellationToken cancellationToken) [0x00043] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout) [0x00000] in <f2e6809acb14476a81f399aeb800f8f2>:0
at MySql.Data.Common.StreamCreator.GetTcpStream (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x0001f] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.Common.StreamCreator.GetStream (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00021] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.NativeDriver.Open () [0x00007] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
---> (Inner Exception #0) System.Net.Sockets.SocketException (0x80004005): An address incompatible with the requested protocol was used
at System.Net.Sockets.SocketAsyncResult.CheckIfThrowDelayedException () [0x00014] in <ac210d81537245bc838518cc8e845861>:0
at System.Net.Sockets.Socket.EndConnect (System.IAsyncResult asyncResult) [0x0002c] in <ac210d81537245bc838518cc8e845861>:0
at System.Net.Sockets.TcpClient.EndConnect (System.IAsyncResult asyncResult) [0x0000c] in <ac210d81537245bc838518cc8e845861>:0
at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00019] in <f2e6809acb14476a81f399aeb800f8f2>:0 <---
at MySql.Data.MySqlClient.NativeDriver.Open () [0x00041] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.Driver.Open () [0x0000e] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.Driver.Create (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x0004e] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection () [0x00006] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection () [0x0008a] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver () [0x0003f] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.MySqlPool.GetConnection () [0x0001c] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at MySql.Data.MySqlClient.MySqlConnection.Open () [0x0016d] in <ffa6b95770be4daf8d8ae25ca059b16a>:0
at DataCollector.RoundEventHandler.<OnWaitingForPlayers>g__CheckIfTableExists|3_0 () [0x000db] in <8dda65d2174e4f2a8af95550bb525546>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in <f2e6809acb14476a81f399aeb800f8f2>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00008] in <f2e6809acb14476a81f399aeb800f8f2>:0
Ошибка, когда я указываю хост как "127.0.0.1"выглядит так (это так долго, поэтому я прикрепляю его вставку)
https://pastebin.com/Xf1hn3in
Это код подключения c # mysql для моего плагина, я использую MySQLConnector v 8.0.13для подключения к базе данных:
MySqlConnectionStringBuilder connstr = new MySqlConnectionStringBuilder();
DatabaseConnInfo.dbhost = _plugin.GetConfigString("dc_dbhost");
DatabaseConnInfo.dbname = _plugin.GetConfigString("dc_dbname");
DatabaseConnInfo.dbuser = _plugin.GetConfigString("dc_dbuser");
DatabaseConnInfo.dbpass = _plugin.GetConfigString("dc_dbpass");
DatabaseConnInfo.dbport = (uint)_plugin.GetConfigInt("dc_dbport");
connstr.Server = DatabaseConnInfo.dbhost;
connstr.Database = DatabaseConnInfo.dbname;
connstr.UserID = DatabaseConnInfo.dbuser;
connstr.Password = DatabaseConnInfo.dbpass;
connstr.Port = DatabaseConnInfo.dbport;
_plugin.Info(connstr.ToString());
MySqlConnection conn = new MySqlConnection(connstr.ToString());
conn.Open();
string sql = "some sql statement";
MySqlCommand comm = new MySqlCommand(sql, conn);
conn.Close();
Ожидаемый результат - рабочее соединение с локальной базой данных, которое не работает из-за ошибок.
Эти ошибки странные, потому чтоЯ могу легко подключиться к внешним базам данных, локальное подключение кажется проблемой, и я не знаю, что делать.