首页 > 代码库 > MySQL的备份和还原
MySQL的备份和还原
MySQL的备份和还原
备份:副本
RAID1,RAID10:保证硬件损坏而不会业务中止;
DROP TABLE mydb.tb1;
备份类型:
热备份、温备份和冷备份(根据服务器是否在线)
热备份:读、写不受影响;
温备份:仅可以执行读操作;
冷备份:离线备份;读、写操作均中止;
物理备份和逻辑备份(根据直接cp或者把文件导出)
物理备份:复制数据文件;
逻辑备份:将数据导出至文本文件中;
完全备份、增量备份和差异备份;
完全备份:备份全部数据;
增量备份:仅备份上次完全备份或增量备份以后变化的数据;
差异备份:仅备份上次完全备份以来变化的数据;
在线:物理完全备份
还原:
备份什么:
数据、配置文件、二进制日志、事务日志
热备份:
MyISAM: 温备份
InnoDB: xtrabackup, mysqldump
MySQL --> 从:
物理备份:速度快
逻辑备份:速度慢、丢失浮点数精度;方便使用文本处理工具直接对其处理、可移植能力强;
备份策略:完全+增量;完全+差异
MySQL备份工具:
mysqldump: 逻辑备份工具、MyISAM(温)、InnoDB(热备份)
mysqlhotcopy:物理备份工具、温备份
文件系统工具:
cp:冷备
lv: 逻辑卷的快照功能,几乎热备;
mysql> FLUSH TABLES;
mysql> LOCK TABLES
创建快照:释放锁,而后复制数据
InnoDB:
第三组工具:
ibbackup: 商业工具
xtrabackup: 开源工具
mysqldump: 逻辑备份
mysqldump(完全备份)+ 二进制日志 锁表:flush tables with read lock 滚动二进制日志:flush logs
完全+增量:
备份单个数据库,或库中特定表
mysqldump DB_NAME [tb1] [tb2] 不包含创建数据库的命令,还原时候必须指定数据库,也可以只备份单张表
--master-data=http://www.mamicode.com/{0|1|2}
0: 不记录二进制日志文件及路位置;
1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;
2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;
--lock-all-tables:锁定所有表
--flush-logs: 执行日志flush;
如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备,不用再使用lock和flush;
备份多个库:
--all-databases: 备份所有库,保存创建库的命令
--databases DB_NAME,DB_NAME,...: 备份指定库,保存创建库的命令
--events:备份事件调度器
--routines:备份存储过程和函数的
--triggers:备份触发器
以下备份保留创建数据库:
mysqldump -uroot -p --lock-all-tables --flush-logs --all-databases --master-data=http://www.mamicode.com/2 > /root/all.sql
备份策略:每周完全+每日增量
完全备份:mysqldump
增量备份:备份二进制日志文件(flush logs)
手动模拟:
mysqldump -uroot -p --master-data=http://www.mamicode.com/2 --flush-logs --all-databases --lock-all-tables > /root/alldatabases.sql
第一天全量备份之后,添加删除数据,
第二天做增量备份:flush logs
mysqlbinlog mysql-bin.000006 > /root/mon-increamental.sql
增加删除数据,而后数据库数据全没了,但二进制文件依然保留
还原数据:
(1)初始化库后启动mysqld
(2)还原全库 mysql -uroot -p < alldatabases.sql
(3)还原第一天增量备份 mysql -uroot -p < mon-increamental.sql
(4)还原当天的数据 mysqlbinlog mysql-bin.000007 | mysql -uroot -p
做成脚本,一个是全量,一个是增量
MySQL的备份和还原