MySQL并没有提供官方增量备份的方法。真正增量备份,只需要记录当前每个页最后的检查点的LSN,如果大于之前完全备份时的LSN,则备份该页,否则不用备份,而不是备份日志更改。(是xtrabackup工具增量备份的原理)
InnoDB实现一致性的备份的方式:先开启一个事务,然后导出一组相关的表,最后提交。(前提是正确设计应用程序)mysqldump指定—single-transaction可获得InnoDB的一致性备份。
冷备
备份MySQL的.frm文件、共享表空间文件、独立表空间文件(*.ibd)、重做日志,以及my.cnf。(冷备并不总是可以轻易跨平台)
逻辑备份
mysqldump
SELECT … INTO OUTFILE
- SELECT * INTO OUTFILE '/tmp/tablename.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM tablename WHERE condition;
-
-
LOAD DATA LOW_PRIORITY LOCAL INFILE '/tmp/tablename.csv' INTO table tablename FIELDS TERMINATED BY ','; (需FILE权限)
注:字段[TERMINATED BY ‘string’]表示每个列的分隔符,[[OPTIONALLY]
ENCLOSED BY ‘char’]表示对于字符集的包含符,[ESCAPED BY ‘char’]表示转义符,[STARTING BY ‘string’]表示每行的开始符号,TERMINATED BY ‘string’表示每行的结束符号。
导入
mysql > SOURCE
/home/mysql/test_backup.sql;
mysqlimport本质为LOAD DATA INFILE的命令接口,通过—user-thread参数并发导入不同的文件,并发导入多个文件。
热备
Ibbackup可同时备份MyISAM和InnoDB,工作原理:
- 记录备份开始时InnoDB存储引擎重做日志文件检查点的LSN
- 拷贝共享表空间文件以及独立表空间文件
- 记录拷贝完表空间文件后InnoDB重做日志文件检查点的LSN
- 拷贝备份时产生的重做日志
Xtrabackup
使用方法:xtrabackup –backup| --prepare [OPTIONS]
快照备份
通过文件系统支持的快照功能对数据库进行备份。备份前提是所有的数据库文件在同一文件分区中,然后对该分区执行快照工作。
LVM使用了写时复制(Copy-on-write)技术来创建快照。当创建一个快照时,仅拷贝原始卷里数据的元数据,并不会有数据的物理操作,因此创建过程很快。完成之后,原始卷上有写操作时,快照会跟踪原始卷块的改变,将要改变的数据在改变之前拷贝到快照预留的空间里。而对于快照的读取操作,若读取的数据块在创建快照后没有修改过,那么会将读操作直接定向到原始卷上,否则将读取保存在快照中的原始数据。因此,写时复制保证了读取快照时得到的数据与快照创建时的数据是一致的。
MySQL复制共涉及三个线程:MASTER上I/O线程,SLAVE上I/O线程和SQL线程。
- 快照+复制的备份架构
- 数据分布
- 读取的均衡负载:一般可以通过DNS的Round-Robin和Linux的LVS功能实现
- 数据库备份:SLAVE不能代替备份
- 高可用性和故障转移
注:如涉及版权及其他问题,请联系本人。谢谢!
|