问题标签 [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.
mysql - 如何检测 Mysql / innodb 中的死锁?
我知道在 Innodb 中使用事务时不可避免地会发生死锁,并且如果应用程序代码正确处理它们是无害的 - 正如手册所说,“再试一次”。
所以我想知道 - 你如何检测死锁?死锁是否会发出一些特殊的 mysql 错误号?如果这很重要,我正在使用 PHP 的 mysqli 扩展。
谢谢你。
编辑:找到解决方案,见评论
mysql - InnoDB 隐藏自动增量和双主
当创建一个没有主键的 InnoDB 表时,会创建一个“隐藏的”自动 inc 键并将其用于索引。有谁知道这把钥匙是否是多主安全的?
如果在多主数据库中设置自动 incs,标准的 mysql 方法是将 auto_increment_increment 和 auto_increment_offset 设置为适合您服务器数量的值。
InnoDB 的隐藏密钥是否尊重这些设置,或者它甚至需要这样做?
mysql - 是什么导致 MySQL 中带有 InnoDB 表的大量待处理读取/写入?我怎样才能防止它们?
我有一个 MySQL 数据库,它有大约 4 亿个 innodb_data_pending_reads 和 innodb_pending_writes。我的其他数据库始终处于或接近于零,所以我注意到了这个大的异常值。
什么会导致这种情况?
会造成哪些不良影响?
我该如何解决这种情况以降低这种情况?
sql - 使用 MySQL 将任务分配给工作进程的正确方法
我在 MySQL InnoDB 表中有一个巨大的 URL 列表,以及查询 MySQL 以获取一组要处理的 URL 的工作进程。URL 应立即标记为正在处理,以便其他工作进程不会因为开始处理相同的工作进程而浪费资源。
目前我首先这样做是为了获取一些 URL:
然后在代码中,我天真地遍历每个 URL 以将其标记为正在处理:
我非常清楚这是多么愚蠢和低效。更重要的是,不能保证另一个工作进程不会尝试在我的 UPDATE 中间获取列表。这样做的美丽方法是什么?我是否应该进行交易,如何?
mysql - 如何使用 phpMyAdmin 添加指向同一个表的外键?
我有一个现有的 InnoDB 表,它已经有指向不同表的外键。
但是当我尝试创建一个指向主索引的外键时,我得到一个错误(检查数据类型)。
该表是以 User_Id 作为主表的用户。
我想要一个外键 Manager_ID,它是 User_Id 的 FK。
两个 INT 两个 长度 10 无符号...
但我仍然收到数据检查错误...?
mysql - InnoDb 有时会工作,但有时不工作
我正在交换数据库以重写我的程序,其中一部分是编写转换脚本和创建新表的脚本。
我正在重命名表、更改索引并通常以某种方式更改大部分表,其中一部分是我正在从 MyISAM 更改为 InnoDB 表。
转换脚本完美无缺,但创建新表的脚本在特定点失败。
我收到错误 121,这是无法创建表时给出的错误。该脚本是从 Python 文件运行的,但我在我的 SQL 程序和 phpMyAdmin 中的原始脚本和表向导帮助程序表单中都遇到了相同的错误。
这些表都转换为 InnoDB 很好,所以我很难理解为什么它在创建新表时会出现问题。如果我取出 InnoDB 部分,则此查询有效。
有什么建议么?
mysql - 快速 InnoDB 恢复?
我正在开发大约 5GB 的 MySQL / InnoDB 数据库的开发副本。
我需要经常恢复它以测试更改脚本,并且使用 mysqldump 文件需要相当长的时间。该文件本身大约 900MB,加载大约需要一个小时。我已经删除了不重要表的数据插入,并完成了扩展插入等,但它仍然很慢。
有没有更快的方法来做到这一点?我正在考虑从 .../mysql/database-name、id_logfile# 和 ibdata1 复制数据库文件,并在我需要“重置”数据库时将它们复制回来,但这对 InnoDB 是否可行? ibdata 文件是一个数据库吗?我只看到一个,即使我在这个盒子上有多个 InnoBD 数据库。
谢谢!
mysql - 1114 (HY000): 表已满
我正在尝试InnoDB
使用简单的查询向表中添加一行:
但是当我尝试这个查询时,我得到以下信息:
ERROR 1114 (HY000): 表
zip_codes
已满
做一个
给了我 188,959 行,考虑到我在同一个数据库中有另一个包含 810,635 行的表,这似乎不算太多。
我对这个问题相当缺乏经验,InnoDB engine
也从未遇到过这个问题MyISAM
。这里有哪些潜在问题?
编辑:这只发生在向zip_codes
表中添加一行时。
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()
. 这个解决方案有什么注意事项吗?
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?)