文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.1.2.3 建立連線

若要建立與伺服器的連線,您必須建立 Ndb_cluster_connection 的執行個體,其建構函式會將叢集連線字串作為引數。如果未提供連線字串,則會假設為 localhost

在呼叫 Ndb_cluster_connection::connect() 方法之前,叢集連線實際上不會啟動。當不帶任何引數呼叫時,連線嘗試會無限期地重試,每秒一次,直到成功為止。在建立連線之前,不會進行任何報告。

依預設,API 節點會連線到 最靠近的資料節點。這通常是執行在與最靠近的節點相同電腦上的資料節點,因為可以使用共用記憶體傳輸,而不是較慢的 TCP/IP。在某些情況下,這可能會導致負載分配不佳,因此可以透過在呼叫 connect() 之前,使用 0 作為引數來呼叫 set_optimized_node_selection() 方法,來強制執行循環配置資源節點連線配置。

connect() 只會啟動與 NDB Cluster 管理節點的連線。若要啟用與資料節點的連線,請在呼叫 connect() 之後使用 wait_until_ready()wait_until_ready() 最多會等待指定的秒數,以建立與資料節點的連線。

在以下範例中,初始化和連線是在兩個函數 example_init()example_end() 中處理,這兩個函數會藉由包含檔案 example_connection.h 來包含在後續範例中。

範例 2-1:連線範例。 

#include <stdio.h>
#include <stdlib.h>
#include <NdbApi.hpp>
#include <mysql.h>
#include <mgmapi.h>

Ndb_cluster_connection* connect_to_cluster();
void disconnect_from_cluster(Ndb_cluster_connection *c);

Ndb_cluster_connection* connect_to_cluster()
{
  Ndb_cluster_connection* c;

  if(ndb_init())
    exit(EXIT_FAILURE);

  c= new Ndb_cluster_connection();

  if(c->connect(4, 5, 1))
  {
    fprintf(stderr, "Unable to connect to cluster within 30 seconds.\n\n");
    exit(EXIT_FAILURE);
  }

  if(c->wait_until_ready(30, 0) < 0)
  {
    fprintf(stderr, "Cluster was not ready within 30 seconds.\n\n");
    exit(EXIT_FAILURE);
  }

  return c;
}

void disconnect_from_cluster(Ndb_cluster_connection *c)
{
  delete c;

  ndb_end(2);
}

int main(int argc, char* argv[])
{
  Ndb_cluster_connection *ndb_connection= connect_to_cluster();

  printf("Connection Established.\n\n");

  disconnect_from_cluster(ndb_connection);

  return EXIT_SUCCESS;
}