MySQL NDB Cluster 8.1 手冊
MySQL NDB Cluster 8.0 手冊
NDB Cluster 內部手冊
若要建立與伺服器的連線,您必須建立 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;
}