您的位置:首页 > 数据库 > MySQL

mysql导入导出备份与恢复

2015-09-16 16:10 861 查看
原理:差异备份与增量备份不同的是起始点,一个是完全备份时候的点为起始点,一个是以最近一次备份的点为起始点,若访问量大的时候应该混合备份:星期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 ///恢复错误前的备份
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息