首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的事务性ALTER语句

问MySQL中的事务性ALTER语句
EN

Stack Overflow用户
提问于 2012-08-08 11:36:15
回答 2查看 1.2K关注 0票数 1

我正在对MySQL数据库进行更新,其中包括生成ALTER TABLE语句以及DIU语句(delete、insert、update)的MySQL脚本。

其思想是进行事务性更新,因此如果语句失败,则会进行回滚,但是如果我将ALTER TABLE语句或其他在http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html中指定的语句放在一起,则会进行隐式提交,因此不能进行完整的回滚,因为指定的操作仍然是提交的。

我试图使用mysqldump创建一个备份,以便在发生错误时使用(mysql将distinct返回为零),但它太慢了,而且也可能失败。

我能做什么?我需要这样做,以确保将来的更新是安全的,并且不会太慢,因为数据库包含30-100 GB的数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-08 11:53:12

转储和重新加载可能是替代alter table的最佳选择。

从mysql提示符或数据库脚本:

select * from mydb.myt INTO OUTFILE '/var/lib/mysql/mydb.myt.out';

drop table mydb.myt;

create tablemyt(your table ddl here)

load data infile '/var/lib/mysql/mydb.myt.out' INTO TABLE mydb.myt;

看看这个:

http://everythingmysql.ning.com/profiles/blogs/whats-faster-than-alter

我认为它为"alternatives to alter“提供了很好的指导。

票数 1
EN

Stack Overflow用户

发布于 2012-08-08 14:21:42

查看pt-online-schema change。

您可以将其配置为在联机ALTER完成后保留'old‘表。旧的表格将有一个下划线前缀。如果发生了不好的事情,请删除您更改过的表,并将旧的表重命名为原始表。如果一切正常,那么只需删除旧的表。

http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11857329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档