在一次后端服务升级发布中,需要对数据表增加字段,使用JPA Hibernate的自动更新表结构功能(spring.jpa.hibernate.ddl-auto=update)
在代码更新后,启动服务,按照以往的情况,会自动更新表结构,增加字段,但这次更新非常诡异的直接导致数据库不可用了,看日志,是一张很小的表,mariadb尝试分配一个非常大的空间,大约100GB,超过了db服务器的最大存储,db服务立刻不可用
查看jpa的增加字段语句非常简单
alter table users add column new_column varchar(255) null default '';
执行更新的时候,表的大小还不到5MB,非常小,记录也只有大约5000条
查看db日志,按照先后顺序,是3种
[ERROR] InnoDB: preallocating 103934853120 bytes for file ./mydbname/users.ibd failed with error 28
Disk is full writing '/rdsdbdata/log/binlog/mysql-bin-changelog.~rec~' (Errcode: 28 "No space left on device"). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space)
[ERROR] mysqld: Disk full (/rdsdbdata/tmp/#sql_4c44_0.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
Mariadb 版本 10.3.8,表存储引擎InnoDB
不知道是否有人遇到过类似这种情况,是否了解大概可能什么原因引起。