mysql中由于误删或是错误更新表中的某字段恢复原数据的方法

场景描述:修改测试服务器上用户表中的用户昵称,执行很简单的更新语句,由于没有添加更新的条件,导致测试服务器上的用户昵称都是一个值,这要是在正式数据库上就直接凉凉了;这里提供一下这种场景下面恢复数据的方法.
自己从本地数据库进行的测试修改,直接说本地,Linux上执行方法相同,区别是数据库配置文件不同.使用数据模拟一下场景:新建表test_table,插入数据,在这里插入图片描述
执行模拟错误sql:

-- 原数据为 小李 小明,修改为小小,模拟错误sql
UPDATE test_table SET NAME="小小"

接下来就是想办法还原更新之前的数据.
开始步骤:
1.确认本地mysql数据库开启记录日志功能
my.ini文件中查找是否有log-bin=mysql,如果没有的话从mysqld标签下面进行添加.可以理解成添加之后就是开启了mysql的日志记录功能.
2.开启日志记录功能之后执行sql语句(除了查询语句之外)都会记录到日志文件中,日志名称类似:mysql.000001;查看日志文件内容:
本地设置的mysql的环境变量,所以可从任意目录下执行:

mysqlbinlog D:\devtool\mysql\mysql-5.5.27-winx64\personalData\mysql.000001

D:\devtool\mysql\mysql-5.5.27-winx64\personalData表示的是本地mysql数据存储位置(my.ini中的datadir中设置)
重要内容如下:
在这里插入图片描述
想还原表中原来的数据只要执行上面插入的语句和提交的语句即可,日志记录位置从2642-2842
3.将日志文件中的内容导出到指定文件中
任意目录下执行:

mysqlbinlog D:\devtool\mysql\mysql-5.5.27-winx64\personalData\mysql.000001 --start-position=2642 --stop-position=2842 -r D:\new_update.sql

D:\new_update.sql表示是将导出的日志信息导出位置;
4.登录数据库进行还原
登录之后,切换到指定的数据中,执行还原命令:

source D:\new_update.sql

5.重新查看数据库显示数据已还原
在这里插入图片描述
说一下遇到的问题:
1.mysql安装时数据库存储位置默认是C:\ProgramData\MySQL\MySQL Server 5.5\data,所以日志文件生成之后是默认存储在此位置,通过命令查询日志文件内容时显示C:\ProgramData\MySQL can not find;设置过各种选项但是还是不生效,于是将数据库存储位置修改为上面的D:\devtool\mysql\mysql-5.5.27-winx64\personalData,但是重启mysql服务显示重启失败,解决的办法是将C:\ProgramData\MySQL\MySQL Server 5.5\data下面的所有数据库文件(日志文件可不复制)复制到D:\devtool\mysql\mysql-5.5.27-winx64\personalData即可.
2.本地数据库查询中文内容时会乱码,愿意是mysql设置的编码是utf-8,但是本地系统默认是gbk,所以会有乱码,这里没有修改配置,而是借用了网友的一个软件,可以对中文编码进行转化,亲测可用,所以这里推荐一下,使用方法很简单:
在这里插入图片描述
简单的整理一下,能给别人带来帮助最好,有不正确的还希望能够提出改正.
获取连接:https://pan.baidu.com/s/1kQbp1Tz0KvF26ocwU4nqwA 提取码:p4he

猜你喜欢

转载自blog.csdn.net/weixin_43401380/article/details/107847008