马哥Linux运维罗宾
引用>血的教训,事发经过就不详述了。直接上操作步骤及恢复思路(友情提示:<强>数据库的任何操作都要提前做好备份强>),以下是Mysql数据后的恢复过程:
1。找到binlog
恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档.binlog日志是否开启可以查看Mysql配置文件。日志位置一般在<代码>/var/lib/Mysql> 代码目录或者编译安装的<代码> 代码>日期目录下。也可登录Mysql用命令查看。
#, cat /etc/my.cnflog_bin=mysql-bin #, mysql -uroot -pEnter 密码: mysql>, show variables 像'log_bin %’; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,Variable_name ,,,,,,,,,,,,,,,,,, |, Value ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,log_bin ,,,,,,,,,,,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, | |,log_bin_basename ,,,,,,,,,,,,,,, |,/home/程序/mysql-5.6.26/数据/mysql-bin ,,,,, | |,log_bin_index ,,,,,,,,,,,,,,,,,, |,/home/程序/mysql-5.6.26/数据/mysql-bin.index | | |,log_bin_trust_function_creators OFF ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, | |,log_bin_use_v1_row_events ,,,,,, |, OFF ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 5,rows set 拷贝;(0.00,sec) #, ll /home/程序/mysql-5.6.26/数据/mysql-bin * -rw-rw——, 1, mysql mysql 343629748, Oct 13, 22:09 /home/程序/mysql-5.6.26/数据/mysql-bin.000001 -rw-rw——, 1, mysql mysql ,,,,,,, 19, Sep 23, 17:11 /home/程序/mysql-5.6.26/数据/mysql-bin。指数,
如果有多个binlog日志也可以在Mysql命令行下查看当前binlog,切割binlog日志。切割完成binlog再次查看就会看到新的日志写入到新的binlog文件中。
mysql>, show master 地位; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + |,File ,,,,,,,,,,,, |, Position , |, Binlog_Do_DB |, Binlog_Ignore_DB | Executed_Gtid_Set | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + |,mysql-bin.000001 |, 343629748, |,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,, |,,,,,,,,,,,,,,,,,, | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + 1,row set 拷贝(0.00,秒) mysql>, flush 原木; Query 好吧,,0,rows affected (0.01, sec),
2。找到binlog中错误的语句
可以binlog日志中找到错误语句执行的时间点,分别恢复错误语句前后的binlog日志为sql。也可以跳过此步,直接恢复整个binlog日志为sql,然后打开sql文件,删除错误语句。
#, sudo mysqlbinlog ——base64-output=DECODE-ROWS -v -d ids mysql-bin.000001 |, grep ——ignore-case -A3 -B4 “错误的sql语句”,
3。恢复binlog日志
通过<代码> mysqlbinlog 代码>命令直接恢复binlog日志为sql脚本,可以指定开始和结束时间。如果从上次备份(建议备份的同时刷新binlog日志)截至到恢复时间产生多个binlog日志,按从小到大的顺序分别导出成sql再顺序导入到数据库。
#, sudo mysqlbinlog ——base64-output=DECODE-ROWS -v -d ids ——start-datetime “2016 - 10 - 11, 15:22:53’, mysql-bin.000001 在/home/栈/数据。null详解:如何恢复MySQL数据库下误删的数据