使用 MySQL 作为嵌入式服务器时如何创建数据库文件

Posted

技术标签:

【中文标题】使用 MySQL 作为嵌入式服务器时如何创建数据库文件【英文标题】:How do I create the database files when using MySQL as an embedded server 【发布时间】:2017-07-30 14:08:24 【问题描述】:

我正在尝试构建一个使用 mysql 嵌入式数据库的应用程序(目前在 OS X 上,但最终在 OS X 和 Windows 上),我使用 this example 作为起点。我已经成功地构建了它,使用 cmake 和这个 CMakeLists 文件:

cmake_minimum_required(VERSION 3.3)

project(Demo)

set(TARGET_NAME Demo)

add_executable($TARGET_NAME test2_libmysqld.cpp)

target_include_directories($TARGET_NAME
  PRIVATE /usr/local/include/mysql
  )

find_library(LIBMYSQLD NAMES libmysqld.a)
find_library(LIBSSL NAMES libssl.a PATHS /Users/stebro/test/openssl/openssl)
find_library(LIBCRYPTO NAMES libcrypto.a PATHS /Users/stebro/test/openssl/openssl)

# target_include_directories($TARGET_NAME PUBLIC $LIBMYSQLD_INCLUDE_DIRS)
target_link_libraries($TARGET_NAME
  $LIBMYSQLD
  $LIBSSL
  $LIBCRYPTO
  )

(我在 /Users/stebro/test/openssl 中本地构建了 ssl,我不得不将演示文件的名称更改为 .cpp,以便 cmake 创建与 STL 和其他运行时内容的正确链接。我' m 使用通过自制软件安装的 mysql,即“mysql Ver 14.14 Distrib 5.7.19, for osx10.10 (x86_64) using EditLine wrapper”)。

当我运行程序时,我得到了错误:

bash$ ./Demo --defaults-file=../my.cnf
InnoDB: Progress in percent: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
mysql_real_connect failed: Unknown database 'test'

my.cnf 看起来像这样:

[Demo_SERVER]
language = /usr/local/Cellar/mysql/5.7.19/share/mysql/english

[libmysqd_server]
datadir = ./data
language = ./english
skip-innodb

[libmysqld_client]
language = ./english

我假设发生此错误是因为测试正在尝试连接到数据库“测试”,但我从未采取任何步骤来创建此数据库(或嵌入式服务器所需的任何其他文件)。

如何为嵌入式服务器创建启动文件状态以使其正常运行?我是否使用these 之类的指令在本地 MySQL 实例上创建数据库,然后关闭该服务器并将文件复制到某个本地空间?还是我用来创建初始文件(以及后续数据库“测试”)的 mysqld 服务器库中的 api?

【问题讨论】:

【参考方案1】:

好的,我的配置错误。我使用的 my.cnf 文件是我在网上找到的两个不同示例的合并。我的示例的正确 my.cnf 文件如下所示:

[test2_libmysqld_SERVER]
language = /usr/local/Cellar/mysql/5.7.19/share/mysql/english
datadir = ./data

[test2_libmysqld_CLIENT]
language = /usr/local/Cellar/mysql/5.7.19/share/mysql/english

演示程序现在可以在连接“二”(没有数据库说明符的情况下连接)上进行操作,但仍然在“一”上失败,但那是因为尚未创建“测试”数据库 - 我想我能猜出一个。

【讨论】:

以上是关于使用 MySQL 作为嵌入式服务器时如何创建数据库文件的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Springboot 运行集成测试时启动嵌入式 gRPC 服务器

分布式Java桌面应用程序mySQL数据库

C++ qt 嵌入式 mysql 服务器

如何将嵌入式代码发送到服务器端-PHP

基于 Spring Boot (Tomcat) 的应用程序作为守护进程 - 如何停止?

一天一点MySQL复习——存储过程