我正在从事一个项目,我们需要在我们的 DBMS (MySQL) 中使用“事务日志”。我们已经切换到使用 InnoDB 以便将事务用于另一个需求。我想了解什么是交易日志。我已经搜索了一天多,包括阅读 MySQL 文档。也许我只是没有在寻找正确的关键字,我不确定。或者“交易日志”可能是不恰当的术语。
据我了解,数据库事务日志记录类似于日志文件系统,因为在将日志更改提交到文件系统之前对日志进行了更改。从我读到的内容来看,InnoDB 引擎听起来像是在将事务提交到磁盘之前将它们存储在某种日志中。这听起来准确吗?如果是这样,交易日志在哪里?是 ib_logfile0 和 ib_logfile1 吗?
最佳答案
你在这里绝对是在正确的轨道上。
每当 InnoDB 执行必须提交的事务时,它都是作为两阶段提交完成的。事务首先写入这些日志中。然后,他们从那里 promise 。
这在 MySQL 崩溃或服务器崩溃的情况下有很大帮助。
当您重新启动 mysql 时,ib_logfile0 和 ib_logfile1 中所有未提交的条目将作为 InnoDB 崩溃恢复的一部分进行重放,以使 InnoDB 进入和谐状态(这是 ACID Compliance 的一致和持久部分)
如果删除 ib_logfile0 和 ib_logfile1 并启动 mysql,这些文件包含的任何未提交的事务都会丢失。在崩溃恢复周期中,如果日志文件丢失,它们将根据 innodb_log_file_size 重新生成。设置。
请参阅MySQL Documentation for a detailed explanation of InnoDB .
@karatedog InnoDB 的 MVCC 部分发生在系统表空间内,更广为人知的是 ibdata1。记录事务开始之前的任何数据,以允许访问所需行的其他人在实现任何更新之前查看数据。这允许所谓的可重复读取。这属于 ACID 合规性的 I,我的意思是隔离。我在 DBA StackExchange 中写了关于事务隔离好、坏或丑陋的各种场景的帖子。
至于MyISAM,crash recovery is not automatic. It crashes rather easily .这就是 SQL 命令 REPAIR TABLE 存在的原因。这也是为什么 MySQL 实用程序 myisamchk 具有 -r 选项来为不在线的 MyISAM 表执行 REPAIR TABLE 的原因。
MariaDB and Aria一直在尝试制造一个安全存储引擎来替代 MyISAM。
关于MySQL 事务日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950246/
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
我正在使用ruby标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log
在运行Cucumber测试时,我得到(除了测试结果)大量调试/日志相关的输出形式:D,[2013-03-06T12:21:38.911829#49031]DEBUG--:SOAPrequest:D,[2013-03-06T12:21:38.911919#49031]DEBUG--:Pragma:no-cache,SOAPAction:"",Content-Type:text/xml;charset=UTF-8,Content-Length:1592W,[2013-03-06T12:21:38.912360#49031]WARN--:HTTPIexecutesHTTPPOSTusingt
我最近将我的http客户端切换到faraday,一切都按预期工作。我有以下代码来创建连接:@connection=Faraday.new(:url=>base_url)do|faraday|faraday.useCustim::Middlewarefaraday.request:url_encoded#form-encodePOSTparamsfaraday.request:jsonfaraday.response:json,:content_type=>/\bjson$/faraday.response:loggerfaraday.adapterFaraday.default_ada
保存成功后可以回滚吗?让我有一个带有属性名称、电子邮件等的用户模型。例如u=User.newu.name="test_name"u.email="test@email.com"u.save现在记录将成功保存在数据库中,之后我想回滚我的事务(不是销毁或删除)。有什么想法吗? 最佳答案 您可以通过交易来做到这一点,请参阅http://markdaggett.com/blog/2011/12/01/transactions-in-rails/例子:User.transactiondoUser.create(:username=>'Nemu