mysql意外查不到数据(MySQL 丢失数据的原因及解决)
mysql意外查不到数据
MySQL 丢失数据的原因及解决前言
最近偶尔会收到用户反馈数据不见了,数据丢失了的问题。从现象上来看,这类问题在数据库层面就是紧急程度最高的那一类了,抛开客观条件来说,针对这一类问题的恢复手段几乎只有备份恢复+回放 Binlog,耗时一般比较久,对业务的影响也会很大。
但是,作为一个以稳定为主的软件,其实丢数据的概率是非常低的,所以这些反馈的问题,是不是真的“丢失数据了”?
问题描述
某日中午接到用户反馈,用业务账号登录数据库以后,业务库不见了。
原因分析
收到这个问题的时候,气氛还是很紧张的,一边联系用户授权登录数据库排查,一边也在和用户沟通,看看最近进行了哪些变更。
登录到数据库之后,发现业务库是存在的,结合用户的反馈:“业务库不见了”,初步判断是业务账号没有权限,用show grants查看之后,发现业务账号的权限只有 USAGE,类似如下效果:
mysql> show grants; +----------------------------------+ | Grants for test@% | +----------------------------------+ | GRANT USAGE ON *.* TO 'test'@'%' | +----------------------------------+ 1 row in set (0.00 sec)
由于只有最低的权限,这个账号显然是“看不到业务数据的”,所以重新授权之后,问题解决了。事后排查发现最初的授权操作发生在一个其他的同名账号上,类似于:
mysql> show grants; +-------------------------------------------------------------+ | Grants for test@10.120.117.% | +-------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON prd_name.* TO 'test'@'10.120.117.%' | +-------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
拓展一下
对于“丢失数据”这个现象来看,如果是“丢失”了整个库级别的数据,但是数据库本身又一切正常的话,其实有蛮大的可能性和这个案例是一样的问题:权限错误。引起这种问题的可能性一般是两个:1. 登录的账号匹配到了同名的其他账号;2. 授权出现了问题,导致业务账号没有权限。当然,最糟糕的情况肯定是drop database的操作,通过解析 binlog 才能定位到执行这个操作的时间。
另外一类属于“丢失部分数据”,比如某张表不见了,或者是表的某些数据不见了等等。严格的来说,这一类问题也有可能是权限错误引起的,因为 MySQL 的权限控制确实可以做到表和列级别,只是现实中一般不会用到。大多数时候是误操作,比如 update 或者 delete 的时候没有 where 条件。这种时候只能通过历史备份,再利用 binlog 进行恢复,这个操作在腾讯云上封装成了“回档”的功能。
总结一下
遇到这一类问题时,可以先花一点观察一下问题的现象,可能只需要几秒钟的时间重新授权就解决这类“丢失数据”的非常紧急且非常严重问题。
以上就是MySQL 丢失数据的原因及解决的详细内容,更多关于MySQL 丢失数据的资料请关注开心学习网其它相关文章!
- navicat premium连接mysql报错(Navicat连接MySQL错误描述分析)
- mysql的主从复制怎么做(MySQL主从复制原理以及需要注意的地方)
- mysql的7种索引(浅入浅出 MySQL 索引)
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- 2021-10-04 01:06:07
- mysql8.0.20安装教程图解(mysql 8.0.24 安装配置方法图文教程)
- mysql日期与时间函数(MySQL日期函数与时间函数汇总MySQL 5.X)
- mysql架构示意图(MySQL创建横向直方图的解决方案)
- mysql 查询json(MySQL处理JSON常见函数的使用)
- mysql中timestamp类型的CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP属性
- mysql要先下服务端再下客户端吗(解读MySQL的客户端和服务端协议)
- mysqlupdate语句用法(MySQL update set 和 and的区别)
- mysql时间存储如何选择(MySQL如何使用时间作为判断条件)
- laravel mysql 操作方式(Laravel使用原生sql语句并调用的方法)
- mysql常见错误提示及解决办法(MYSQL 无法识别中文的永久解决方法)
- ()
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
- 参考文献里期刊名称的写法,你知道吗(参考文献里期刊名称的写法)
- 硕博期刊 SCI SSCI CSSCI分不清 一文带你看懂主流期刊分类(硕博期刊SCISSCI)
- 辱华品牌新百伦官宣新代言人IU,个别粉丝希望get爱豆同款(辱华品牌新百伦官宣新代言人IU)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
热门推荐
- python redis锁的使用(Python操作redis实例小结String、Hash、List、Set等)
- Linq中where查询
- nginx404错误页面设置(Nginx tp3.2.3 404问题解决方案)
- asp.net MVC处理流程
- docker里面安装redis(Docker上实现Redis集群搭建)
- 云服务器/VPS/云主机/服务器修改登陆密码图文教程(云服务器/VPS/云主机/服务器修改登陆密码图文教程)
- Web开发中的几个建议
- mysql语句运行顺序(浅谈mysql执行过程以及顺序)
- python爬虫request方法介绍(详解Python3网络爬虫二:利用urllib.urlopen向有道翻译发送数据获得翻译结果)
- mysql数据库基本增删改查基本语句(MySQL表的增删改查基础教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9