问题标签 [mariadb-connector-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
747 浏览

c++ - 没有 mysql_config 的 MariaDB C 连接器

我正在从 mysql 迁移到 MariaDB。使用 mysql,我将 C 连接器链接到我的应用程序mysql_config --libs,根据我在互联网上可以阅读的内容,使用 MariaDB 应该仍然可以,但在我的系统mysql_config上不存在,我不知道如何获取它以及是否复制我最终会得到仍将与 MariaDB 兼容。

所以问题是:如何将 MariaDB 链接到我的 C/C++ 应用程序?

Debian 10 (Buster) 64 位 ~

mariadb-server 版本:1:10.3.15-1 ~

mariadb-client 版本:1:10.3.15-1 ~

先感谢您。

0 投票
0 回答
360 浏览

c - 为什么“查询期间丢失与 MySQL 服务器的连接”错误时不时发生(引发超时,查询前 ping)

我正在创建一个实验,其中服务器端是一个基于 libuv 的 C/C++ 应用程序,它在 mysql 服务器上运行查询(它在 localhost 上)。

在大多数情况下,它可以正常工作,但有时我会在此过程中的各个地方收到“查询期间与 MySQL 服务器的连接丢失”。

我试过提高所有的超时时间。但我认为这是不相关的,如果服务器被请求轰炸(比如每秒),同样的错误就会被抛出。

在进行查询之前,我正在 ping 服务器。

我试过重新连接选项,问题是一样的。

据我了解,单线程 libuv 和 mysql 应该可以实现此流程:

我想念什么?

0 投票
0 回答
55 浏览

c - 从 MySQL 5.6 升级到 MariaDB 10.3 后,“mysql_warning_count”错误地返回 0 个警告

我正在使用“MySQL Connector for C v6.1.11”连接到 MySQL 5.6.35 服务器。

当我mysql_real_query()用来运行类似的查询SELECT MAKETIME(-1000,57,33)时,mysql_warning_count()正确返回 1 个警告(SHOW WARNINGS会说“截断不正确的时间值:-1000:57:33”)。

我最近用 MariaDB 10.3.13 替换了 MySQL 5.6.35 服务器。相同的查询mysql_warning_count() 现在返回 0 个警告。但是,SHOW WARNINGS仍会列出警告(如预期的那样)。

我尝试用最新的 MariaDB Connector/C (v3.1.6) 替换旧的 MySQL 连接器库,但问题仍然存在。

什么会导致不报告查询警告?我是否需要在某处设置标志,或应用一些兼容性设置?

使用的 SQL 模式是默认的,即: 对于 MySQL 5.6: NO_ENGINE_SUBSTITUTION 对于 MariaDB 10.3:STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO , NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

传递给的唯一客户端标志mysql_real_connect()CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS(对于 MySQL 和 MariaDB)

0 投票
0 回答
147 浏览

r - R 的 MariaDB ODBC 驱动程序给出了奇怪的结果

使用MariaDB ODBC 3.1.3 Driver将数据从 MariaDB 导入 R 时会出现奇怪的行为。我要导入的数据库中的表是:

如果我使用MariaDB ODBC 3.1.3 驱动程序将表导入 R,我会在 R 中得到这个:

显然,在第 2,4,8 和 10 行中插入了列min和一对 (0,0),将这些列的值向下移动。max这只发生在这个特定的表上。如果我将其他表从 DB 导入到 RI,则得到正确的表。

如果我使用MySQL ODBC 8.0 unicode 驱动程序,它也可以与这个特定的表一起正常工作。这种行为是否有原因,使用此驱动程序时是否可以避免这种行为?

环境:

  • 视窗 10
  • R 版本 3.6.1 (2019-07-05))
  • RODBC 1.3-16
  • MariaDB 10.4.8
  • MariaDB ODBC 3.1 驱动程序

更新 1: MariaODBC(版本 3.1.6)与 MariaDB 实例的所有数据库连接,而不仅仅是一个。

以下脚本比较 maria-odbc 和 mysql-odbc。

表架构/数据库codes未连接正确的数据库。

表架构/数据库tabl是正确的数据库。

结论 1:maria-odbc 确实连接到 MariaDB 实例的所有数据库。

结论 2:maria-odbc 在导入 R 时会损坏数据。

更新 2: MariaDB ODBC 不适用于 Excel MSQuery(MySQL ODBC 可以)。

要查看此问题是否仅与 R 或 RODBC 有关,我尝试使用 excel-odbc、mysql-odbc 和 maria-odbc(最后两个使用 MSquery)使用 Excel 导入数据。excel-odbc 和 mysql-odbc 正确提取表,maria-odbc 没有。出现以下消息:string data, right truncated。我使用了最新版本的 MariaDB ODBC (3.1.6)。

0 投票
0 回答
96 浏览

node.js - Mariadb nodejs connecor 表名占位符

我有表格“排名”和“排名前”,我想在同一个网页上显示它们。(a) 没有占位符工作的代码

(b) 使用占位符的代码给出 sql 语法错误(错误 1064)

在 where 子句中使用占位符没有任何问题

看过https://mariadb.com/kb/en/connector-nodejs-promise-api/#placeholder并用谷歌搜索但无法解决。我可以做(b)吗?出了什么问题?谢谢你。

0 投票
1 回答
265 浏览

c++ - SELECT 准备好的语句在 MariaDB 中失败并出现错误 1295

我正在尝试使用准备好的语句通过 MariaDB Connector/C 运行以下查询:

但是,mysql_stmt_execute()返回错误代码1295

准备好的语句协议尚不支持此命令

下面是大概的代码:

0 投票
1 回答
254 浏览

linux - 对 mariadb::account::create() 的未定义引用

我想用 C++ 编写一个应用程序并在其中使用 MySQL 数据库。我使用了 mariadbclientpp库。所以我克隆了它并在 windows vs 2019 中编译它,它运行良好。但是当我想在 Raspbian 中执行此操作时,出现以下链接错误:

我是 Linux 的新手,所以我做了很多搜索,我尝试了一些修复,但没有一个能帮助我。我尝试了这种方法来编译我的代码:

1

2

有什么想法吗?

0 投票
1 回答
125 浏览

mysql - 即使没有流量,MariaDb-failover 也会在 CPU 上运行且很健谈

我们有一个用 scala 2.12.x 和 Play framework 2.5.x 编写的 API。API 使用 MariaDb 连接器/J 2.5.4 连接到 AWS aurora 集群jdbc:mysql:aurora://some-aurora-cluster

功能上一切正常,除了我们注意到 CPU 使用率很高,即使没有流量。一些研究表明:

上面的 cmd 显示了一些MariaDb-failover。我不确定它的作用以及为什么有多个忙于高 CPU 使用率。

有很多TIME_WAIT。这也很奇怪,因为在我执行这个 cmd 时没有流量。

有数百个TIME_WAIT;每次执行 cmd 时,数字都会发生变化。

有没有人知道这是正常的还是我需要担心的事情?

如果您还有其他问题,请告诉我。

========== 更多信息

得到PID:2655

这是内容(修剪):

十六进制 LWP 的 PID:

========== 更多信息

我们的 API 有 5 种不同的数据库配置 - 5 种不同的数据库。每个都有一个连接字符串jdbc:mysql:aurora://some-aurora-cluster

请注意,该aurora模式用于更好地体验故障转移,因此它解释了 5 个轻量级进程。但它们很健谈,导致TIME_WAITCPU 使用率升高的许多原因。

以前有没有人遇到过这种情况,你是如何缓解的?我仍然想使用aurora模式(或等效的东西),这样我们就不必在数据库故障转移时重新启动应用程序。

0 投票
0 回答
526 浏览

python-3.x - 如何在 Amazon Linux 环境中安装 Python mariadb 模块

我的目标是构建一个 AWS Lambda 层,为运行 python 3.8 的 AWS Lambda 提供 mariadb 模块。

按照这些说明,我需要在与 AWS Lambda 平台兼容的实例上安装 mariadb 模块。像这样安装模块...

...失败并显示错误消息...

我需要什么来解决这个问题?

我假设安装“MariaDB Connector/C”是先决条件?但如何做到这一点?以及如何以可以将其打包成可用于定义 AWS Lambda 层的 zip 的方式进行操作?

一些上下文

我在一个 Amazon 实例上运行了它,我认为它与 Lamba 主机相同,以显示“Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-02769748522663066”。cat /etc/os-release返回...

不同的实例 AMI 是否更适合打包 python3.8 Lambda 层?

我用这个设置了python3(盒子里没有python 3.8):


更新和自我回答

所以简短的回答是,目前这是不可能的。MariaDb 连接器不支持亚马逊风格的 linux。但是,有一个备用 python 库 PyMySQL 将连接到 mariadb 服务器。

这是一个 python3.8 AWS Lambda 函数的内容,它为 Lambda 制造 AWS 函数层。

工厂 (AWS Lambda) 函数

在客户端,可以像这样调用(再次使用python脚本)......工厂函数函数接受python pip冻结要求并制造一个层,而不是为指定的模块提供服务。就我而言, requirements.txt 将包括 PyMySQL 。

0 投票
0 回答
173 浏览

c++ - MariaDB 连接器 C、mysql_stmt_fetch_column() 和内存损坏

我正在开发 MariaDB 连接器 C 的包装器。有一种典型情况是开发人员不知道存储在字段中的数据的长度。正如我所知道的,获得字段实际长度的方法之一是将长度缓冲区传递给mysql_stmt_bind_result,然后通过调用mysql_stmt_fetch_column来获取每一列。但我无法理解函数mysql_stmt_fetch_column是如何工作的,因为我遇到了内存损坏和应用程序中止。

这是我努力实现目标的方式

如果我将一个数组放入mysql_stmt_fetch_column,那么我将获取唯一有效的第一个字段,所有其他字段都是垃圾。如果我将单个 MYSQL_BIND 结构放入此函数,那么我将在大约第 74 个字段上中止应用程序(有趣的是它始终是这个字段)。如果我使用另一个 MYSQL_BIND 数组,那么情况与第一种情况相同。

请帮助我了解如何正确使用它!谢谢

最小的可重现示例