- 误操作
在工作中,会遇到很多误操作,首先我们说一下delete操作的失误,有时候因为忘记或者加错了限定条件,而进行数据的删除,导致我们十分崩溃,内心中骂了自己无数遍的渣渣,可是,又有什么用呢。然而,大部分时候,我们在安装配合MySQL的时候,事务都是自动提交的,我们可以查看一下。
很不幸,事务都是自动提交。自动提交完,我们是无法再进行回滚了,为什么呢? 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内部有不可告人的秘密,需要继续探索,有新发现我会及时更新的。
- 切记左右连接以及内连接等造成的数据为空的问题
今天突然接到一个电话,说我们网页有几个功能页面有问题。数据关联之后,程序的内部处理需要跟上,最终找到原因是因为右连接查询的时候,查询到了空值,然后排序完之后分页显示的时候出现问题了。【这个问题需要专门写篇文章整理一下】