原因
在线上部署更新项目过程中需要更改数据表结构,由于导入的sql文件不是最新的,使得原来的数据被旧数据覆盖,被覆盖的表为teacherCourse表。
在原来的数据库设计中并没有进行外键的设计,缺少数据完整性约束。
在此项目中,事先没有进行全量备份,没有开启binlog无法恢复原先的数据。
解决
万幸,被覆盖的表只是一张关系表,关联了teacher表和course表,而不是存储着元数据的表。通过SELECT查询相关表的数据,并且由于在磁盘的路径能够体现出记录信息(应用层设计为老师关联到课程时会建立老师-课程这类的文件夹),所以根据磁盘上作业的存储路径恢复了teacherCourse表里的数据。
总结与防护
- 数据库设计阶段,添加必要的外键,做好数据完整性约束。
- 开启binlog,对数据进行备份。
- 开启脚本定时进行全量备份。
- 不要将root权限交给组长之外的成员,在MySQL中设置相应权限的用户。