问题标签 [innodb]

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 投票
2 回答
34508 浏览

mysql - MySQL InnoDB 表损坏——如何修复?

在我的一个 InnoDB 表中执行条件DELETE操作时,显然需要在 ibdata1 中创建一些临时表,但硬盘已满,mysql 崩溃。在删除 ibdata1 文件(~30 GB)之前,我无法让它重新开始。

现在 mysql 再次启动,但数据库中的所有表似乎都已损坏(当我这样做时,REPAIR TABLE tablename EXTENDED我得到:

我正在使用innodb_file_per_table选项,以便我的所有 .frm 和 .ibd 文件(它们应该分别包含元数据和数据)都是完整的(具有与崩溃前相同的文件大小),位于目录中:/var/mysql/data/mydb/. 有谁知道我怎样才能让 mysql 再次用适当的数据识别这些表?

谢谢!

0 投票
4 回答
124 浏览

sql - 我应该为此使用 InnoDB 吗?

我正在开发一个个人 PHP/MySQL 应用程序,我在我的项目中遇到了这个特殊场景:

我有各种评论线程。这由两个表处理 - “评论”和“线程”,“评论”表中的每个评论都有一个“thread_id”属性,指示评论属于哪个线程。当用户删除评论线程时,目前我正在执行两个单独的 DELETE SQL 查询:

  1. 首先删除“评论”表中属于该线程的所有评论
  2. 然后,从“线程”表中清除线程记录。

我还有另一种情况,我需要将表单中的数据插入两个单独的表中。

我应该在这种情况下使用交易吗?如果是这样,当我需要执行多个 SQL 查询时使用事务是否是一般的经验法则?

0 投票
2 回答
3511 浏览

mysql - 分叉 MySQL INSERT INTO (InnoDB)

我正在尝试将大约 5 亿行垃圾数据插入数据库进行测试。现在我有一个 PHP 脚本循环遍历一个SELECT/INSERT内部的几个语句TRANSACTION ——显然这不是最好的解决方案。这些表是 InnoDB(行级锁定)。

我想知道我是否(正确)分叉了这个过程,这会加快这个INSERT过程吗?按照目前的速度,完成需要 140 个小时。我担心两件事:

  1. 如果INSERT语句必须获得写锁,那么它是否会使分叉变得无用,因为多个进程不能同时写入同一个表?

  2. 我正在使用SELECT...LAST_INSERT_ID()(在 a 内TRANSACTION)。当多个进程INSERT进入数据库时​​,这个逻辑会中断吗?我可以为每个分叉创建一个新的数据库连接,所以我希望这可以避免这个问题。

  3. 我应该使用多少个进程?查询本身很简单,我有一个普通的双核开发盒,有 2GB 内存。我将我的 InnoDB 设置为使用 8 个线程 ( innodb_thread_concurrency=8),但我不确定我是否应该使用 8 个进程,或者这是否是考虑匹配的正确方法。

谢谢你的帮助!

0 投票
9 回答
73091 浏览

sql - 使用 InnoDB 进行全文搜索

我正在开发一个大容量的 Web 应用程序,其中一部分是讨论帖子的 MySQL 数据库,需要平稳地增长到 20M+ 行。

我最初计划对表使用 MyISAM(用于内置全文搜索功能),但由于单个写入操作而导致整个表被锁定的想法让我感到沮丧。行级锁更有意义(更不用说 InnoDB 在处理大型表时的其他速度优势)。因此,出于这个原因,我非常坚定地使用 InnoDB。

问题是...... InnoDB 没有内置的全文搜索功能。

我应该使用第三方搜索系统吗?像Lucene(c++) / Sphinx一样?你们中的任何一个数据库忍者有什么建议/指导吗?LinkedIn 的zoie(基于 Lucene)看起来是目前最好的选择...围绕实时功能构建(这对我的应用程序非常关键。)我有点犹豫要不要提交但没有一些洞察力......

(仅供参考:将在 EC2 上使用高内存设备,使用 PHP 服务于前端)

0 投票
2 回答
92 浏览

mysql - 数据库目录消失

我的一位客户抱怨说他的数据库无缘无故消失了。我猜他一定是误删了数据库。但我只是想确保这不会自动发生。ibdata 和 iblog 文件在那里,但缺少目录(例如公司)。

0 投票
7 回答
1998 浏览

sql - 在 WHERE 中使用 MD5(URL) 而不是 DB 中的 URL

我有一个很大的 MySQL InnoDB 表(大约 100 万条记录,每周增加 300K),比如说博客文章。该表有一个带索引的 url 字段。

通过在其中添加新记录,我正在检查具有相同 url 的现有记录。以下是查询的样子:

目前系统每秒产生大约 10-20 个查询,并且这个数量将会增加。我正在考虑通过添加额外的字段来提高性能,即 URL 的 MD5 哈希。

因此它会更短且长度恒定,与 URL 字段相比,它更适合索引。你们怎么看。是否有意义?

我朋友的另一个建议是使用 CRC32 而不是 MD5,但我不确定 CRC32 的结果有多独特。让我知道你对这个角色的 CRC32 的看法。

更新:每行的 URL 列都是唯一的。

0 投票
3 回答
8118 浏览

sql - 使用 char 作为主键/外键是不是?

考虑有一堆表链接到“国家”或“货币”表。

为了使数据更易于阅读,我希望将带有国家代码(例如 US、GB、AU)和货币代码(USD、AUD)的 CHAR 字段作为这两个表中的每一个的主键,并且所有其他表都将使用这个 CHAR 作为一个外键。

数据库是带有innodb引擎的mysql。

它会导致性能问题吗?这是我应该避免的吗?

0 投票
2 回答
394 浏览

sql - 找出哪些表受触发器影响

在 MySQL(尤其是 InnoDB)中,有什么方法可以知道哪些表受到 CASCADE UPDATES/DELETES 或常规触发器的影响(更新/删除的行)?

0 投票
2 回答
1330 浏览

sql - 如何通过sql查询选择某个表的MySQL引擎名?

如何选择某些表的 MySQL 引擎名称。MyISAM 或 InnoDB。我们可以通过一个简单的 sql 查询来完成吗?

0 投票
6 回答
8902 浏览

sql - InnoDB 排序真的那么慢吗?

我的所有表都在 myISAM 中,但是当我长时间运行更新作业时,表级锁定开始扼杀我。我将我的主表转换为 InnoDB,现在我的许多查询需要 1 分钟以上才能完成,而它们在 myISAM 上几乎是瞬时完成的。他们通常卡在Sorting result台阶上。我做错什么了吗?

例如 :

现在大约需要 90 秒。这是描述:

现在看来,我的大量查询都停留在“排序结果”步骤中:

为什么这个简单的更新会停留 49 秒?

如果有帮助,这里是模式:

这些在我的 my.cnf