说明:本方法适用与数据量不是很大的数据,如果你的数据量很多,建议在网上找找更专业的京城。
状况:数据表被删除,运行了两年的数据没了,大概1万来条数据。
在网上找了MySql BinLog日志恢复的方法,但在我的服务器上行不通,大部分介绍都是通过mysqlbinlog命令来筛选出需要的数据至一个sql文件,然后再导入这个sql文件。如下:
/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:58:18" --stop-datetime="2018-04-27 20:58:35" --database=hello /var/lib/mysql/mysql-bin.000009 > restor.sql
类似上面的,但我只要选择了 -d database(数据库名)就会出现下面的提示:
/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:58:18" --stop-datetime="2018-04-27 20:58:35" --database=hello /var/lib/mysql/mysql-bin.000009
WARNING: The option --database has been used. It may filter parts of transactions, but will include the GTIDs in any case.
没办法,只能把全部的数据转换成sql文件。
上面的mysqlbinlog命令,将日期等全部去掉。
/usr/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000009 > restor.sql
这样你会得到一个所有日志的sql文件,如果你的服务器上有多个mysql-bin.000001类似这样的文件,那就一个一个的执行。
这个文件的编码是UTF-8,导出成SQL以后,打开看下,你会发现他里面记录着从你的服务器创建到目前所有的mysql操作日志。
如上图所示,看到这样的结构,再加上我的表名都是有前缀的,而被删除的也仅仅是特定的几个表,现在就有恢复数据的思路:
用PHP读这个SQL文件,一行一行的读,如果是我要恢复的数据表,就执行这条SQL语句,如果不是就跳过。而且最好用命令行来运行。而ThinkPHP是我最熟悉的 。先在该SQL中找到你创建表的记录,或插入表的记录,然后在数据库中创建好你要恢复的数据表,结果一定要是最终版的,否则执行SQL语句会出错。TP5.1的命令行执行效率还是非常高的。
附上做的在命令行下运行的文件:
win下如何命令行运行thinkphp的代码:
1. 将php设置为环境变量,如果你装的是phpstuey默认是设置好 的,否则要带上php的全路径。
2. 将目录切换到你站点的根目录,里面应该有think文件,此文件没有扩展名
以上是可以正常运行的命令行,至于代码出错那是自己的事情。
3. 就是配置好命令行下的第三个参数
打开 application/command.php 文件
这里的vote就是命令行下的第三个参数:
剩下的就靠你自己好。