我正在使用MySql开发asp.net核心2.1应用程序。
通过按F5键运行此应用程序时,无法通过以下连接字符串连接到AWS上EC2上的MySql服务器:
字符串connStr =“ server = ec2-xx-x-xxx-xxx.compute-1.amazonaws.com; user = user1; port = 3306; database = world; password = mypassword; SslMode = none;默认命令超时= 120” ;
我收到此错误:
MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何指定的MySQL主机。 ---> MySql.Data.MySqlClient.MySqlException(0x80004005):超时已过期。在操作完成之前超时或服务器没有响应。在MySql.Data.MySqlClient.NativeDriver.Open()处在MySql.Data.MySqlClient.NativeDriver.Open()处的MySql.Data.Common.StreamCreator.GetTcpStream(MySqlConnectionStringBuilder设置)处在MySql.Data.MySqlClient.MySqlClient.Driver.Create(MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()在MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()在MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()在等等处,在MySql.Data.MySqlClient.MySqlPool.GetConnection()在MySql.Data.MySqlClient.MySqlConnection.Open()等。
但是我可以使用以下连接字符串连接到本地计算机上的MySql服务器:
字符串connStr =“ server = localhost; user = user1; port = 3306; database = world; password = mypassword; SslMode = none;默认命令超时= 120”;
如果我使用上述连接方式(server = localhost)在安装了MySql的aws ec2上发布此Web应用程序,则该应用程序运行良好。
在EC2上的MySql中(这是Ubuntu 18.04服务器)
•我为MySql创建了user1,其主机名为“%”,以便可以从任何位置进行连接。
•我向用户1授予了所有特权,以便通过查询
在上授予所有特权,从我的IP地址进行连接。到user1@'1x2.1xx.8x.2xx'
•我通过查询SHOW GRANTS FOR'user1'@'%'检查了user1的特权,并得到了以下结果
“在上授予所有特权。使用格兰特选项向\'user1 \'@ \'%\'授予
'在world
上授予所有特权。*至\'user1 \'@ \'%\''
•在MySql的配置文件中,我将绑定设置为0.0.0.0,因此它可以从任何地方接受远程连接。
•在我的EC2安全组中,我打开了端口3306以接受来自我的IP地址的连接。
将超时时间延长至30秒后,错误为:
MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何指定的MySQL主机。 ---> System.AggregateException:发生一个或多个错误。 (连接尝试失败是因为一段时间后连接方未正确响应,或者连接建立是因为连接的主机未能响应xx.x.xxx.xxx:3306而失败)---> System.Net.Internals。 SocketExceptionFactory + ExtendedSocketException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应System.Net.Sockets.Socket的xx.x.xxx.xxx:3306 .EndConnect(IAsyncResult asyncResult)位于System.Net.Sockets.Socket.DoMultipleAddressConnectCallback(对象结果,MultipleAddressConnectAsyncResult上下文)-从上一个引发异常的位置开始的堆栈跟踪-在System.Net.Sockets.Socket.DoMultipleAddressConnectCallback (对象结果,MultipleAddressConnectAsyncResult上下文)位于System.Net.Sockets.Socket.MultipleAddressConnectCallback(IAsyncResult结果)-从上一个位置开始的堆栈跟踪结尾,其中除仅在System.Net.Sockets.TcpClient的System.Net.Sockets.TcpClient.EndConnect(IAsyncResult asyncResult)的System.Net.Sockets.Socket.EndConnect(IAsyncResult)处抛出了离子。<> c.b__28_1(IAsyncResult asyncResult),位于System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func
2 endFunction,操作1 endAction, Task
1承诺,布尔值requireSynchronization)---内部异常堆栈跟踪的结尾---位于System.Threading.Tasks.Task等(Int32毫秒超时,CancellationToken cancellingToken)等。
从本地计算机上的VS2017到AWS EC2上的MySql Server还要做什么?