原理:差异备份与增量备份不同的是起始点,一个是完全备份时候的点为起始点,一个是以最近一次备份的点为起始点,若访问量大的时候应该混合备份:
星期1的零点完全备份一次
星期2,3,4的零点进行增量备份
星期5零点进行差异备份
星期6,7零点进行增量备份
若星期6的8点误删了某个表或者记录库等的可以先
星期1的零点数据导入到数据库
再星期5零点差异备份的数据导入数据库
再星期6零点增量备份的数据导入数据库
再查看当前日志信息找到那个删除操作的时间点前一个操作的时间点
再备份这段时间内的数据,然后导入数据库即可恢复
1.mysqldump常用选项
u,-h,-p #指定连接数据库的用户名密码,地址
-A, --all-databases #备份所有数据库
-x, --lock-all-tables #锁定所有表
-l, --lock-tables #锁定备份的表(只有备份单张表才建议使用这个选项)
-B, --databases db_name1 db_name2 ... #备份指定的数据库
--single-transaction #启动一个大的单一事务实现备份(热备,只能针对 #InnoDB存储引擎来实现,如果备份的表中有MyISAM的表,则对于这些表没有任何意义)
-C, --compress #压缩传输(在服务器端会占用更过的cup时钟周期)
-E, --events #备份指定库的事件调度器;
-R, --routines #备份存储过程和存储函数;
--triggers #备份触发器
-F,--flush-logs #锁定表之后执行flush logs命令(日志滚动);
--master-data[=num] #在完全备份的备份文件中记录下来,在备份那一时刻(锁定所有表时),对应的二进制日志文件的文件名及其位置。num=0表示不记录,num=1,记录CHANGEMASTER TO语句(语句未被注释),num=2,记录为注释语句;
完全备份
mysqldump -A -x --master-data=2 >/backup/`date +%F`_all.sql
2. mysqlbinlog:
--start-position=# #从指定的事件位置查看
--stop-position=# #只显示到指定的事件位置
--start-datetime=YYYY-MM-DD hh:mm:ss #从指定的时间查看
--stop-datetime=YYYY-MM-DD hh:mm:ss #只显示到指定的时间
根据位置来增量备份与差异备份(位置根据你二进制里自己需要的位置)
[root@localhost backup]#mysqlbinlog --start-position=120 --stop-position=1169/data/mysql/mysql-bin.000004 >/backup/`date +%F`_inc.sql
根据日期来增量备份与差异备份(时间根据你备份的时间)
/usr/local/mysql/bin/mysqlbinlog --start-date="2015-09-16 00:00:00"--stop-date="2015-09-17 00:00:00" /data/mysql/mysql-bin.000004>/backup/`date +%F`_inc.log
若在16号的10:40左右出的错误,我们可以先找出要恢复的点(比如删除某个动作前的那个时间点)
(1)先导出部分数据查看操作
mysqlbinlog--start-date="2015-09-16 10:35:00" --stop-date="2015-09-1610:45:00" /data/mysql/mysql-bin.000004 >/backup/error_time.sql
(2)找到操作的点
vi /backup/error_time.sql
/*!*/;
# at 1138
#150916 10:40:51 server id 22 end_log_pos 1169 CRC32 0x49372e7e Xid = 2175
COMMIT/*!*/;
# at 1169
#150916 10:43:14 server id 22 end_log_pos 1282 CRC32 0xe413656e Query thread_id=4 exec_time=0 error_code
=0
SET TIMESTAMP=1442371394/*!*/;
DROP TABLE `cj` /* generated by server */ ///删除表cj的操作点,往上找时间或者点
(3)利用备份删除前到00:00:00的数据
mysqlbinlog --start-date="2015-09-1600:00:00" --stop-date="2015-09-16 10:40:52"/data/mysql/mysql-bin.000004 >/backup/right.sql ///加一秒恢复删除前的操作
(4)导入到数据库
mysql先停止二进制日志滚动
mysql>set sql_log_bin=0;
QueryOK, 0 rows affected (0.00 sec)
客户端操作:
mysql </backup/2015-09-16_all.sql ///恢复我今天做的完全备份
mysql </backup/right.sql ///恢复错误前的备份