1

我正在对 MySQL 数据库进行更新,其中包括制作 ALTER TABLE 语句以及 DIU 语句(删除、插入、更新)的 MySQL 脚本。

这个想法是进行事务更新,所以如果一个句子失败,就会进行回滚,但是如果我把 ALTER TABLE 句子或其他在http://dev.mysql.com/doc/refman/5.0/en/implicit中指定-commit.html进行了隐式提交,因此我无法进行完全回滚,因为指示的操作仍然提交。

我尝试使用 mysqldump 进行备份,以防出错(mysql返回不同的零),但它太慢并且也可能失败。

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

4

2 回答 2

1

dump 和 reload 可能是您最好的选择,而不是alter table.

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

select * from mydb.myt INTO OUTFILE '/var/lib/mysql/mydb.myt.out';
drop table mydb.myt;
create table
我的T(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

我认为它为“替代方案”提供了很好的指导。

于 2012-08-08T03:53:11.657 回答
0

看看 pt-online-schema 的变化。

您可以将其配置为在在线 ALTER 完成后保留“旧”表。旧表将有一个下划线前缀。如果发生坏事,请删除您更改的表并将旧表重命名为原始表。如果一切正常,那么只需删除 OLD 表。

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

于 2012-08-08T06:21:42.180 回答