问题标签 [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 投票
7 回答
50659 浏览

mysql - 如何检测 Mysql / innodb 中的死锁?

我知道在 Innodb 中使用事务时不可避免地会发生死锁,并且如果应用程序代码正确处理它们是无害的 - 正如手册所说,“再试一次”。

所以我想知道 - 你如何检测死锁?死锁是否会发出一些特殊的 mysql 错误号?如果这很重要,我正在使用 PHP 的 mysqli 扩展。

谢谢你。

编辑:找到解决方案,见评论

0 投票
1 回答
523 浏览

mysql - InnoDB 隐藏自动增量和双主

当创建一个没有主键的 InnoDB 表时,会创建一个“隐藏的”自动 inc 键并将其用于索引。有谁知道这把钥匙是否是多主安全的?

如果在多主数据库中设置自动 incs,标准的 mysql 方法是将 auto_increment_increment 和 auto_increment_offset 设置为适合您服务器数量的值。

InnoDB 的隐藏密钥是否尊重这些设置,或者它甚至需要这样做?

0 投票
1 回答
866 浏览

mysql - 是什么导致 MySQL 中带有 InnoDB 表的大量待处理读取/写入?我怎样才能防止它们?

我有一个 MySQL 数据库,它有大约 4 亿个 innodb_data_pending_reads 和 innodb_pending_writes。我的其他数据库始终处于或接近于零,所以我注意到了这个大的异常值。

什么会导致这种情况?

会造成哪些不良影响?

我该如何解决这种情况以降低这种情况?

0 投票
2 回答
315 浏览

sql - 使用 MySQL 将任务分配给工作进程的正确方法

我在 MySQL InnoDB 表中有一个巨大的 URL 列表,以及查询 MySQL 以获取一组要处理的 URL 的工作进程。URL 应立即标记为正在处理,以便其他工作进程不会因为开始处理相同的工作进程而浪费资源。

目前我首先这样做是为了获取一些 URL:

然后在代码中,我天真地遍历每个 URL 以将其标记为正在处理:

我非常清楚这是多么愚蠢和低效。更重要的是,不能保证另一个工作进程不会尝试在我的 UPDATE 中间获取列表。这样做的美丽方法是什么?我是否应该进行交易,如何?

0 投票
1 回答
9635 浏览

mysql - 如何使用 phpMyAdmin 添加指向同一个表的外键?

我有一个现有的 InnoDB 表,它已经有指向不同表的外键。

但是当我尝试创建一个指向主索引的外键时,我得到一个错误(检查数据类型)。

该表是以 User_Id 作为主表的用户。

我想要一个外键 Manager_ID,它是 User_Id 的 FK。

两个 INT 两个 长度 10 无符号...

但我仍然收到数据检查错误...?

0 投票
2 回答
94 浏览

mysql - InnoDb 有时会工作,但有时不工作

我正在交换数据库以重写我的程序,其中一部分是编写转换脚本和创建新表的脚本。

我正在重命名表、更改索引并通常以某种方式更改大部分表,其中一部分是我正在从 MyISAM 更改为 InnoDB 表。

转换脚本完美无缺,但创建新表的脚本在特定点失败。

我收到错误 121,这是无法创建表时给出的错误。该脚本是从 Python 文件运行的,但我在我的 SQL 程序和 phpMyAdmin 中的原始脚本和表向导帮助程序表单中都遇到了相同的错误。

这些表都转换为 InnoDB 很好,所以我很难理解为什么它在创建新表时会出现问题。如果我取出 InnoDB 部分,则此查询有效。

有什么建议么?

0 投票
5 回答
2089 浏览

mysql - 快速 InnoDB 恢复?

我正在开发大约 5GB 的 MySQL / InnoDB 数据库的开发副本。

我需要经常恢复它以测试更改脚本,并且使用 mysqldump 文件需要相当长的时间。该文件本身大约 900MB,加载大约需要一个小时。我已经删除了不重要表的数据插入,并完成了扩展插入等,但它仍然很慢。

有没有更快的方法来做到这一点?我正在考虑从 .../mysql/database-name、id_logfile# 和 ibdata1 复制数据库文件,并在我需要“重置”数据库时将它们复制回来,但这对 InnoDB 是否可行? ibdata 文件是一个数据库吗?我只看到一个,即使我在这个盒子上有多个 InnoBD 数据库。

谢谢!

0 投票
23 回答
264890 浏览

mysql - 1114 (HY000): 表已满

我正在尝试InnoDB使用简单的查询向表中添加一行:

但是当我尝试这个查询时,我得到以下信息:

ERROR 1114 (HY000): 表zip_codes已满

做一个

给了我 188,959 行,考虑到我在同一个数据库中有另一个包含 810,635 行的表,这似乎不算太多。

我对这个问题相当缺乏经验,InnoDB engine也从未遇到过这个问题MyISAM。这里有哪些潜在问题?

编辑:这只发生在向zip_codes表中添加一行时。

0 投票
1 回答
554 浏览

mysql - MySQL中的作用域/复合代理键

这是我当前数据库的摘录(更改了表名以便于理解):

Whereid总是一个代理键,用auto_increment.

我想让代理键Pet.id被“限定”Pet.ownerFK或换句话说,有一个复合键[ownerFk, id]作为我的最小键。我希望表的行为如下:

我目前正在使用MyISAM 的此功能,其中“您可以AUTO_INCREMENT在多列索引中的辅助列上指定。在这种情况下,该AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。当您要将数据放入有序组时,这很有用。”

但是,由于各种(也许是显而易见的)原因,我想从 MyISAM 切换到 InnoDB,因为我需要在某些地方进行事务。

有什么方法可以用InnoDB达到这个效果吗?

我发现了一些关于这个问题的帖子,其中许多建议在插入之前对表进行写锁定。我对此不是很熟悉,但是对于这个来说,这不会是一个表写锁的大修吗?如果可能的话,我宁愿考虑使用写安全事务(我以前从未做过)——将 aOwner.current_pet_counter作为辅助字段。

所以另一个可接受的解决方案是......

实际上,我不需要“作用域”ID 成为实际密钥的一部分。我实际的数据库设计使用了一个单独的“永久链接”表,它使用了这个“功能”。我目前使用它作为丢失交易的解决方法。我想到了以下替代方案:

我还没有在 MySQL 中使用过 transactions/transactionvars,所以我不知道这个是否会有严重的问题。 注意:我不想重复使用id曾经给宠物的 s。这就是为什么我不使用MAX(). 这个解决方案有什么注意事项吗?

0 投票
2 回答
876 浏览

mysql - 将 php4/mysql4 迁移到 php5/mysql5:切换到 InnoDB?

我有一个旧的 Web 应用程序 php4/mysql4(MyISAM,db 包含一些 cms、一些用户数据、一些日历应用程序)。现在我要迁移到一个带有 php5/mysql5 的新服务器。

迁移 mysql 数据库时是否应该更改为 InnoDB?- 预期的优势/劣势/风险?- MyISAM 是被弃用还是有一天会被弃用?或者我可以安全地保留它吗?- 我听说MyISAM 容易损坏,InnoDB 呢,它抗崩溃吗?- InnoDB 是否更容易或更安全地备份和恢复?

当我改变(破坏 SQL 查询)或破坏逻辑(因为改变了锁定机制)时,它会破坏我的代码吗?如果是这样,典型的场景是什么?

(对于 php 问题,我创建了一个不同的问题:Migrating php4/mysql4 to php5/mysql5: expected php issues?