Mysql的binlog为什么不支持奔溃恢复

先说说当Mysql只有binlog日志时,启动的时候是怎样恢复数据的?
对于一个事务,只有两种状态,commit和prepared,所以启动的时候,Mysql会去检查binlog中事务的状态,对于commit状态的事务,不用处理,因为它认为数据已经写盘了;而对于prepared状态的事务,自然Mysql就要回滚该事务,操作就是修改相应的页了。

明白上面的原理后,我们说说下面的场景:
当事务1和事务2并发运行,事务1已经写了binlog并且提交了,其实对于一个事务,binlog是先写到binlog cache的,客户端发出commit命令的时候才会将这个binlog cache写盘,可以认为;事务2收到客户端的commit命令后,写binlog,但是写完之后Mysql发生了异常重启,这里,我想说:binlog是基于事务来记录日志,而不是事务日志,我目前的理解是如果将sync_binlog=1设置为1,表示每次事务提交时,才会将binlog cache写盘,Mysql发生crashho

MySQL根据binlog进行恢复是指通过MySQL日志文件(即binlog)来恢复数据。 在MySQL中,binlog是一种二进制日志文件,用于记录数据库的修改操作。它记录了数据库中执行的所有写操作,如插入、更新和删除等。 要根据binlog进行恢复,需要按照以下步骤进行: 1. 首先,确认MySQLbinlog模式是否为“ROW”模式。可以通过在MySQL的配置文件(通常是my.cnf或my.ini)中查看或修改binlog_format参数来确认。 2. 确认MySQLbinlog日志是否启用。可以使用如下命令查看: SHOW VARIABLES LIKE 'log_bin'; 如果结果为ON,则表示binlog日志已启用。如果结果为OFF,则需要先启用它。可以在MySQL的配置文件中设置log_bin参数为ON,然后重启MySQL服务。 3. 检查并定位出需要恢复的数据库备份文件以及最近一次数据库崩溃之前的binlog文件。备份文件可以使用MySQLmysqldump命令进行创建,binlog文件可以在MySQL的数据目录中找到。 4. 使用mysqlbinlog工具来解析binlog文件。该工具可以将binlog文件输出为可读的SQL语句。 例如,要解析名为mysql-bin.000001的binlog文件,可以使用以下命令: mysqlbinlog mysql-bin.000001 > binlog.sql 5. 使用解析后的SQL语句文件来还原数据。可以通过以下命令将SQL语句导入到MySQL中: mysql -u用户名 -p密码 < binlog.sql 其中,“用户名”和“密码”是连接MySQL所需的凭证。 通过以上步骤,就可以根据binlog文件来恢复MySQL数据库。需要注意的是,binlog文件只记录了数据库的写操作,因此无法恢复数据库的结构和读操作。如果需要完全恢复数据库,还需要使用其他备份文件和恢复方法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值