记一次MYSQL数据恢复过程
一、数据库环境相关
版本:wamp 集成 mysql5.5.16
系统:Windows 7 Ultimate Edition Service Pack 1
存储引擎:
其他:开启二进制日志binlog
二、故障原因
因人为误删除整个数据库(数据库本身及数据表)。
三、恢复过程
(1)、是否有备份:没有。
(2)、详细过程
检查状态,数据库被完整删除。已开启日志。
如果有备份首先将备份恢复到数据库中,在日志中查找进行该备份时的日志时间。将该时间作为日志恢复的起点。
我这次就没有备份,只有从建立数据库的那个时间节点进行数据恢复了。
本次使用的是phpmyadmin在管理菜单中有二进制日志项,进入就会列出所有的二进制日志,然后一个一个找存在类似
create dabase dname 的行,然后在获得位置项值,该值就作为我们恢复的起点了。这里为156.
然后使用命令(在mysqlbinlog.exe所在目录)
mysqlbinlog --start-position=156 D:\wamp\bin\mysql\mysql5.5.16\data\mysql-bin.000001
进行恢复,但是在这里就开始出现问题了,中文数据插入在phpmyadmin中显示的乱码,于是就将刚才的插入数据清空了。
不过发现虽然中文乱码,但仅仅是部分,表现为字段注释的中文正常,但数据项值得中文是乱码。
开始,我检查了数据库及表的的编码,都是utf8,而且之前数据库都是用utf8编码的。为何不行呢,
尝试命令 set names utf8,无效。
将二进制日子转为文本文件
mysqlbinlog D:\wamp\bin\mysql\mysql5.5.16\data\mysql-bin.000001 >1.txt
检查文件编码仍是utf8,这里应该没问题。
打开文件看了看内容,中文正常显示。也没问题。
没办法,然后使用客服端工具mysql.exe
登陆时设置字符集
mysql -u root -p root --default-character-set="utf8"
无效。
仍没办法,于是就百度一下别人怎么解决的。发现都是类似
set names utf8 或myini default-character-set=utf8。
不过在一篇文章中发现了命令 show variables like "%char%";

看见这个我想起了刚才txt文件记录中的类似行,于是又打开1.txt文件找了找发现这样的:

看来乱码的源头出来了,于是我将character_set设置为utf8,然后见txt文件中的session后的数字改为对应的33,然后在
mysql登陆下使用命令
source 1.txt
进行恢复,这次果然就没出现乱码了。
至于直接从日志进行恢复,似乎没啥办法,因为从txt文件session看出字符集是不一致的,所以要防止乱码应该注意:
数据库使用的某时间断内最好不要频繁的更换编码,以便给日志带来困哪。
数据库服务器配置时的字符集参数也应一致。前后阶段尽量不要变化。
注:批处理从日志生成txt文件脚本示例:
for /L %%a in (10,1,99)do "D:\wamp\bin\mysql\mysql5.5.16\bin\mysqlbinlog.exe" "D:\wamp\bin\mysql\mysql5.5.16\data\mysql-
bin.0000%%a" > "e:\\%%a.txt"
pause
本文来源 我爱IT技术网 http://www.52ij.com/jishu/1312.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
