mysql如何快速回滚

mysql如何快速回滚,第1张

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

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

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

简单的来说,我给你举两个例子:

1、对数据库做了ddl的 *** 作,但是没有进行提交 *** 作,此时就会提示受影响行数,如果最后没有进行提交 *** 作,数据就会回滚。

2、对数据进行 *** 作时,如果数据报错,如批量插入数据,其中有一条无法插入,那么此次的 *** 作就会被视为无效,数据库就会回滚,以保证数据的完整性。

3、在程序开发时,是以事务为原子性 *** 作的,此时可能因为一个业务 *** 作会对数据库的多个表进行增删改,如果中间出现问题,那么对已 *** 作部分的数据怎么办呢?

数据库的回滚就可以解决。

目前可采取两种方式:

第一种方式,直接对RDS实例进行库备份回滚 *** 作

第二种方式,针对备份点生成的临时实例,对临时实例进行库备份,回滚到RDS实例

第一种方式:直接对RDS实例进行库备份回滚

第一步:在云服务器(linux系统)上安装MySQL客户端工具

1)下载mysql客户端工具

执行: wget http //dev mysql com/get/archives/mysql-5.6/MySQL-client-5.6.15-1.linux_glibc2.5.x86_64.rpm

2)安装mysql客户端工具

执行:rpm -ivh MySQL-client-5.6.15-1.linux_glibc2.5.x86_64.rpm

或者您可以直接在系统内使用yum install mysql进行安装MySQL客户端。

第二步:对RDS实例执行库备份 *** 作

执行命令完成库备份:mysqldump -h xxx.mysql.aliyun.com -u xxx -P 3306 -p --opt --default-character-set=utf8 --triggers --hex-blob db_name >/tmp/db_name.sql

(点击查看全图)

输入密码后,mysqldump将进行备份 *** 作并自动完成。

检测备份生成sql文件,执行 ll xx.sql

第三步:针对RDS实例执行回滚 *** 作

根据备份文件,执行以下命令进行RDS实例回滚 *** 作

mysql -h xxxxxx.mysql.rds.aliyuncs.com -u user_name -P 3306 -p database_name

(点击查看全图)

输入密码后,将完成回滚 *** 作

第二种方式:针对备份点生成的临时实例,对临时实例进行库备份,回滚到RDS实例

第一步:在云服务器(linux系统)上安装mysql客户端工具

1)下载mysql客户端工具

执行: wget http://cdn.mysql.com/Downloads/MySQL-5.5/MySQL-client-5.5.32-2.linux2.6.x86_64.rpm

2)安装mysql客户端工具

执行:rpm -ivh MySQL-client-5.5.32-2.linux2.6.x86_64.rpm

第二步:在阿里云RDS控制台中创建临时实例

点击RDS控制台“备份恢复”页面,选择一个备份集创建临时实例,如下图

(点击查看全图)

每个RDS实例可以创建一个临时实例,临时实例有只读权限,并且继承备份点的帐号和密码以及内外网状态,创建成功后48个小时内有效

创建临时实例成功后,在临时实例列表中可以查看临时实例信息,如:临时实例连接字符串,端口号,访问临时实例的帐号名(创建备份点时RDS实例中存在的帐号),网络类型等等。

(点击查看全图)

第三步:针对子实例进行mysql按库备份 *** 作

执行以下命令对子实例进行库备份 *** 作

mysqldump -h xxx.mysql.aliyun.com -u xxx -P 3306 -p --opt --default-character-set=utf8 --triggers --hex-blob db_name >/tmp/db_name.sql

(点击查看全图)

输入密码后,完成子实例的备份 *** 作。

注:上图红色圈内应输入子实例的连接地址,用户名以及数据库名

第四步:针对RDS实例进行回滚 *** 作

执行以下命令对RDS实例进行回滚 *** 作

mysql-h xxxxxx.mysql.rds.aliyuncs.com -u xxxx -P 3306 -p database_name

(点击查看全图)

输入密码后,完成RDS实例的回滚 *** 作

注:上图红色圈内应输入RDS实例连接地址,用户名以及数据库名


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9987133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存