mysql中对sql脚本增加回滚脚本(mysql sql脚本)

mysql 可以对执行成功的SQL语句进行回滚吗

mysql命令行下怎样实现数据的回滚操作

在MySQL有时执行了错误的update或者delete时导致大量数据错误恢复的办法。执行时没有开启事务,也没有对数据进行。这时就需要使用到sqlbinlog工具。

sqlbinlog需要开启,具体的打开方法就不说了。

使用sqlbinlog会产生bin文件,恢复就需要用到这些文件。文件中记录着数据库的所有操作。(此方法的操作是将数据库之前所执行的语句重新执行一次,以达到恢复效果)

具体步骤:1,先找到bin文件,一般都是在mysql的data文件夹中,结尾以.00000X等形式结束。

2,寻找需要还原的时间点 使用语句 mysqlbinlog 文件名 例(MySQLbinlog xxbin.000001)来查看内容,然后找到对应的具体时间

3,导出sql语句,使用语句 mysqlbinlog 文件名sql文件路径 例(mysqlbinlog xxxbin,00001a.sql | mysql -u root -p )

如果需要指定时间导出--start--date -stop='' --date='' 来导出指定时间执行的语句例(sqlbinlog --start-stop='2015-11-22 10:00:00' xxbin.000001a.sql | mysql -u root -p )这句意思是导出在2015-11-22 10点之前的语句,反之start是导出时间之后的。 start和stop可以同时使用。

如果存在多个bin文件,则按照需要导出。

4,使用mysql将导出的语句执行一次。

求救数据库回滚脚本怎么写

CREATE PROC [dbo].[notice_Delete] --- 同时删除该通知书和对应的节点

@tbl VARCHAR(30),

@pid INT

AS

BEGIN

DECLARE @tblname VARCHAR(30) ;

DECLARE @sql VARCHAR(1000) ;

SET @tblname=@tbl

SET @sql='delete ' + @tblname + ' where id='

+ CONVERT(VARCHAR(10), @pid)

BEGIN TRAN --开始事务

EXEC ( @sql

)

IF ( @@rowcount=0 ) --执行结果影响行数为0

BEGIN

ROLLBACK TRAN --回滚

END

ELSE

BEGIN

DELETE FROM tbl_treenotice

WHERE purposeid=@pid

IF ( @@rowcount=0 ) --执行结果影响行数为0

BEGIN

ROLLBACK TRAN --回滚

END

ELSE

BEGIN

COMMIT TRAN --提交事务

END

END

END

mysql数据库脚本事务如何控制?

解决方案之一,就是把你的所有操作放在一个连接中执行完毕。mysql

-h${HOSTNAME}

-P${PORT}

-u${USERNAME}

-p${PASSWORD}

${DBNAME}

x.sqlset

AUTOCOMMIT=0;start

transaction;在X.sql

中你可以写入语句。中间部分是一些数据库的操作,如移表,删除等commit;

mysql如何快速回滚

我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。

仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。

两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。

39人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册