AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[mysql](dba)

Martin Hope
Matt F.
Asked: 2025-04-20 11:40:51 +0800 CST

在两个不同位置使用 2 个 mysql 服务器的最佳设置是什么?

  • 8

我们目前有一台运行在 Oracle Linux 上的 MySQL 8 服务器。它运行在德克萨斯州一个托管数据中心的虚拟机上。

大约 95% 的时间花在 SELECT 操作上,大约 5% 的时间花在 INSERT 和 UPDATE 上。

我们正在努力在单独的位置(MO)添加另一个 mysql 服务器,主要是为了实现冗余和灾难恢复目的。

我的想法是,在两个位置之间建立一个隧道,并使用主位置作为主服务器来设置 MySQL 复制。这样,如果发生灾难,我可以切换到从服务器。但有一个缺点,那就是除非发生意外,否则这台专用的从服务器就一直闲置在那里,可能没有任何好处。

我正在考虑如何利用它,也许更新我的应用程序以使用从属服务器来处理一些繁重的查询/报告。

我原本以为这是一个很棒的计划,直到我开始阅读有关 MySQL 集群的文章。我们实在没有办法搭建集群所需的第三台专用 MySQL 服务器。

我的问题是:

假设您在 2 个位置有 2 个 mysql 节点,您将如何最好地利用它们?

我们的应用服务器所有东西都在 Docker 容器中运行。为了构建 MySQL 集群而不是复制,在应用服务器中添加一个 MySQL 实例(在 Docker 容器中)会不会是个疯狂的想法?

如果集群确实可行(通过应用服务器上的 MySQL 实例),我的理解是写入速度可能会变慢,因为写入操作要等到集群中所有节点都写入完毕才能完成?这可能意味着,如果集群节点分布在多个位置,写入速度会显著降低,因为两个站点之间会存在一些延迟?

任何建议都将受到赞赏。

mysql
  • 1 个回答
  • 33 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-19 00:46:38 +0800 CST

MySQL:为什么“use”命令不需要执行“;”?

  • 10

在 MySQL 8 服务器社区版中,下面是SQL查询和命令MySQL Shell的示例:

SELECT * FROM planet;
DESC planet;
SHOW DATABASES;
SHOW tables;

正如您所见,必须在句子末尾声明;字符(或\g根据情况声明字符)。\G

但我确实错误地意识到,无需执行use命令即可更改数据库。 ;

因此,下面两个命令可以和平地工作:

use <datababase>
use <datababase>;

只是好奇:

问题

  • 为什么use命令不需要;执行?

老实说,我不确定这是否是这种情况下的独特命令,但为什么它与其他命令不同?

mysql
  • 3 个回答
  • 710 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-18 11:31:38 +0800 CST

MySQL:如何导出非 SQL 查询语句的输出?

  • 9

在 MySQL 8 服务器社区中,可以执行MySQL Shell以下命令导出 SQL 查询的输出(最基本的):

SELECT * FROM cientifico INTO OUTFILE '/var/lib/mysql-files/cientifico-data.txt';

并且它按预期工作

但对于非 SQL 查询如下:

SHOW PROCESSLIST INTO OUTFILE '/var/lib/mysql-files/processlist.txt';

引发以下错误

错误 1064 (42000):您的 SQL 语法有错误;请查阅与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行附近“INTO OUTFILE '/var/lib/mysql-files/processlist.txt'”使用的正确语法

相同于:

SHOW DATABASES INTO OUTFILE '/var/lib/mysql-files/databases.txt';

给予

错误 1064 (42000):您的 SQL 语法有错误;请查阅与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行附近“INTO OUTFILE '/var/lib/mysql-files/databases.txt'”使用的正确语法

因此如果可能的话

问题

  • 如何导出非 SQL 查询语句的输出?

我假设该INTO OUTFILE语法仅适用于 SQL 语句,但对于非 SQL 语句呢?

mysql
  • 2 个回答
  • 134 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-18 01:24:26 +0800 CST

何时使用 SHOW PROCESSLIST 与 SELECT * FROM information_schema.PROCESSLIST 命令?

  • 8

在 MySQL 8 服务器社区中,以下两个命令显示相同的结构:

SHOW PROCESSLIST;
SELECT * FROM information_schema.PROCESSLIST;

问题

  • 什么时候使用SHOW PROCESSLISTvsSELECT * FROM information_schema.PROCESSLIST命令?

每个命令的存在都有特定的原因,对吗?

关于它们的输出,我只发现每个命令的State和列分别有两个区别:Info

State     | Info
----------------------------
init      | SHOW PROCESSLIST
executing | SELECT * FROM information_schema.PROCESSLIST

该列的区别Info很明显,因为它代表了执行的命令本身,但是:

  • 为什么列不同State?

价值很明确,executing但是:

  • 这个值代表什么init意思?
mysql
  • 1 个回答
  • 100 Views
Martin Hope
cccllll
Asked: 2025-04-15 02:44:49 +0800 CST

mysql/postgresql 高并发场景下的行锁

  • 5

我有一个简单的事务,具有隔离级别READ COMMITTED 表设置很简单

create table example.parent_tbl(
id int auto_increment primary key
);

create table example.child_tbl(
id int auto_increment primary key,
parent_id int not null,
update_dt timestamp default current_timestamp ON UPDATE current_timestamp,

foreign key (parent_id) references parent_tbl(id),
unique (parent_id)
);
select 
p.*
from example.parent_tbl p
where p.id not in (select parent_id from example.child_tbl)
limit 1
for update
skip locked; 

之后,我将使用 插入一条新parent_tbl.id记录child_tbl。

中的 ID 列child_tbl是唯一的。我有多个进程并行运行,偶尔其中一个进程会触发完整性异常,因为相同的 IDchild_tbl已经存在。

问题

为什么一个交易可以选择一个出现在的ID child_tbl?

这个逻辑似乎微不足道。

要么事务 A 持有提交前的行锁parent_tbl,要么事务 B 会跳过它。

或者

事务 A 已提交,事务 B 的 where 子句将过滤掉该行并将其跳过。

但事实告诉我事实并非如此!!!


通用查询日志显示了这种锁定机制的违反直觉的行为

服务器端日志

有两个进程并行运行,执行相同的操作。在本例中,它们分别是线程 60 和 61。

观察到两种结果。

  1. 线程 61 将 id 113 插入到child_tbl中,并释放了行锁。线程 60 运行查询,但无法检测到线程 61 刚刚插入的 id 为 113 的行。

  2. 线程 61 将 id 113 插入到child_tbl中,并且在它提交并释放行锁之前,另一个线程 60 运行查询并获取parent_tbl的相同行锁。


额外的

我对 PostgreSQL 进行了相同的测试,也遇到了异常。

mysql
  • 1 个回答
  • 59 Views
Martin Hope
Ken Ingram
Asked: 2025-04-12 15:09:57 +0800 CST

当服务器正常时,是否有调试 MySQL 客户端连接问题的基本方法?

  • 5

为 MySQL 提供服务的机器运行良好。另外 2 台机器使用 mysql-client 连接没有问题。网络上的 1 台机器自发停止连接。

我尝试过strace mysql -h server,但尝试立即被拒绝

我不知道如何排除导致突然失败的原因。

编辑:抱歉。忘记添加错误了:

ERROR 2003 (HY000): Can't connect to MySQL server on 'server1:3308' (111)

这很有趣。另一台服务器访问数据库没有问题:

mysql -h server2 -P3308 -u root -p

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16591
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

因此,运行数据库的服务器没有问题。但由于某种原因,server1它被拒绝连接。

身份验证允许从内联网内部进行远程连接。

任何谷歌搜索都假设问题出在服务器上而不是客户端上,所以我没有发现任何与客户端连接失败相关的客户端问题。

读过这篇文章的任何人都遇到过这样的问题并解决了吗?

mysql
  • 1 个回答
  • 25 Views
Martin Hope
Joel
Asked: 2025-04-05 05:01:50 +0800 CST

我可以在不使用转换为的情况下更改表及其列的排序规则吗?

  • 6

我的数据库中的所有表和列都使用 utf8mb4 字符集和 utf8mb4_unicode_ci 排序规则。我想迁移到 utf8mb4_0900_ai_ci 排序规则,但convert to在我的大型表中使用 utf8mb4_0900_ai_ci 排序规则是不允许的,除非我使用 gh-ost 或 pt-osc。

我觉得这convert to应该没有必要,因为字符集没有变化,但我找不到任何文档来证实或否认这一点。convert to在这种情况下我需要使用吗?还是就alter table ... modify col ... collate ...足够了?

我查看了“使用转换为字符集来仅更改排序规则?”这个问题,它提出了一个非常类似的问题,但由于这个问题的年代久远,答案有些过时了。即便如此,一个答案似乎暗示这convert to是不必要的。另一个答案深入探讨了字符集转换以及如何使用 pt-osc,而我希望避免这种情况。

mysql
  • 2 个回答
  • 26 Views
Martin Hope
You Old Fool
Asked: 2025-03-14 21:16:59 +0800 CST

如何使用 innodb_file_per_table 重新创建损坏的 innodb 表?

  • 8

MySQL 拒绝启动,我只能使用 以只读模式启动innodb_force_recovery = 6。我在这个主题上找到的每个答案都建议进行备份,删除 ibdata 和 ib_logfiles,然后重新创建它们:

  • https://serverfault.com/questions/592793/mysql-crashed-and-wont-start-up
  • InnoDB 损坏时 innodb_force_recovery
  • https://stackoverflow.com/questions/41997197/mysql-data-recovery-with-innodb

就我而言,由于 innodb-file-per-table 已启用,我想知道是否还需要删除文件,此外/var/lib/mysql/MY_DATABASE/table.ibd?,由于重做日志记录已禁用,因此没有日志文件可删除。

我得到的具体错误是这样的:

[InnoDB] InnoDB 重做日志被禁用时,服务器被终止。数据文件可能已损坏。您可以尝试使用 innodb_force_recovery=6 重新启动数据库

此时,我已经能够以只读模式启动,并且备份了我需要的所有表。我具体应该删除什么?或者有没有更好的方法来完全重建这些表?

我正在考虑完全卸载 mysql 并清除整个目录,但如果有更简单的方法,请在这里寻求反馈。

mysql
  • 1 个回答
  • 59 Views
Martin Hope
Piers Geyman
Asked: 2025-03-10 20:50:24 +0800 CST

从 5.7.30 升级到 8.4.3 后 MySQL 无法启动

  • 6

我刚刚尝试将运行 MySQL 5.7.30(在 Docker 中)的 MySQL 实例升级到 MySQL 8.4.3(在 Docker 中),但现在该实例无法启动,并抱怨缺少mysql.ibd文件。

我检查了 MySQL 数据文件夹,该文件不存在(mysql 文件夹存在,其中包含所有表文件),但我检查了仍在使用 MySQL 5.7.x 的其他系统,该文件不存在。我认为 MySQL 8.x 升级也许应该创建它,因为据我了解,mysql 系统数据库在 v8.x 之前是 MyISAM?

我搜索过,没有找到关于相同问题的任何报告。有人知道为什么会发生这种情况以及如何解决此问题并启动和运行新实例吗?

这是在实时系统上尝试之前的一次测试就地升级,因此我想了解在进行实际升级时如何避免这种情况。

2025-03-07 19:50:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.3-1.el9 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
2025-03-07T19:50:45.450364Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2025-03-07T19:50:45.794562Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.3) starting as process 1
2025-03-07T19:50:45.870761Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-03-07T19:50:51.814984Z 1 [ERROR] [MY-012592] [InnoDB] Operating system error number 2 in a file operation.
2025-03-07T19:50:51.815073Z 1 [ERROR] [MY-012593] [InnoDB] The error means the system cannot find the path specified.
2025-03-07T19:50:51.815110Z 1 [ERROR] [MY-012216] [InnoDB] Cannot open datafile for read-only: 'mysql.ibd' OS error: 71
mysqld: Can't open file: 'mysql.ibd' (errno: 0 - )
2025-03-07T19:50:52.210315Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2025-03-07T19:50:52.210893Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2025-03-07T19:50:52.210968Z 0 [ERROR] [MY-010119] [Server] Aborting
2025-03-07T19:50:52.214916Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.4.3)  MySQL Community Server - GPL.
2025-03-07T19:50:52.214957Z 0 [System] [MY-015016] [Server] MySQL Server - end.

mysql
  • 1 个回答
  • 53 Views
Martin Hope
Bacelo
Asked: 2025-03-03 20:54:54 +0800 CST

将一个字段的值提取/移动到另一个字段并合并

  • 7

我需要一些帮助......

在“帖子”表中,我确实有两列,我需要将一个字段的值提取/移动到另一个字段中,并将其与现有值合并。

Table name: posts
-------------------
post_title       | post_name
-------------------------------
Title            | ashgt-36548
Some title       | ahrgz-46587
Some other title | kkahe-55486

post_name 的值都采用相同的格式:5 个字母加上破折号“-”和 5 个数字(-DIGITS)。

所以我需要获得的是:

从 post_name 中删除“-DIGITS”并将其注入到 post_title 字段(合并值)的最开始(第一个位置),删除“-”并将 5 位数字括在括号中 [DIGITS]+SPACE

因此结果应如下所示:

Table name: posts
--------------------------------------
post_title               | post_name
--------------------------------------
[36548] Title            | ashgt
[46587] Some title       | ahrgz
[55486] Some other title | kkahe

到目前为止,我从 post_name 中删除破折号和数字的 SQL 语法是(我确实通过另一列“maschinen”进行选择):

UPDATE posts
SET `post_name`= mid(`post_name`, 1,length(`post_name`)-6)
WHERE `post_name` LIKE '%-%' AND `post_type` LIKE 'maschinen';

任何帮助都将非常有帮助 - 谢谢。

mysql
  • 1 个回答
  • 90 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve