Jamzy Wang

life is a struggle,be willing to do,be happy to bear~~~

MySQL数据库备份方案小结

2015-01-09 17:23

原创声明:本作品采用知识共享署名-非商业性使用 3.0 版本许可协议进行许可,欢迎转载,演绎,但是必须保留本文的署名(包含链接),且不得用于商业目的。

本文总结一下MySQL中常用的几种备份方案。

1.实时备份

  • 主从复制

主从复制是数据库的一种自动备份机制,使用MySQL中的Replication机制进行实时的数据备份。在多层数据库架构中,用于备份的数据库应位于第二层,以减少复制延迟对数据完整性造成的影响。

2.数据热备

hotbackup 简介:使用Innodb提供的收费数据备份工具在不停止数据库写入的情况下,对采用Innodb引擎存储的数据进行复制备份。 适用范围: a) 数据采用Innodb引擎进行存储 b) 数据一致性需求较为强烈

3.数据冷备

  • a) mysqlhotcopy

简介:mysqlhotcopy是一个随MySQL一起发布的数据备份工具,在不停止mysqld进程的情况下对采用MyISAM引擎存储的数据进行备份。 适用范围: 1) 业务数据采用MyISAM引擎进行存储 2) 对数据的一致性需求不强烈

  • b) 数据库Dump

简介:数据库Dump是指使用mysqldump等工具或select into outfile等语句将MySQL数据导出到文件,并拷贝到备份服务器进行备份的方式。 适用范围: 1) 由于Dump出来的数据需要重新导入MySQL,这一过程非常耗时,本方法仅限于数据量小于20G的情况。 2) 由于Dump出来的数据是文本形式的SQL语句,适用于对备份数据有人工审核需求的情况。

mysqldump语法:

1
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql

如:

1
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql

mysqldump得到的文本数据如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `tutorials_tbl`
--

CREATE TABLE tutorials_tbl (
  tutorial_id int(11) NOT NULL auto_increment,
  tutorial_title varchar(100) NOT NULL default '',
  tutorial_author varchar(40) NOT NULL default '',
  submission_date date default NULL,
  PRIMARY KEY  (tutorial_id),
  UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE=MyISAM;

--
-- Dumping data for table `tutorials_tbl`
--

INSERT INTO tutorials_tbl 
       VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
       VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
       VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

将.sql文件导入数据库:

1
2
3
4
mysql> use DATABASE_NAME;
mysql> source path/to/file.sql;
或者
mysql -u username -p database_name < file.sql
  • c) 停库拷贝

简介:停止mysqld进程,并在MySQL服务停止后通过对数据文件的拷贝进行备份的方式。 适用范围: 1) 数据混合使用MyISAM和Innodb 2) 对数据的一致性需求不强烈

  • e) BinLog全量备份

简介:将线上MySQL服务器的BinLog拷贝到备份服务器进行存档 适用范围: 要求对历史数据进行全量的非容灾性存档。 Binlog日志的配置方法:

1
2
3
4
[mysqld]
log-bin = mysql-bin[-m|-s0|-s1]
expire_logs_days=10
max_binlog_size=100M

从binlog中恢复数据的方法:

1
2
mysqlbinlog bin-log.000001 > sql.txt
mysqlbinlog bin-log.000001 | mysql -u root -p

当有多个binlog文件时,可以将所有binlog文件都导入到一个.sql文件中:

1
2
3
mysqlbinlog /var/lib/mysql-bin.000001 > /logs/allbinlog.sql
mysqlbinlog /var/lib/mysql-bin.000002 >> /logs/allbinlog.sql
mysqlbinlog /var/lib/mysql-bin.000003 >> /logs/allbinlog.sql
  • d) BinLog增量备份

简介:将两次冷备期间的线上MySQL服务器的BinLog拷贝到备份服务器进行增量存档,并在恢复数据的时候对这部分BinLog进行回放。 适用范围: 1) 数据混合使用MyISAM和Innodb 2) 有上述任意一种冷备或热备数据作为基础 3) 对数据的一致性需求较为强烈 恢复数据的方法:

1
2
mysqlbinlog --start-datetime="2011-04-21 10:31:44" bin-log.000001 > sql.txt
mysqlbinlog --stop-datetime="2010-09-05 10:55:44" bin-log.000001 | mysql -uroot -p

Comments