草庐IT

mysql - 无论我尝试什么,MySQL .NET 适配器都拒绝从 Mono 连接

coder 2023-10-21 原文

我正在尝试与位于另一台机器上的 MySql 数据库建立简单连接。我可以在 Windows 上远程登录到数据源,并在 OSX 和 Ubuntu 上使用终端——包括我网络的内部和外部。但是,它拒绝通过我在 OSX 上的单声道项目进行连接。

我收到:

Unable to connect to any of the specified MySQL hosts...

我已经确认没有有效的防火墙规则——在我的 OSX 或 Ubuntu 机器上都没有,数据库是托管的。与 mono 项目位于同一台机器上的 MySQL workbench 能够毫无问题地连接。

我试图通过代码连接到数据库:

Server=myIp; Database=FK; User ID=george; Password=pass; Port=3306

并通过预装在 OSX 上的 Mono 中的插件:

工具 > 数据库 > 添加数据库连接 > MySql 数据库

我不使用我的连接字符串——我让它根据我的数据库信息创建它自己的。但是,这没有什么区别。当我测试我的连接时——它仍然失败,并显示我在尝试以编程方式连接时收到的相同消息。

托管 mySQL 数据库的服务器未显示任何连接尝试。

我尝试同时使用 5.2 单声道 .NET 连接器和 6.3 连接器(v2 和 v4)没关系,都无法连接。

我已经尝试将我的程序集放在 GAC 中,并在本地将我的项目放在 bin 目录中。这没有什么区别。

在连接协议(protocol)中,socket和tcp我都试过了,memory和pipe也都试过了。没有效果。

我完全无法理解为什么我无法连接到我的服务器,它在其他任何地方都可以工作,除了从 Mono 内部。 没有正在运行的防火墙会阻止我的请求。

从 Mono 连接应该不难,所以显然某处非常错误 -- 看到 IDE 甚至无法连接到数据库。

我的凭据绝对正确,尽管这并不重要——因为我什至无法访问服务器。我假设它正在尝试连接,因为大约需要 10-15 秒才能收到无法连接的响应。

当部署到我的 Ubuntu 服务器(与 mySQL 服务器位于单独的机器和网络上)时,完全相同 代码连接良好,它通过 mono 和 apache 提供服务。会不会是 XSP 的问题?我不知道。

我花了无数个小时试图让它工作,遍历了我能找到的关于从 mono 连接到 mySQL 的所有教程和网站。每个人都以与上一个相同的方式得出结论,失败。有帮助吗?

最佳答案

这是我为让它连接所做的工作。

  1. 下载 MySql.Data 适配器的源代码。
  2. 替换StreamCreator.csCreateSocketStream方法(见代码注释)

     private Stream CreateSocketStream(IPAddress ip, bool unix)
        {
            EndPoint endPoint;
    
            // You don't need the following lines.
            //if (!Platform.IsWindows() && unix)
            //  endPoint = CreateUnixEndPoint(hostList);
            //else
    
            // Instead create a regular IPEndPoint.
            endPoint = new IPEndPoint(ip, (int)port);
            // Replace the socket it is trying to use with the following.
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            if (keepalive > 0)
            {
                SetKeepAlive(socket, keepalive);
            }
             // Remove the async.  connection.  This hangs and fails.  Not sure why.
            //IAsyncResult ias = socket.BeginConnect(endPoint, null, null);
            //if (!ias.AsyncWaitHandle.WaitOne((int)timeOut * 1000, false))
            //{
            //  socket.Close();
            //  return null;
            //}
            try {
                // Instead do a regular blocking connect to the endpoint.
                socket.Connect(endPoint);
            } catch (Exception ex) {
                throw;
            }
    
            // No longer relevant.
            //try
            //{
            //  socket.EndConnect(ias);
            //}
            //catch (Exception)
            //{
            //  socket.Close();
            //    throw;
            //}
            MyNetworkStream stream = new MyNetworkStream(socket, true);
            GC.SuppressFinalize(socket);
            GC.SuppressFinalize(stream);
            return stream;
        }
    

显然,这很丑陋,而且很乱。但是,除了我上面评论的让 OSX + Mono 连接之外,我没有找到其他方法。如果没有这些更改,它根本无法工作。

关于mysql - 无论我尝试什么,MySQL .NET 适配器都拒绝从 Mono 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940849/

有关mysql - 无论我尝试什么,MySQL .NET 适配器都拒绝从 Mono 连接的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  5. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  6. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  7. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  8. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  9. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  10. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

随机推荐