1.场景描述
有一个表有5G的数据量,执行insert into test1 select * from test2; 进行备份。执行了很久,刚开始数据文件在增长,后来发现show processlist 里面显示 rollback; 在做回滚操作。
原因是:innodb_log_buffer_size 日志缓冲区有有限的,在做插入时 mysql 会尽可能的将一个事务中的数据缓存到 日志缓存区中,当事务远远大于日志缓存区,而无法存下整个事务,就会回滚这个事务。
2.处理方法。
--备份成SQL语句文件,备份test数据库下test2表。
mysqldump -uroot -proot test test2 > test2.sql
3.重新导入SQL文件。
rename test2 to test1; --test2表重命名。
mysql -uroot -proot test <test2.sql
test数据库中导入test2.sql