突然有一天,发现测试环境的MySQL数据库挂掉了。登到数据库发现自己的数据库被删了,多了一个莫名其妙的数据库: A____Z____RECOVER____DATA, 里面有张README的表
好家伙,我被勒索了。我一个测试库,你要公布就公布吧。关键不能再被他删除,而且还要继续恢复之前的数据。
为了本地调试和测试方便,我们数据库的3306端口是暴露在公网环境,这应该是万恶之源,赶紧把端口关闭。
另外他把数据库账号的权限改了,没有了删除和创建数据库的权限,要么我重装数据库,然后重新建账号,然后......太麻烦了。可以从生产库中把mysql库的数据库文件覆盖到测试库,这样就还原了账户信息了。
把这三个文件覆盖掉(默认路径: /var/lib/mysql/mysql):
user.frm
user.MYD
user.MYI
再用生产的账号就可以登录和修改数据库了。接下来就是找一个之前的备份,重新导入到数据库中,如果之前没有备份,那就比较麻烦,需要找各种还原工具,去找到数据文件。
总结一下:
1. 不必要的端口不要对公网开放
2. 密码设置需有一定的策略,不能太简单
3. 数据库用户权限,需要做隔离,DDL语句操作需要限制IP,比如只允许本机。毕竟大部分程序代码只需要执行DML语句。
4. 数据库要定时备份,以免数据丢失。