我正在对MySQL数据库进行更新,其中包括制作ALTER TABLE语句的MySQL脚本,以及DIU句子(删除,插入,更新)。
这个想法是进行事务性更新,所以如果一个句子失败,就会进行回滚,但是如果我把http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html中指定的ALTER TABLE语句或其他内容设置为隐式提交,那么我就不能进行完全回滚,因为指示的操作仍然被提交。
我尝试使用mysqldump进行备份,在出现错误时使用(mysql将其返回到零),但它太慢而且也可能失败。
我该怎么办?我需要这样做以确保未来的更新是安全的而不是太慢,因为数据库包含30-100 GB的数据。
答案 0 :(得分:1)
转储和重新加载可能是您的最佳选择,而不是alter table
。
从mysql提示符或从数据库脚本:
select * from mydb.myt INTO OUTFILE '/var/lib/mysql/mydb.myt.out';
{MYT {1}}
drop table mydb.myt;
create table
检查出来:
http://everythingmysql.ning.com/profiles/blogs/whats-faster-than-alter
我认为它为“改变替代品”提供了很好的指导。
答案 1 :(得分:0)
查看pt-online-schema更改。
您可以将其配置为在完成在线ALTER后保留“旧”表格。旧表将具有下划线前缀。如果发生错误,请删除您更改的表,并将OLD表重命名为原始表。如果一切正常,那么只需删除旧表即可。
http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html