问题标签 [mariadb-10.5]

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 投票
0 回答
24 浏览

data-warehouse - 如何提高 maraidb 列存储数据仓库的指数级增长事实表的性能?

我们建立了一个基于 maraidb 列存储引擎的数据仓库。数据仓库由几个维度表和事实表组成。事实表由数百万个数据组成,并且每天都通过我们的生产数据库中的 ETL 过程进行填充。我们现在主要关心在我们的数据仓库中做什么,例如维度表的规范化以及事实表的汇总和分区,因此从长远来看不会有任何查询性能问题。任何有关它的建议将不胜感激。

0 投票
1 回答
385 浏览

mariadb - 使用 MariaDB 10.5 禁用没有密码的 root 登录

我正在尝试使用新版本的 MariaDB 禁用没有密码的 root 登录。

通常,我将 root 的身份验证插件设置为“”。但它不再工作了

我尝试使用ALTER USER但我只成功将插件设置为unix_socketmysql_native_password

我该如何解决?

非常感谢。

问候。

0 投票
4 回答
73 浏览

sql - 选择特定中间项的 MySQL 嵌套聚合查询

这是我的activities桌子。

我需要用户在所有会话中花费的总时间。每个会话在一天内发生,包括一个“开始”和多个“任务”(在下一个会话以“开始”开始之前)。一个会话持续时间 = 最后一个任务 - 开始 [时间戳差异]

我无法弄清楚如何获得会话中的最后一个任务。我已经尝试了基本的聚合和连接查询 - 但它不起作用。

作为一种方法,我认为我真正需要的是以某种方式获取最后一列(低于/ session_group),然后我可以聚合并获得最大/最小时间戳之间的差异。

请让我知道是否甚至可以通过 sql (MySQL) 获得所需的输出以及如何去做?或者是否有必要通过 Javascript 循环遍历数据?

下面是表的 MySQL 查询:

0 投票
2 回答
53 浏览

mysql - MariaDB 触发器在同一张表上执行 UPDATE 和 INSERT

我目前有一张account桌子和一张account_audit桌子(所有代码都可以在这里找到)。

我有两个触发器,它们根据插入到帐户表中的数据将记录插入到 account_audit 表中。

1 个触发器是一个 ON INSERT 触发器,它只插入这些值 - 工作正常。

因此,在我的审计表上插入 2 条记录后 - 我在两个表中都有两条记录,如下所示。

一切都很好——2038 年是 MariaDB 的无穷大——至少在临时表中是这样!

但是,我的 UPDATE 触发器如下:

因此,当我更新帐户的余额时,我希望 account_audit 跟踪反映这一点,然后将最近的(插入之前)余额记录转到valid_to(今天),并将今天的新记录valid_from转到valid_to2038 年(MariaDB 无限?)。

问题是当我运行这个语句时

account_audit 表中的记录变为:

您可以看到 Bill 的记录已被插入,但问题是 Ben 的记录也已更新为今天插入的日期 - 我只希望这发生在 Bill 身上!

我有WHERE ((valid_to = '2038-01-19') AND (OLD.acct_name = NEW.acct_name));我的触发器,我已经尝试了很多其他方法 -WHERE OLD.acct_id = NEW.acct_id我尝试将 UPDATE 更改为使用 acct_id 而不是名称 - 没有任何效果。我尝试交换OLD。和新的。订购 - 在更新之前或之后尝试 - 我真的疯了!

如何重写触发器以更新其帐户的人而不是所有帐户的 account_audit 表 - 也就是说,仅更新 Bill 的帐户而不是 Ben 的帐户?

我知道临时表功能——我不想使用它,因为这是为了研究,我必须使用触发器!

小提琴在这里

0 投票
1 回答
24 浏览

mysql - Wordpress - Plesk - Mysql ,奇怪的设置和版本,巨大的瓶颈

经过大约 3 天的研究后,我正在写这篇文章,但没有以一个有意义的解决方案结束。

我有几个设置来托管 Wordpress 网站,直接使用 Apache 和使用 Plesk,一切都托管在 AWS 上。最近我在一个 m5a.xlarge 实例上安装了一个新的 Plesk,但事情开始变得很奇怪。

基本上这个新实例的性能,分析 wp-login.php 的 TTFB 是不可接受的。与旧设置相比,我们谈论的是 2.0 秒。

为了简短起见,我进行了大量测试,结果如下:

  1. 带有 Mariadb 10.2、t3.medium 的 Apache AWS Linux 2 上的 TTFB 0.3-0.4
  2. 运行 Mariadb 5.5 的 Plesk t3.medium 上的 TTGB 0.3-0.4
  3. TTGB 1.8-2.2 在 Plesk m5a.xlarge 上运行 Mariabdb 10.5(最后一个)。
  4. 最终测试,调出一台新机器 m5a.xlarge 并安装另一台 plesk,TTFB 0.2-0.5 但 plesk 安装 Mariadb 5.5

现在首先我不明白为什么 plesk 两次安装了 5.5,一次安装了 10.4。安装过程中别无选择。

我做了各种测试,我感觉有一些关于编码和排序规则的东西,而且还从 withing WP 运行 mysql 基准测试,没有显示任何差异,结果几乎相同。

所以任何人都可以向人们展示那里发生了什么?玛丽亚数据库 10.5 ? 或者它可能是一个有故障的磁盘?曾经发生过吗?(我还分离了磁盘并尝试了另一个实例,没有区别,所以故障实例超出了范围)。

谢谢 !

0 投票
0 回答
30 浏览

mariadb - 使用联合并将列放入变量时出错

我在 Ubuntu 上使用 Mariadb (10.5.12-MariaDB-1build1)。

我在表上创建了一个插入触发器;使用联合语句检查以前的记录。它在以前的版本(10.3.31-MariaDB-0ubuntu.20.04.1)中工作正常,但在这个版本中抛出错误

我已经简化了陈述

工会在几张桌子上,但我把它减少到两个

给我这个错误

显然,如果我评论 INTO 子句,那很好。

所以我想问题出在INTO。我想更具体地说是进入的位置。因为单个 select 语句没有给出任何错误。

我将检查文档以了解我做错了什么。


@Barmar 这是实际的代码

0 投票
0 回答
27 浏览

python - 使用 LOAD DATA LOCAL INFILE 从 CSV 文件加载十六进制格式的二进制数据会截断值

场景如下:

  • 我们将表中的二进制列存储在 CSV 文件中(使用 Pandas “df.to_csv()”)。
  • 二进制值以十六进制形式存储在 CSV 文件中
  • 文件中存储的值是正确的,这些值可以手动取消十六进制
  • 我们使用此语句上传值:

除二进制列外的所有列均已成功上传。存储在 target_table 中的二进制值似乎被截断,好像只上传了部分信息。target_table 的定义与原来的完全相同。

MariaDB 服务器 (10.5.12) 中的字符集信息:

到目前为止,我们已经尝试过:

  • 不同的字符集(在语句、连接/客户端和目标表中)
  • 使用 BASE64 代替 HEX
0 投票
0 回答
39 浏览

php - 使用带有接受服务器证书的 PDO 连接到 MariaDB

我可以使用应用服务器上的 --ssl 选项将数据库与 Maria 客户端连接:

mariadb -h [地址] -P [端口] -u [数据库管理员用户] -p --ssl

但是尝试使用 PHP PDO 连接同一服务器上的同一数据库,我们收到以下错误消息:

SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法[client_ed25519]

我在 PDO 连接中添加了以下选项以模拟 --ssl 选项

这是我的测试代码片段:

数据库版本:MariaDB 10.5

0 投票
0 回答
36 浏览

mariadb - MariaDB 10.5 在 .cnf 中更改 sql_mode 不会更改 @@sql_mode,为什么?

Fedora Desktop 35 运行 MariaDB 10.5,大约一个月前全新安装。

为什么我的变化是/etc/my.cnf/mariadb-server.cnf sql_mode变化@@GLOBAL.sql_mode而不是变化@@sql_mode

我正在尝试STRICT_TRANS_TABLES从我的sql_mode(我有一个 DATETIME NOT NULL 列,我需要从 INSERT 中省略它并让它假定一个默认值)中删除。我的系统有一个简单的 MariaDB 安装,几乎是空/etc/my.cnf的,其中包括所有文件,/etc/my.cnf.d其中有一个mariadb-server.cnf[server]可以设置的部分sql-mode

如果省略,则默认为https://mariadb.com/docs/reference/mdb/system-variables/sql_mode/ to中指定的STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。通过 SquirrelSQL 查询确认:

所以默认情况下两者@@sql_mode@@GLOBAL.sql_mode是等价的。

将此添加到mariadb-server.cnf[server]行已经存在):

重新启动服务器systemctl restart mariadb,日志中没有错误,然后从上面重新运行查询:

请注意,全局sql_mode不再具有STRICT_TRANS_TABLES,但非全局具有!为什么,我能做些什么呢?

由于严格的规则生效,插入仍然失败。

0 投票
0 回答
50 浏览

sql - SQL - 在'select * where id ='上返回行,其中id是传递的字符串的子字符串

我有一个数据库查询,我在其中传递一个字符串以选择 int (id) 或 string (name) 匹配的位置。

例如:

标识(整数) 名称(varchar)
13 this_is_a_name

我正在通过,因为我希望能够在任何一种情况下找到。

问题是,当我执行以下查询时,它应该什么都不返回:

当我不应该返回行时,我在 id 上得到了匹配。有人可以解释为什么会这样吗?鉴于字符串的前两个字符是 13,我知道这是某种字符串到 int 的问题,但它似乎是错误的行为。

我这样做是因为我需要在一个关键点确定我是否正在处理特定数据类型,而该数据类型以前没有通过链接表链接。