解决一个程序问题需要多少步——确定我们没有在摸鱼

这篇具有很好参考价值的文章主要介绍了解决一个程序问题需要多少步——确定我们没有在摸鱼。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3 天前,运行的社区系统报告,很多老的历史照片都无法作为附件加载 —— 小鲨鱼,快来解决问题。

很多人都问题,为什么程序员每天不是在调 Bug 就是在调 Bug 的路上。

其实呀,计算机是一个逻辑性非常强的东西,每一步都应该是原因的,所以我们要通过逻辑性找到不同的原因。

解决一个程序问题需要多少步——确定我们没有在摸鱼,数据库

这个和把大象关进笼子里有几步差不多。

调试的方法其实就是针对问题去找到原因,为什么会出现这个问题。

对 Web 系统来说,无非就是程序和数据,首先需要确定数据丢了没有,如果数据丢了,怎么调试都没有用,因此先恢复数据,保障系统运行永远是第一位的。

Step 1 有没有快速的解决方案

为什么会出现这个问题,不是好好的吗?原来是因为更换了域名,同时更换了云存储的存储路径。

现在问题就是主题中的内容都没有丢,但是当主题重新生成 HTML 后,只要主题中有附件的部分,全部都没有正确生成 HTML。

快点检查存储在云端的附件有没有被删掉。找到一个老的主题已经生成的 HTML,然后检查丢失的图片对比的服务器地址。

云存储的附件都还在,没有被丢掉,如果直接把绝对 URL 拷贝过来,问题就解决了。

赶紧的,有备份吗?

有备份,赶快恢复一次。

Step 2 数据恢复

恢复备份后无法解决问题。

备份恢复了,问题依旧。怎么办?

有多少主题被影响到?

往前面找 3 个月,1 个月,2 个星期的随机帖子,貌似各种情况都有,但是大量丢的都在 几个星期之前的,几乎都无法显示。

那应该是在生成 HTML 的短 Hash 代码转码回去的时候出现问题了。

这个数量已经非常大了,没有办法通过手工恢复的方式完成了。

这里有个判断,如果只影响到几个主题,通常我们都可以手工恢复的,如果影响的主题超过几十个,这个时候是没有办法手工恢复,只能找到原因让程序去做了。

Step 3 调试存储桶路径

因为我们知道存储桶路径换了,是不是因为存储桶的名字问题呢?

把服务器上存储桶的名字重新改回来,问题依旧。

现在这个和存储桶的路径应该没有太大的关系。

Step 4 调试 Hash 算法

是不是因为在 Base 62 Hash 算法的时候因为 SHA1 的不同而导致了算法没有被正常解码?

读了下程序,貌似问题也不在这里。

这个 Base62 算法,程序中没有加摘要扰乱计算。

Step 5 查询数据库的数据

现在我们得从数据库查看了,因为没有办法确定到底是程序还是数据的问题。

貌似在备份前 3 天的数据是好的,我们应该要把数据库的数据恢复下看看。

服务器现在在运行的,好在新加的主题没有问题,那就让服务器运行着吧。

我们把服务器上的数据 Dump 下来,导入到我们本地的 PGSQL 数据库中吧。

这个导入过程可能要一天也可能是几个小时,因为导入数据比较容易出错。

Step 6 如何进入服务器 Docker 容器内查询

数据本地拿到了,Hash 前的和 Hash 后的数据都在呀,那问题在哪呢?

到 Docker 容器内去查询下现有的服务器数据吧。

这个时候,你就可能需要时间去了解下如何进入 Docker,如何在 Docker 连接数据库后运行 SQL。

因为这个库是在容器内的,你是没有办法通过其他数据库工具直接连接到数据库上运行 SQL 的,通常生成服务器也不允许你这么做。

查询的结果,发现是本地有的记录,服务器上没有。

大概率知道数据库映射出了问题。

Step 7 把本地的备份数据恢复 1 条

把本地备份的 1 条数据恢复到服务器上,然后刷下效果,看是不是就是因为数据丢了?

太棒了,恢复的这条数据被显示出来了,主题正常了。

原来就是丢数据了,备份不应该是备份全部的吗?看来应该是恢复哪里或者某个表出问题了。

Step 8 获得具体有多少数据被影响

因为我们知道那个表现在有问题了, Select Count(*) 呗。

发现一共了 4000 多条记录被影响。

赶紧把本地的这些记录组织成 SQL 到服务器上运行吧,都是 Insert 应该问题大。哪怕是重复数据,因为有 Key,重复数据会被忽略掉。

导入后问题解决了。

Step 9 解决问题后 2 天同样的问题又出现了

先查 Count,后来发现 Count 数据被删掉了 2000 多。

这肯定是有自动运行进程对数据进行清理了。

上网考古下,发现貌似有一个无用附件清理进程会对程序认为无用的附件进行清理。

先不管了,把这 2000 多条数据恢复再说。

Step 10 关闭清理进程

先关闭清理进程,然后看为什么这个程序会把我们实际是需要的数据给清理掉?

读代码,在清理之前,程序会判断那些数据是需要清理的,这里有一个 Join 的 SQL 查询。

这里 Join 了另外一个表。

Step 11 对比 JOIN 表数据量

马上对比另外表的数据量。

这里了明显又丢了好几千条记录。

原来在主题和附件的关系映射表中的数据丢了部分,导致整个附件表的有用数据被当做无效数据清理掉了。

Step 12 数据恢复

把 JOIN 的映射表数据进行恢复。

然后等待重构运行结果,保持清理进程开启,2 天后查看结果。

同时增加服务器备份数量,从保留 30 天的备份,到现在增加到保留 300 天。

Step 13 问题总结和记录

把整个过程总结下来,花个 10 多分钟记录下问题。

上面是针对一个问题进行调试的小过程,如果你对系统比较熟悉的话,很快就会定位到映射部分。如果对系统不熟悉的话,上面的步骤就是一个几乎完整的 Debug 流程。

在上面的流程中到处都是坑,这就是为什么有些人看起来只需要几个小时或者几分钟就解决问题了,你却用了几天的时候,甚至几天都没有进展。

相信我,不是因为你不够优秀,仅仅是因为你对已有的这套系统的设计,数据,逻辑不熟悉而已,这没什么大不了的,时间问题。

解决一个程序问题需要多少步——确定我们没有在摸鱼 - 程序人生 - iSharkFly文章来源地址https://www.toymoban.com/news/detail-700990.html

到了这里,关于解决一个程序问题需要多少步——确定我们没有在摸鱼的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NextCloud 全新安装后不能出现登录页面,可以打开登录界面并在确定密码没有错误的情况下却无法登录问题的解决

     主要问题:全新安装的nextcloud时,会出现过一会,安装页面出现错误;静等到一切安装完成,输入地址,却出现404错误的问题;还有在进入登录页面后,在确定密码没有错误的情况下,无法通过web页面登录;登录次数过多后,因防暴力试错破解机制,导致延迟登录。本文将解

    2024年02月05日
    浏览(50)
  • 做一个网站需要多少个技术人员?

    作为互联网从业者,这么多年来经常会碰到一个灵魂拷问,那就是“为什么一个网站需要那么多技术人员?”,尤其是提问者如果再追问一下“听说几个相关专业的学生一个课程的作业就是开发一个网站或者app,那为什么现在主流的网站或者app背后的公司,动辄就有上万人的

    2024年02月01日
    浏览(82)
  • 2023年依照市场行情定制开发一个手机App软件需要多少钱?

    app开发费用多少钱?这是我们得到的第一个问题,但是没有标准答案。 它取决于(实际上,取决于许多因素),您可以得到所要付出的代价。 在本指南中,我们将充实影响app开发成本的因素,包括按阶段和app类型划分的成本,开发人员的位置以及发布后的服务。另外,我们

    2024年02月09日
    浏览(53)
  • 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。

    VMware安装centos和打开其他虚拟机时电脑蓝屏报错: 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。 我的解决办法:开启Windows的虚拟机平台 打开控制面板,点击“程序”,点击“启用或关闭windows功能”,勾选“虚拟机平台”

    2024年02月11日
    浏览(220)
  • 【安装软件】 win10安装iTunes报错:“此Windows Installer软件包有一个问题。完成此安装需要......”的解决方式

    打开控制面板,程序,卸载程序,卸载与Apple相关的,按发布者排序,将有 Apple lnc ,的全部卸载, 清理注册表信息,此过程需要自己一步一步操作,过程需很长。具体方式步骤如下: 打开注册表,按win+r,输入 regedit 打开注册表编辑器, 按Ctrl+F ,输入 Apple software update 进行搜

    2024年02月12日
    浏览(72)
  • 微信小程序当在一个页面有多个input输入框,自动弹键盘,需要点击input框2次才能聚焦的问题

    微信小程序当在一个页面有多个input输入框,自动弹键盘,需要点击input框2次才能聚焦。 解决办法,在点击input框时,调用bindtap事件,关闭键盘、设置焦点。代码示例如下: 方法仅供参考!

    2024年02月11日
    浏览(39)
  • 提示程序需要Windows 7 Service Pack 1或更高版本问题如何解决?

    提示这个,不要慌,这个属于电脑的一个组件没有安装或者出现问题,导致的 这个跟软件都是没关系的,纯属是电脑系统的原因   右键桌面“我的电脑”图标,选择“属性”  在这里,你可以看到,正常这里会显示相关的“Service Pack 1”信息 但是确没有,说明,更加确信是

    2024年02月05日
    浏览(56)
  • Windows 更新 升级 8007003错误 800tb109错误 文件没有正确签名 很难确定你的电脑能否运行win10【解决方法】

    在看了网上一大堆的的方案,什么删注册表(WindowsSelfHost),删更新文件(SoftwareDistribution),删软件包签名(catroot、catroot2)都没用的,欢迎你来对地方了!! 【先讲讲自己的经历,只是吐槽下自己曲折并提供一点点经验,避免大家走弯路,不想看的请直奔解决方案】 一年

    2024年02月10日
    浏览(68)
  • 做一个小程序要多少钱?

    ​微信小程序相信大家都已经不会陌生,我们的日常生活中也会经常使用到微信小程序,从我们出门逛街买奶茶,坐公交刷地铁,偷懒不出门买菜,都会熟练的打开微信小程序~ 那么问题来了,做一个小程序到底要多少钱?   一般分为两种情况 第一:模板开发(适合中小型

    2024年02月09日
    浏览(36)
  • 我们的第一个 Qt 窗口程序

    Qt 入门实战教程(目录) Windows Qt 5.12.10下载与安装 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境,也不需要你再在Visual Studio 2022中安装Qt VS Tools这样的插件。 目的就是为了能够让你可以更快的把Q

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包