记一次网站数据库故障恢复思路

2014年12月13,接到用户的投诉说电子商场第一次登录,需要修改密码才能登录。一听到这个脑大了,该从哪里排查呢:

1、肯定是查看网站访问日志,access.log没发现有问题。

2、用户登录不了,那肯定是login站点,查看这个站点的日志发现大部分信息都是线上连接数据库失败。(说明:因为我这里线上还原刚开始的时候只有一台主库,后来建了主从同步,但是一直没有用从库。看到这个报错首先我就切换去从库查看从库状态)

3、发现从库上面有一条报错大致意思是:update salt='o' and password="xxx",怎么会有这个操作。

4、问开发是谁执行了这条语句,后来有人反应说是今天他操作了这条。发现语句出错之后立刻停止,我的第一反应是直接跳过这个事物,应该就可以恢复了,但是后来才发现,我们是主从库,我们连的是主库。

5、又没头绪了,问一下开发salt是什么意思,说是一个生存的密钥严重,用户注册的密码就自动生成了这个。

6、试着统计一下salt这个看看有多少条,select count(*) where salt='0' from XX。一下出现了7万多条,也就是说这么多个用户现在密码是登录不了,只能修改密码重新生成密钥。

7、跟领导请示是要商家一个一个修改密码不管了,还是要回原来的数据,领导说由于数量大尽量要前面的数据,今天修改或者新注册的用户就不用管了。

8、接下来就是思考如何恢复了,我这里是定时任务是每天凌晨3点钟开始备份数据库。和表。

方案一:

停库操作:

因为数据量不是很大,可以停掉数据库,然后吧凌晨3点钟的数据全部恢复。然后根据二进制日志文件,恢复在程序员操作之前的时间点。预计2个小时内完成。

方案二:

不停库操作:

先把,凌晨3点的备份的表导入到另一个库。然后通过update的方式,salt=0的操作全部用原来的数据来今天替换。条件是id相等的情况下。

9:领导说不能停库的。而且要及时完成不能等到今天晚上,好吧只能通过第二种方式,叫来数据库的开发人员执行mysql语句。大致是 update databases1.table1,databases2,table2 set salt=salt where databases1.id=databases2.id

10:执行成功之后认证没有问题,收工。


#过程当中遇到了许许多多问题,慢慢一步一步走,因为我数据库预计需要待加强,后面的语句是开发人员帮助完成的。小小的纪录一下,以后慢慢学习。

你可能感兴趣的:(update,修改密码,password,连接数据库,用户登录)