2016-10-04 67 views
0

我有一個安裝並運行MariaDB的MAC。我有兩個安裝的應用程序,「Sequel Pro」,運行在MAC上,本地運行,我可以連接到數據庫。我也有HeidiSQL在wine下運行,我也可以連接並瀏覽數據庫。Mac OSX上的MariaDB和node.js

我也安裝節點,但是當我嘗試連接到數據庫中,我無法連接到數據庫中,我得到的消息是:

連接ECONNREFUSED然後我的系統的IP地址,後跟端口3306

這看起來像一個權限問題,但我對MAC很新,不知道如何解決問題。運行在node.js中的腳本可以在我的Windows系統上運行。

我知道用戶存在且有效,它與我使用SQL應用程序進行連接時相同。

MAC OSX正在運行最新的os x sierra,mariadb是版本15.1發行版10.1.17,用於osx10.12 x64。節點是4.6.0版本

我的連接步驟:即當節點開始得到系統的IP進行

function mariaDBconnectPrimtive(intIdx, cbRoutine, objParams) { 
     try{ 
     if (!(mysql && mysql.createPool)) { 
      throw("Cannot create mysql pool!"); 
     } 
     var pool; 

     if (intIdx == 1) { 
      pool = mysqlBusDevPool; 
     } else { 
      pool = mysqlPool; 
     } 
     if (pool == undefined) { 
      console.log("strServerHost: " + strServerHost); 
      pool = mysql.createPool({host:strServerHost 
          ,port:"3306" 
         ,database:"dbname" 
          ,user:"usrname" 
         ,password:"password" 
         ,timezone:"utc" 
      ,multipleStatements:true 
          ,max:1000 
          ,min:1 
      ,idleTimeoutMillis:defs.QUERY_TIMEOUT});  
     } 
     if (pool && pool.getConnection) { 
      pool.getConnection(function(errsts, conn) { 
       var resp = {}; 

       if (errsts) { 
       resp['error'] = errsts; 
       eh.msg({file:strThisFile 
        ,method:"mariaDBconnectPrimtive" 
         ,ex:errsts}); 
       return;   
       } 
       resp['state'] = "connected"; 

       if (cbRoutine) {   
       cbRoutine(conn, resp, objParams); 

       if (conn != undefined) { 
        conn.release(); 
       } 
      } 
      }); 
     } 
     if (intIdx == 1) { 
      mysqlBusDevPool = pool; 
     } else { 
      mysqlPool = pool; 
     } 
     } catch(ex) { 
     eh.msg({file:strThisFile 
      ,method:"mariaDBconnectPrimtive" 
       ,ex:ex}); 
     }  
    }; 

代碼:

os = require("os"); 
    var objNIs = os.networkInterfaces();   
    for(var strName in objNIs) { 
     var aryIFace = objNIs[strName]; 
     for(var i=0; i<aryIFace.length; i++) { 
      var objNI = aryIFace[i]; 

      if (objNI['internal'] == false && "IPv4".match(objNI['family'])) { 
      strServerHost = objNI['address']; 
      break; 
      }  
     } 
     if (strServerHost !== undefined) { 
      break; 
     } 
     } 

它似乎有什麼東西做的返回的IP地址,我把服務器地址硬編碼爲「本地主機」,它可以工作,但是分配給系統的I/P有什麼問題?

我在mariadb中創建了一個有權訪問原始I/P的用戶,但這沒有幫助。

+0

檢查您的防火牆和macOs的安全設置。 –

+0

防火牆已關閉,這是默認設置,爲什麼桌面應用程序能夠連接終端而不是節點? – SPlatten

+0

你可以發佈你的連接代碼....如果你通過像localhost或127.0.01之類的東西更改ip,那該怎麼辦 – Hackerman

回答

1

你爲什麼不能按IP地址連接的原因是記錄here

MariaDB的套餐綁定MariaDB的爲127.0.0.1(環回IP地址)在默認情況下...

這意味着它只能通過回送接口訪問,而不能訪問任何其他可能允許外部IP流量的接口(如與您的代碼解決的IP地址相關的接口)。

+0

我不確定我是否理解,正如前面提到的,這在Windows上的相同設置上工作,沒有遠程訪問,客戶端和服務器是相同的。 – SPlatten

+0

@SPlatten localhost/127.0.0.1至少在Unix上由不同於處理服務器外部IP號的網絡接口處理。 MariaDB默認只監聽處理本地主機的接口,所以你需要使用_「localhost」_或_「127.0.0.1」_來連接它。 – robertklep

+0

我試圖在OSX上找到my.cnf,到目前爲止我找不到它.... – SPlatten