MySQL备份

MySQL备份

Posted by CaiJiahe on August 22, 2017

0x01 备份方法的划分

按类型划分

热备(在线备份)、冷备(离线备份)、温备。

冷备:备份frm文件、共享表空间文件、独立表空间(ibd)文件、重做日志文件。优点备份简单、恢复简单快速。缺点是冷备文件占用空间特别高,跨平台方面解决的不是很好。

按备份后文件内容分

逻辑备份、裸文件备份。

逻辑备份:备份内容可读,一般是sql或者表内实际数据组成。
裸文件备份:复制数据库的物理文件。

按数据库内容分

完全备份、增量备份、日志备份。

日志备份:依靠mysql中的binlog。
增量备份:mysql并没有提供增量备份,可以使用binlog来做(很慢)。另一种方法根据全备的LSN,大于全备的LSN的修改全部备份,加快了备份和恢复的时间(xtrabackup在用)。

备份的一致性

备份一般会要求在备份的那一时刻,备份的一致性。innodb采取的方式是在一个事务中导出所有的表(RR),这样可以保证备份的一致性。

0x02 逻辑备份

mysqldump备份

	mysqldump args > file_name

备份所有数据库:

	mysqldump --all-databases > dump.sql

备份指定数据库:

	mysqldump --databases db1 db2 ... > dump.sql

备份test架构:

	mysqldump --single-transaction test > test_backup.sql

mysqldump的参数:
–single-transaction:在一个事务中开启备份,只在innodb生效。
–lock-tables:锁住整张表,和–single-transaction互斥。
–lock-all-tables:对架构中所有表进行上锁。
–add-drop-databases:在创建数据库之前先删除数据库。这个参数要配合–all-databases或–databases选项一起用。
–master-data[=value]:使用备份转存文件建立一个replication。value=1的时候转存文件记录change master语句,当value=2的时候该语句被注释。会自动忽略–lock-tables选项。
–events:备份事件调度器。
–routines:备份存储过程和函数。
–triggers:备份触发器。
–hex-blob:将binary、varbinary、blob、bit类型备份为十六进制格式。
–tab=path:产生TAB分割的数据文件。
–where=’xxx’:导出给定条件的数据。

select … into out file备份

	select * into outfile 'xxx' from table;

TERMINATED BY:表示列分割符。
ENCLOSED BY:表示对字符的包含符。
ESCAPED BY:表示转义符。
STARTING BY:表示行开始符。

逻辑备份恢复

mysqldump的恢复:

	mysql -u root -p < test_backup.sql

逻辑备份如果由sql语句组成,则可以使用source:

	source /xxx/test_backup.sql

如果通过mysqldump-tab或者select … into outfile导出的数据需要恢复可以通过load data infile来导入(set @@foreign_key_checks=0忽略载入过程的外键检查)。

	load data into table a ignore 1 lines infile '/xxx/a.txt'

mysqlimport包装了一层load data infile。

	mysqlimport --use-threads=N test file1 file2

二进制日志备份

my.cnf中开启

	log-bin=mysql-bin
	sync_binlog=1
	innodb_support_xa=1

二进制日志恢复

使用mysqlbinlog

	mysqlbinlog binlog.[0-10]* | mysql -u root -p test

可以使用选项–start-position、–stop-position、–start-datetime、–end-datetime指定位置开始恢复。

0x03 热备

ibbackup是innodb官方提供的备份工具(收费)。
优点:

  • 在线备份,不阻塞任何sql语句。
  • 备份性能好,复制数据库文件和重做日志文件。
  • 支持压缩备份,可设置不同级别压缩。
  • 跨平台

percona公司提供了xtrabackup,xtrabackup实现了ibbackup所有功能,扩展支持了增量备份功能,但是 开源免费。 完全备份:

	./xtrabackup --backup --target-dir=/full

增量备份:

	./xtrabackup --backup --target-dir=/delta --incremental-basedir=/full

全量备份恢复:

	./xtrabackup --prepare --target-dir=/full

增量备份恢复:

	./xtrabackup --prepare --target-dir=/full --incremental-dir=/delta

http://www.cnblogs.com/digdeep/p/4946230.html

0x04 快照备份

mysql本身不支持快照备份,可以通过文件系统支持快照功能对数据库进行备份(COW)。可将共享表空间、独立表空间、重做日志放到同一个逻辑卷中,对数据库快照备份的时候只需对这个逻辑卷做快照备份即可。

0x05 复制

过程:

  • 主服务器将数据更改写入binlog中。
  • 从服务器的IO线程拉取主服务器的binlog,存入从服务器的中继日志。
  • 从服务器的SQL线程将中继日志写入到本地。

查看主从复制延迟可以通过show slave status和show master status查看。
主从复制,对从节点做快照备份。