使用binlog日志--恢复库/表/记录
解释:
binlog日志记录对数据库有修改操作效果的SQL语句,当数据库中的数据丢失或破坏时,可以通过binlog日志恢复到当初创建的状态
1.启用binlog日志
   调整/etc/my.cnf配置,并重启服务
    vim /etc/my.cnf
 在配置文件中添加:
 [mysqld]
 log-bin=mysql-bin
 [root@dbsvr1 ~]# service mysql restart
2.确认binlog日志文件
 新启用binlog后,每次启动mysql服务都会生成一份日志文件:
 命令行模式下:
       ls /var/lib/mysql/mysql-bin.*
  显示:/var/lib/mysql/mysql-bin.000001 /var/lib/mysql/mysql-bin.index  //其中mysql-bin.index文件记录了当前保持的二进制文件列表:--可通过此命令查看:cat /var/lib/mysql/mysql-bin.index./mysql-bin.000001
      重启MySQL服务程序(不推荐),或者执行SQL操作“FLUSH LOGS;”,会生成一份新的日志:
        在mysql>下执行 flush logs;
 3.利用binlog日志重做数据库操作
  1)执行数据库表添加操作
   创建db1·库tb1表,表结构自定义:
  mysql> CREATE DATABASE db1;
  Query OK, 1 row affected (0.05 sec)
  mysql> USE db1;
  Database changedmysql> 
  mysql>CREATE TABLE tb1(    
  -> id int(4) NOT NULL,name varchar(24)  
    -> );
  Query OK, 0 rows affected (0.19 sec)
 插入3条表记录:
 mysql> INSERT INTO tb1 VALUES    
-> (1,'Jack'),    
-> (2,'Kenthy'),    
-> (3,'Bob');
Query OK, 3 rows affected (0.13 sec)Records: 3  Duplicates: 0  Warnings: 0

确认插入的表记录数据:
mysql> SELECT * FROM tb1;

2)删除前一步添加的3条表记录
执行删除所有表记录操作:
mysql> DELETE FROM tb1;Query OK, 3 rows affected (0.00 sec)

3)通过binlog日志恢复表记录
binlog会记录所有的数据库、表更改操作,所以可在必要的时候重新执行以前做过的一部分数据操作,但对于启用binlog之前已经存在的库、表数据将不适用。
根据上述“恢复被删除的3条表记录”的需求,应通过mysqlbinlog工具查看相关日志文件,找到删除这些表记录的时间点,只要恢复此前的SQL操作(主要是插入那3条记录的操作)即可。
查看mysql-bin.000002日志内容:
[root@dbsvr1 ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019 SET @@session.max_insert_delayed_threads=0*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4#140112 20:05:37 server id 1  end_log_pos 120 CRC32 0xb6b5bd8f  Start: binlog v 4, server v 5.6.15-log created 140112 20:05:37 at startup# Warning: this binlog is either in use or was not closed properly.ROLLBACK/*!*/;BINLOG 'EYXSUg8BAAAAdAAAAHgAAAABAAQANS42LjE1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARhdJSEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAY+9tbY='/*!*/;# at 120#140112 20:09:58 server id 1  end_log_pos 211 CRC32 0x86198382  Query   thread_id=1     exec_time=0     error_code=0SET TIMESTAMP=1389528598/*!*/;SET @@session.pseudo_thread_id=1/*!*/;SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;SET @@session.sql_mode=1075838976/*!*/;SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!\C utf8 *//*!*/;SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;CREATE DATABASE db1/*!*/;# at 211#140112 20:10:44 server id 1  end_log_pos 338 CRC32 0x3f49ba47  Query   thread_id=1     exec_time=0     error_code=0use `db1`/*!*/;SET TIMESTAMP=1389528644/*!*/;CREATE TABLE tb1(id int(4) NOT NULL,name varchar(24))/*!*/;# at 338#140112 20:12:14 server id 1  end_log_pos 415 CRC32 0x755ac4ea  Query   thread_id=1     exec_time=0     error_code=0SET TIMESTAMP=1389528734/*!*/;BEGIN/*!*/;# at 415#140112 20:12:14 server id 1  end_log_pos 545 CRC32 0x98781640  Query   thread_id=1     exec_time=0     error_code=0         //插入表记录的起始时间点SET TIMESTAMP=1389528734/*!*/; INSERT INTO tb1 VALUES(1,'Jack'),(2,'Kenthy'),(3,'Bob')/*!*/;# at 545#140112 20:12:14 server id 1  end_log_pos 576 CRC32 0x672e96e5  Xid = 9                                                  //确认事务的时间点COMMIT/*!*/;# at 576#140112 20:13:51 server id 1  end_log_pos 653 CRC32 0xbf4c6024  Query   thread_id=1     exec_time=0     error_code=0SET TIMESTAMP=1389528831/*!*/;BEGIN/*!*/;# at 653#140112 20:13:51 server id 1  end_log_pos 740 CRC32 0x253837bb  Query   thread_id=1     exec_time=0     error_code=0          //删除表记录的时间点SET TIMESTAMP=1389528831/*!*/;DELETE FROM tb1/*!*/;# at 740#140112 20:13:51 server id 1  end_log_pos 771 CRC32 0xbf4675d0  Xid = 12COMMIT/*!*/;DELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET 
COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
根据上述日志分析,只要恢复从2014.01.12 20:12:14到2014.01.12 20:13:50之间的操作即可。可通过mysqlbinlog指定时间范围输出,结合管道交给msyql命令执行导入重做:
[root@dbsvr1 ~]# mysqlbinlog \    
--start-datetime="2014-01-12 20:12:14" \    
 --stop-datetime="2014-01-12 20:12:50" \   
 /var/lib/mysql/mysql-bin.000002 | mysql -u root -pEnter password:                                  //验证口令
4)确认恢复结果
mysql> SELECT * FROM db1.tb1;
+----+--------+| id | name 
  |+----+--------+|  
1 | Jack   ||  2 | Kenthy ||  3 | Bob   
 |+----+--------+3 rows in set (0.00 sec)