MySQL 事务日志

2024-03-26

我正在开发一个项目,要求我们在 DBMS (MySQL) 中使用“事务日志”。我们已经改用 InnoDB,以便使用事务来满足另一个需求。我想了解什么是交易日志。我已经搜索了一天多了,包括阅读 MySQL 文档。也许我只是没有寻找正确的关键词,我不确定。或者“交易日志”可能是一个不恰当的术语。

据我了解,数据库事务日志类似于日志文件系统,因为日志更改是在提交到文件系统之前进行的。据我所知,听起来 InnoDB 引擎在将事务提交到磁盘之前将其存储在某种日志中。这听起来准确吗?如果有,交易日志在哪里?是 ib_logfile0 和 ib_logfile1 吗?


您绝对走在正确的道路上。

每当 InnoDB 执行必须提交的事务时,都会以两阶段提交的方式完成。事务首先写入这些日志中。然后,他们从那里开始承诺。

这在 MySQL 崩溃或服务器崩溃时有很大帮助。

当您重新启动 mysql 时,ib_logfile0 和 ib_logfile1 中的所有未提交条目都会作为 InnoDB 崩溃恢复的一部分重播,以使 InnoDB 达到和谐状态(这是一致和持久的部分)酸性合规性 http://en.wikipedia.org/wiki/ACID)

如果删除 ib_logfile0 和 ib_logfile1 并启动 mysql,这些文件包含的任何未提交事务都会丢失。在崩溃恢复周期中,如果日志文件丢失,则会根据日志文件重新生成innodb_log_file_size http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_log_file_size环境。

请参阅MySQL文档对InnoDB的详细解释 http://dev.mysql.com/doc/refman/5.5/en/innodb-storage-engine.html.

@karateog InnoDB 的 MVCC 部分发生在系统表空间中,更广为人知的名称是 ibdata1。记录事务开始之前出现的任何数据,以允许访问所需行的其他人在施加任何更新之前查看数据。这允许所谓的可重复读取。这属于 ACID 合规性的 I 范围,我的意思是隔离。我在 DBA StackExchange 中写了关于事务隔离好、坏或丑陋的各种场景的帖子。

  • 先读后写事务 https://dba.stackexchange.com/a/14058/877
  • 这两个查询如果依次执行会不会导致死锁? https://dba.stackexchange.com/a/3224/877
  • raid 5适合安装mysql吗? https://dba.stackexchange.com/a/13036/877

至于MyISAM,崩溃恢复不是自动的。它很容易崩溃 https://dba.stackexchange.com/a/15079/877。这就是为什么 SQL 命令REPAIR TABLE存在。这也是 MySQL 实用程序的原因myisamchk-r执行选项REPAIR TABLE对于不在线的 MyISAM 表。

MariaDB 和 Aria http://kb.askmonty.org/en/aria-faq人们一直在尝试制作一个崩溃安全的存储引擎来替代 MyISAM。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 事务日志 的相关文章

  • 测验程序的 MySql 数据库设计

    我目前正在开发一个项目 主要是创建一个测验应用程序 它将能够进行包含 10 到 20 个问题的多项选择题或简答题的测验 它需要能够根据正确答案检查用户的答案 然后对用户的答案进行评分 稍后 我可能会实现一个后端功能来在线创建测验 但现在我将
  • MySQL:记录之间的平均间隔

    假设这张表 id date 1 2010 12 12 2 2010 12 13 3 2010 12 18 4 2010 12 22 5 2010 12 23 如何仅使用 MySQL 查询找到这些日期之间的平均间隔 例如 此表上的计算将是 2
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • django - 设置中带有数据库 url 的 MySQL 严格模式

    我在设置中使用数据库 URL 字符串 例如 DATABASES default mysql root localhost 3306 mydb 当我迁移时 我收到此警告 MySQL Strict Mode is not set for dat
  • 捕获动态表中 HTML 元素的值

    我有从数据库生成的以下动态表
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 datagridview 选定的行更新 mysql 数据库

    我有一个 datagridview 它在表单加载事件上加载 mysql 数据库表 t pi clients 并且我有另一个选项卡 其中包含 t pi client 相应列的文本框 它能够从 fullrowselect 模式获取数据到这些文本
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • Java MYSQL/JDBC 查询从缓存的连接返回过时的数据

    我一直在 Stackoverflow 中寻找答案 但似乎找不到不涉及 Hibernate 或其他数据库包装器的答案 我直接通过 Tomcat 6 Java EE 应用程序中的 MYSQL 5 18 JDBC 驱动程序使用 JDBC 我正在缓
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 是否可以在MYSQL中动态选择列名,其中列名是N个已知值中的1?

    我担心答案会是直接的 不 但我想知道是否可以在 MySQL 中执行如下操作 SELECT title label name FROM table 即选择单个列 可以称为title label or name from table 原因是 查
  • 有关 payment_status 的帮助 PayPal 已退款 已撤销 部分退款 ION

    如果会员订阅和 或支付一次付款并且他们请求退款 撤销或部分退款 下面的脚本是否可以与通过 IPN 发送的 IPN 消息一起使用 if payment status Refunded payment status Reversed payme
  • MySQL - 查询合并具有相同 id 的行并保留该 id 的所有条目但作为一条记录

    我一直在处理本地保存在 wamp 服务器上的 mysql 数据库中的表 我正在使用 wamp 中的 phpmyadmin 区域来运行查询 我正在尝试获取数据来执行以下操作 谁能帮我制作一张包含许多植物记录的表格 植物可以有多个名称 表格将其
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚
  • 每个搜索词显示一行,如果未找到则替换默认值

    Query SELECT product id name FROM product WHERE barcode in 681027 8901030349379 679046 679047 679082 679228 679230 67923
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • 使用@Transactional注解批量插入

    在我的 Spring 应用程序中 我想一次性在数据库中插入近 1500 条记录 我在后端使用 Spring 4 X 和普通休眠 在我的服务层中 我使用 Transactional 注释 现在 在某个时间点之后插入记录时 我遇到内存不足错误
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • CakePHP - 获取上次运行的查询

    我想获取 CakePHP 运行的最后一个查询 我无法在 core php 中打开调试 也无法在本地运行代码 我需要一种方法来获取最后一个 sql 查询并将其记录到错误日志中而不影响实时站点 该查询失败但正在运行 像这样的事情会很棒 this

随机推荐

  • 使用 std::sort 对二维数组进行排序(基于列)

    我正在运行一个测试 显示按列对二维数组进行排序的好处 方法是将数据提取到单个数组中并对该数组进行排序 然后将其复制回列 我想运行 std sort 作为每次运行的排序算法 我试图弄清楚如何首先在适当的位置运行循环 然后再进行二维数组的复制
  • 保存为 PDF 时,geom_raster 出现“污点”

    当我保存使用的 ggplot 时geom raster 瓷砖 被涂抹 了 如果我使用的话结果是一样的ggsave or pdf 我没有这个问题geom tile or image 我使用 RStudio X11 或 PNG 图形设备时没有出
  • 将变量从 Activity 传递到自定义视图类

    我正在测试使用将音频绘制到画布中canvas drawLine 方法 我能够在画布上进行静态绘制 基本上我有一个测试应用程序 它有两个按钮 开始 和 停止 和一个画布 我试图在其中绘制从 FFT 获得的音频频率 当我按下开始按钮时 它开始使
  • 比较两个通用列表

    你好 我如何比较两个Lists 第一种类型ICollections
  • 从功能区按钮触发报告

    我有几个自定义报告 我希望能够向功能区添加触发它们的按钮 是否可以 如果是这样 任何例子都会很棒 提前致谢 要从功能区按钮运行报告 您需要创建一个 js 文件 其中包含将从按钮调用的函数 你需要 4 样东西 rdlName rdl 文件名
  • OS X 上的 GitHub 客户端提交失败(“无法添加文件...)

    我正在尝试从 Mac OS X Mavericks 计算机上的 GitHub 客户端提交对代码所做的更改 像往常一样 我向我的项目添加了一个新包 这是一个 Laravel 项目 我添加了 Rocketeer 包 我还做了一些配置更改 我收到
  • 如何相对于另一个轴定位图中的轴?

    在 MATLAB 中布置图窗时 输入axis equal确保无论发生什么figure尺寸 即axes永远是正方形 我当前的问题是我想向该图中添加第二个轴 通常 这没有问题 我只想输入axes x1 y1 x2 y2 并且将添加一个新的正方形
  • 在多个 .env 文件之间切换,例如 .env.development 和 node.js

    我想为每种模式 开发 生产等 使用单独的 env 文件 在处理我的 vue js 项目时 我可以使用类似的文件 env development or env production为同一环境键获取不同的值 例如 在 env developme
  • 附加元素后 CSS 过渡不起作用

    我遇到了 CSS 转换问题 在尝试其他操作之前 我想了解问题所在 一个容器中有 3 个盒子和一个 下一步 按钮 目标是让下一个框顶部出现在顶部 并在按下 下一个 按钮时淡入 通过将框附加到容器来将其定位在顶部 以便将其添加为最后一个元素 从
  • 如何使用ClearCase注释子命令?

    我试图找出如何获取代码历史记录报告 在其中获取每个代码行的文件版本 我不需要为每个代码行获取多行 只有一个 annotate 子命令有很多参数 我找不到适合该目的的参数 你知道如何得到它吗 非常感谢 每个代码行的文件版本 这几乎看起来像最后
  • 对于非 OK 响应,使用 IHttpActionResult 返回内容

    对于从 Web API 2 控制器返回 如果响应正常 状态 200 我可以返回响应内容 如下所示 public IHttpActionResult Get string myResult return Ok myResult 如果可能的话
  • Oracle 错误:池连接请求超时

    我将 Oracle12c 与用 C 编写的应用程序一起使用 并使用 Oracle ManagedDataAccess dll 来处理数据库连接 我们的产品在运行多年后偶尔会抛出此异常 Oracle ManagedDataAccess Cli
  • 如何在C++中通过位运算找到素数?

    如何在C 中通过位运算找到素数 我认为做到这一点的方法是不要像我们通常那样将位集视为其数字表示 而是将其视为数字列表 所以位集 1111 代表数字 1 2 3 和 4 现在 如果我们说 1 代表素数 0 代表非素数 我们可以如下制作一个筛子
  • 如何解码非关键ASN1数据?

    是否可以使用 crypto 库来解码字节数组中的任意 ASN1 数据 其中有几个序列和整数 ash h 包含所有以 BufferedTransformation 作为输入的方法 但该类是不同密码和哈希的接口 这似乎与我的简单情况根本无关 我
  • 升级到 Angular 9 后,无法在类型文件中找到变量

    我有一个对外部日志记录组件的引用 在 js 文件中引用 我已在类型文件中定义了该组件 打字 d ts declare var LogglyTracker 我已将我的角度应用程序从版本 8 升级到版本 9 现在当我运行时ng build 我收
  • Django 模板名称冲突[重复]

    这个问题在这里已经有答案了 可能的重复 Django 视图 首先从调用应用程序的目录加载模板 https stackoverflow com questions 3092865 django view load template from
  • R 传单缩放控制选项

    我正在使用传单在 R 中构建地图工具 我想将缩放限制在某个区域 但是setMaxBounds功能似乎没有任何效果 library dplyr library leaflet library tigris ohio map lt leafle
  • 如何在 MongoDB 中组织多对多关系

    我有两个表 集合 用户和组 用户可以是任意数量的组的成员 并且用户也可以是任意数量的组的所有者 在关系数据库中 我可能有第三个表 名为 UserGroups 其中包含 UserID 列 GroupID 列和 IsOwner 列 我正在使用
  • 如何编写一个接受借用或拥有元素的“Vec”的函数?

    在 Rust 中 如何将拥有的对象向量传递给需要借用对象向量的函数 我是创建新向量的唯一选择吗 对于函数签名的最佳实践是什么 在该函数中我关心结构体所包含的泛型的类型 但不关心它是否被借用 示例情况 fn using vec of borr
  • MySQL 事务日志

    我正在开发一个项目 要求我们在 DBMS MySQL 中使用 事务日志 我们已经改用 InnoDB 以便使用事务来满足另一个需求 我想了解什么是交易日志 我已经搜索了一天多了 包括阅读 MySQL 文档 也许我只是没有寻找正确的关键词 我不