MySQL修复记录--数据无损重装

背景

在我修复了服务器安全漏洞之后,我发现web站点无法正常连接数据库。数据库备份点为15天前。

  • 操作系统 Windows server 2008
  • 数据库 mysql5.7.23

异常状态

首先连接数据库是报
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES)
首先是通过在my.ini[mysqld]中追加skip-grant-tables尝试跳过密码登录数据库,但是修改后数据库服务无法正常重启,在Win server下报错error 1053,经多次重启服务器无效。

处理方案

重装服务(失败的尝试)

通过mysqld -remove移除mysql服务后通过mysqld -install对mysql服务进行重装,但是这并没有什么卵用。

寻找问题

数据保存(避免删库跑路)

这时可以考虑为mysql损坏,但是由于半个月没有进行数据备份,此时首先要考虑保全数据。mysql的数据库和表单以及用户配置等信息是以文件形式储存在mysql目录下data目录下,因此此时可以将data目录复制出来,存放至一个安全的区域。

故障点排除

因为在数据库崩之前我安装了系统补丁,因此我有理由怀疑是系统问题导致mysql服务无法正常启动,但是由于我后续又对mysql配置进行了修改,所以现在也无法排除mysql本身的问题。这时需要进行故障点排除。
我又部署了一个MySQL在其他目录,并没有将它添加进服务,此时这个MySQL是可以进行登录的。然后卸载之前的MySQL,将新部署的MySQL添加进服务,正常运行。此时可以排除系统问题。

数据拯救

此时我已经在其他地方部署了MySQL,但是通过使用原MySQL的data目录覆盖现有data目录的方案能否将数据迁移到现有MySQL。经过尝试,覆盖掉目录后,重启MySQL,未成功,MySQL重启失败。
经过检查,我重新部署的MySQL版本为5.5,而原有MySQL版本为5.7,而data目录下储存了MySQL引擎相关配置,因此理论上只需要现有MySQL与原MySQL版本号一致,即可正常覆盖数据。经过测试,此方案可行

导出数据

因为最开始数据库报错密码错误,而data目录下的用户配置储存了之前的用户配置,所以我还是需要修改my.ini进行跳过密码登录数据库,之后便可以正常的将数据进行备份。

恢复服务

将服务器内关于MySQL的东西全部卸载,然后重装MySQL,将导出的数据导入到新数据库,服务正常恢复。

后记

  • 出现问题首先要尽量保全数据,删库跑路这种情况我不希望在我身上发生
  • 勤备份数据,万一数据无法保全,回滚到上一保存点也会尽量减轻意外带来的损失,有条件可以进行异地容灾备份
  • 任何改动都需要在测试环境上进行测试后才能在服务器上使用,因为任何操作都可能会给服务器带来毁灭性后果。
  • 尽量不使用win server作为服务器操作系统
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值