使用 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 服务器