我正在尝试将我的start_kernel
计算机设置为MySQL客户端,以便连接到外部embedded Linux
服务器(在远程计算机上运行)。 MySQL
不是一种选择。
我理解,感谢Basile Starynkevitch我必须使用sqlite
(因为这是唯一一个运行这种连接并在客户端处理MySQL客户端/服务器协议的库)。
Qt统计数据:
您需要MySQL头文件以及共享库 libmysqlclient.so。根据您可能需要的Linux发行版 安装一个通常称为“mysql-devel”的包。
有人这样做并且可以指出正确的包装吗?
答案 0 :(得分:3)
是的,假设您要做的是使用QtSql API访问MySQL数据库而无需连接到外部MySQL服务器。使用嵌入式服务器库,服务器在与客户端Qt应用程序相同的过程中运行,类似于SQLite的工作方式。
但有一点需要注意:自MySQL 5.7.17起,libmysqld嵌入式服务器库已弃用,将在MySQL 8.0中删除。 (如http://dev.mysql.com/doc/refman/5.7/en/libmysqld.html所述)
答案 1 :(得分:2)
你的问题很混乱,似乎很矛盾。
要么使用外部 MySQL服务器,这意味着您的应用程序会打开一个(tcp(7)套接字)连接到某个运行mysqld
的远程计算机。然后你必须使用libmysqlclient
(因为这是运行这种连接并在客户端处理MySQL client/server protocol的唯一库)。
如果mysqld
服务器在同一个嵌入式Linux系统上作为不同进程运行,您应该有一些方法可以启动它(可能是其中的一部分)它上面的init
脚本)。然后你仍然使用套接字通信,你仍然需要libmysqlclient
。与运行mysqld
的远程计算机的可能区别可能是(但我不确定)套接字系列。在连接到同一台机器上的服务器的特殊情况下,libmysqlclient
可能正在使用unix(7)套接字。
或者您不想要任何外部服务器。您可能会考虑libmysqld
但是Romain answered它已被弃用并且变得不受支持(所以我觉得这将是一个非常糟糕的选择)。然后,所有数据库代码都在嵌入式Linux计算机上运行,该计算机还具有所有数据存储空间。在这种情况下(关系数据库以及相同的嵌入式Linux计算机上的数据和存储),我建议使用sqlite,因为它得到了很好的支持并且相当稳定。
如果您的mysqld
守护程序在远程计算机上运行,则您(实际上)无法避免libmysqlclient
(否则您需要重写大部分守护程序)。
答案 2 :(得分:0)
我最终做了以下事情:
在我的嵌入式Linux上安装MySQL并使用
进行测试mysql --host=1.2.3.4 --user=Foo --password=FooPass testdb
当MySQL服务器在1.2.3.4上运行时。
我使用-sql-mysql
选项重新编译了Qt,因此新编译的版本将包含Qt MySQL插件。
测试下一个代码是否支持Qt MySQL插件:
QStringList driverslist = QSqlDatabase::drivers();
QString str;
foreach (str, driverslist) { qDebug() << str }
预期输出为:
QMYSQL3
QMYSQL
使用下一个代码测试驱动程序是否按预期加载:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("1.2.3.4");
db.setDatabaseName("TestDB");
db.setUserName("Foo");
db.setPassword("FooPass");
bool ok = db.open();
if(ok)
{
// "Connected"
}