首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

libmysqld 嵌入式 MySQL 伺服器庫:原理、編譯與限制

     編輯:MySQL 綜合教學

什麼是 libmysqld?

將完整 MySQL 伺服器功能嵌入客戶端應用程式的 C/C++ 靜態庫(libmysqld.a)。優點:無網路開銷、部署簡單(單一執行檔)、管理輕量。API 與客戶端/伺服器模式相容,遷移成本極低。

核心初始化/清理函數

函數調用時機
mysql_server_init()程式啟動早期,main() 中,任何 MySQL API 之前。
mysql_server_end()程式退出前。
mysql_thread_init()每個存取 MySQL 的執行緒啟動時。
mysql_thread_end()執行緒結束前(pthread_exit() 之前)。

編譯鏈接關鍵

gcc mysql_test.c -o mysql_test -lz \
  `/usr/local/mysql/bin/mysql_config --include --libmysqld-libs`
  • 必須鏈接 libmysqld.a 而非 libmysqlclient.a。
  • 需額外鏈接 pthread、zlib、crypt 等系統庫。
  • 執行緒程式編譯需加正確旗標(Linux -lpthread、FreeBSD -pthread)。

主要限制

  • 不支援 ISAM 表、UDF、核心轉儲堆疊追蹤、內建 RAID、主從複寫。
  • 低記憶體系統無法處理大結果集。
  • 無法直接接受外部 Socket/TCP 連線(需中介層轉發)。
  • 預設關閉權限鑑定,需編譯時加 --with-embedded-privilege-control 啟用。

配置檔支援

可在 my.cnf 中使用 [embedded]、[server]、[應用名_SERVER] 區段分離配置,mysql_server_init() 第二參數傳遞 --defaults-file=my.cnf。

範例程式結構

mysql_server_init(argc, argv, server_groups);
MYSQL *mysql = mysql_init(NULL);
mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
mysql_real_connect(mysql, NULL, NULL, NULL, "db1", 0, NULL, 0);
mysql_query(mysql, "SELECT ...");
// fetch results...
mysql_close(mysql);
mysql_server_end();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved