mysql 数据库恢复实录
来源:互联网 发布:java随机生成小写字母 编辑:程序博客网 时间:2024/06/04 18:37
具体的过程是这样的:我们服务器上使用wordpress搭建了一个wiki系统。昨天的某个时刻未知原因其中的wp Editor.md插件无法正常使用,顶部工具栏丢失,没有右侧的实时显示功能。针对这个问题进行了很多尝试依旧没有解决,之后想着使用新插件替代之。直接在wordpress的插件中搜索markdown ,安装了一个pods插件。pods插件上来就是一个字段管理、可以新建字段也可以基于以前的字段。然后点了一下基于现有字段,觉得没有必要把他建立的数据做了一个删除操作。然后,噩梦就开始了,所有的文章消失不见。这就开启了我们的数据找回之路。
在过程中出现 #符号时,是在shell下操作。出现mysql>时,是需要登录mysql在数据库中操作。
大致步骤如下:
1、查看是否启用日志
命令:
mysql>show variables like 'log_%';
结果:
分析: 红色部分信息log_bin的值为on表示已经启用日志。
2、mysql配置文件,查看是否开启了mysqlbinlog 日志,linux服务器下日期文件位于/etc/my.cnf。
命令:
# cat /etc/my.cnf
结果:
分析: 红色部分信息datadir的值(/usr/local/mysql/var)为数据文件所在的文件夹
3、查看当前日志文件
命令:
mysql> show master status;
结果:
分析:其中 mysql-bin.000013 为当前备份的文件名。注意,文件存放在数据文件中。
4、以时间为终点导出对应数据库的操作SQL。
命令:
/usr/local/mysql/bin/mysqlbinlog --no-defaults --stop-datetime="2017-12-22 06:00:00" --database=wordpress_wik /usr/local/mysql/var/mysql-bin.000012 > data.sql
结果:
WARNING: The option --database has been used. It may filter parts of transactions, but will include the GTIDs in any case. If you want to exclude or include transactions, you should use the options --exclude-gtids or --include-gtids, respectively, instead.查看到data.sql文件
分析:已经产生当前数据库操操作的DDL日志文件。
5、导出问题表中的数据
命令:
more data.sql | grep --ignore-case -E 'insert|update|delete' -A2 -B2 | grep wiki_posts > wiki.sql
结果:
--, 查看到wiki.sql文件
分析:已经从整个数据库文件过滤出wiki_post表操作记录
6、 在每条数据库操作后添加分号(;),将数据中的异常数据(0000-00-00 00:00:00)修改为(1987-01-01 00:00:00)
使用vim打开,使用vim命令
命令:
%s/$/;%s/0000-00-00/1970-01-01
结果:
看到每行后的分号, 以及修改成功的数据
分析:添加成功
7、备份现有库中的数据
命令:
mysqldump -uroot -p'密码' wordpress_wiki >wiki.sql
结果:
queryOK
分析:数据备份完成
8、清空问题表中的数据
命名:
truncate table wiki_post
结果:
Query OK
分析:表中数据清理完成
9、执行操作数据
命令:
mysql -uroot -p'密码' -Dwordpress_wik --max_allowed_packet=50M --force -f < ./wiki.sql
结果:
等待命令执行结束
分析:数据操作成功
此时文章已经找回