针对MySQL的杂症(持续更新中)

  • 误操作

在工作中,会遇到很多误操作,首先我们说一下delete操作的失误,有时候因为忘记或者加错了限定条件,而进行数据的删除,导致我们十分崩溃,内心中骂了自己无数遍的渣渣,可是,又有什么用呢。然而,大部分时候,我们在安装配合MySQL的时候,事务都是自动提交的,我们可以查看一下。

针对MySQL的杂症(持续更新中)_第1张图片

很不幸,事务都是自动提交。自动提交完,我们是无法再进行回滚了,为什么呢? mysql 不是一个单任务,是复杂的并行多任务,你加了一条记录提交了,别人也把这记录改了一下提交了,现在你觉得自己提交的有问题了,那回滚到什么状态是合理的?
其实单纯从实现的角度来看,要回滚已经提交的是肯定可以的,开启 binlog,然后你可以有两种实现回滚的方式:
1. 全备+恢复到指定的事务点

    这是一种可靠的方式,但可靠的结果也就是你回滚到某个点,在这个点之后是否是你的操作都回滚。
2. 读取 binlog 

对提交的语句做反向操作(也就是 insert 变 delete, delete 变 insert, update 交换更新前后的值 ) 
  这种方式不那么可靠,因为你改的东西别人也可能改了,你做反向操作的结果不能保证操作后的效果是想要的。

真正的好文章,在此:https://blog.csdn.net/weixin_34146986/article/details/89836289。

如果遇到以上问题,请仔细反复看下面这篇文章,文章里边的内置连接很多,需要哪里就点哪里,总之,数据的误delete,对于每一个人都是致命的打击,会让你瞬间怀疑人生,甚至会让你就此走上毁灭的道路,生存还是灭亡,在我们进行update以及delete等操作的时候,一定要先进行select,然后默念十秒,点击运行。

  • MySQL资源占用导致内存过高,以及数据库连接出现问题

最近回过头看自己以前写的程序,MFC程序利用mysql++自己封装的静态链接库实现数据库的操作,这个程序让我头疼不已,因为改了又改,查了又查,还是找不到云因所在,偶然看到一篇文章(https://blog.csdn.net/dc666/article/details/78901341),如梦初醒,恍然大悟,膜拜之感油然而起。啊,呸!不就是改个配置么。可是我以前真的是改了,没遇到这篇文章之前,我都是按照自己的经验来操作的,所以看到经验文章才会如此兴奋。

我就按照文章中所说结合自己服务运行的情况进行修改,重启mysql,果真内存降下来了。之前,我总是找个备用服务器来放我的服务,因为只有这样,我才觉得安心。

实际上还有一点问题,show full processlist 的时候,发现,竟然还有很多sleep的长连接:

针对MySQL的杂症(持续更新中)_第2张图片

这个问题该如何优化,我暂时还没找到可行性的方法。手动清理总是不好,写脚本来清理也觉得不是甚好,总觉MySQL内部有不可告人的秘密,需要继续探索,有新发现我会及时更新的。

  • 切记左右连接以及内连接等造成的数据为空的问题

今天突然接到一个电话,说我们网页有几个功能页面有问题。数据关联之后,程序的内部处理需要跟上,最终找到原因是因为右连接查询的时候,查询到了空值,然后排序完之后分页显示的时候出现问题了。【这个问题需要专门写篇文章整理一下】

 

 

你可能感兴趣的:(MySQL数据库,mysql)