http://lizhenliang.blog.51cto.com/7876557/1302732


简单介绍

备份类型 备份方式

热备份:备份期间不需要服务停机,业务不受影响;

温备份:备份期间仅允许读的请求;

冷备份:备份期间需要关闭Mysql服务或读写请求都不受影响;

完全备份:full backup备份全部数据集;

增量备份:incrementalbackup 上次完全备份或增量备份以来改变的数据;

差异备份:differentialbackup 上次完全备份以来改变的数据;

完全+增量备份方式恢复用到的备份文件:完全备份+增量备份+二进制文件;

完全+差异备份方式恢复用到的备份文件:完全备份+增量备份+二进制文件;

逻辑备份
优点 缺点

逻辑备份可以使用编辑器或文本处理工具进行编辑或查看;

恢复非常简单;

比较灵活;

与存储引擎无关;

有助于避免数据损坏;

逻辑备份可以使用编辑器或文本处理工具进行编辑或查看;

恢复非常简单;

比较灵活;

与存储引擎无关;

有助于避免数据损坏;

 物理备份
优点 缺点

备份与恢复数据比较简单;

InnoDBMyISAM的物理备份容易跨平台、操作系统和Mysql版本;

恢复速度比较快,不需要重新构建索引;

InnoDB的原始文件会比逻辑备份大得多;

物理备份不是总可以跨平台、操作系统及Mysql版本;

文件名大小写敏感和浮点格式有可能会有问题

备份对象:
数据文件、配置文件、代码:存储过程,存储函数、触发器等、二进制日志、事务日志、服务器配置、管理脚本、任务计划等。

Mysqldump增量备份

使用Mysqldump备份工具实现完全备份,并结合二进制日志实现增量备份。

特点:逻辑备份工具、支持InnoDB热备份、MyISAM温备份;备份与恢复较慢

一、备份数据库

1

2

3

mysqldump -uroot -poldboy123 --lock-all-tables --flush-logs --databases test /mysqlbackup/test_`date +%F`.sql

--lock-all-tables:备份时为所有表请求加锁

--flush-log:备份之前刷新日志

二、备份二进制文件

在test库中创建一个表,增加数据,模拟增量备份,并查看当前二进制日志位置。

1

cp /usr/local/mysql/data/mysqld-bin.00000* /mysqlbackup

1

2

3

4

5

6

7

mysql> create table abc (number INT(11), name varchar(100));

mysql> show master status;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000004 | 221 | | |

+-------------------+----------+--------------+------------------+

三、查看二进制文件和完整备份后LOG_POS值在什么位置

1

2

3

less /mysqlbackup/test_2013-09-29.sql  #前几行可以看到在106

-- Position to start replication or point-in-time recovery from

-- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=106;

四、二进制增量备份

1>.完整备份后到现在备份:

1

2

3

mysqlbinlog --start-position=106 /var/lib/mysql/mysqld-bin/mysql/mysqld-bin.000005 > /mysqlbackup/test_incremental.sql

--start-position:从哪个位置开始导出二进制日志

--stop-position:从哪个位置结束,到末尾可以不指定

2>.向数据库添加一条记录,然后删除数据库,再恢复到当前数据

1

2

3

4

5

6

7

mysql>create table abd (number INT(1),name varchar(10));

mysql> show master status;   #查看二进制所在位置

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000005 | 527 | | |

+-------------------+----------+--------------+------------------+

五、恢复数据到当前数据,需要恢复完整备份+增量备份+增量备份后删除之前的二进制文件

1

2

3

4

5

6

mysqlbinlog /var/lib/mysql/mysqld-bin.000005  #查看二进制,看在什么时候做的,文件最后下面看出在446

# at 446

#130929 11:04:16 server id 1 end_log_pos 527 Query thread_id=10 exec_time=0 error_code=0

SET TIMESTAMP=1380467056/*!*/;

drop database test

/*!*/;

六、导出之前删除数据库至增量备份后的二进制文件

1

2

3

4

5

6

mysqlbinlog --start-position=220 --stop-position=446 /var/lib/mysql/mysqld-bin.000005 > /mysqlbackup/test_446.sql

mysql> source/backupn/test_2013-09-06.sql #恢复完整备份

mysql> source/backup/test_incremental.sql #恢复增量备份

mysql> source/backup/test_446.sql #恢复增量后至删除前的数据

mysql> use test

mysql> show tables;查看数据恢复成功!

Mylvmbackup快速完整备份

mylvmbackup 是一个工具,用于快速创建完整的物理备份MySQL服务器的数据文件,备份数据时,将锁定 MySQL 所有的表,并将缓存中数据写到磁盘,然后执行 LVM 快照后解锁。

使用LVM逻辑卷快照功能实现几乎热血备份的完全备份,并结合二进制日志实现增量备份。

特点:几乎接近于热备份、物理备份、备份与恢复较快。

必须mysql数据库存放目录是LVM卷下,如果要做增量备份,bin-log日志也要在LVM卷下,而且LVM卷要有空间给快照备份。

修改mysql和bin-log日志位置:

1

2

3

vi /etc/my.cnf

datadir=/myvg/data

bin-log=/myvg/binlog/mysqld-bin

mysql有以下几种日志: 
错误日志: -log-err 
查询日志: -log 
慢查询日志: -log-slow-queries 
更新日志: -log-update 
二进制日志: -log-bin

一、创建LVM卷

1

2

3

4

5

6

7

8

9

10

1>.创建物理卷

pvcreate /dev/sdb

2>.创建卷组

vgcreate myvg /dev/sdb

3>.创建逻辑卷

lvcreate -n mylv -L 19G myvg

4>.格式化文件系统

mkfs.ext4 /dev/myvg/mylv

5>.挂载使用

mount /dev/myvg/mylv/ /data

二、安装使用Mylvmbackup

1

2

3

wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.14-0.noarch.rpm

yum install -y perl-TimeDate perl-Config-IniFiles perl-DBD-MySQL #安装依赖包

rpm -ivh mylvmbackup-0.14-0.noarch.rpm


1、修改主配置文件

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

vi /etc/mylvmbackup.conf

[mysql]

user=root

password=123.com

host=localhost

port=3306

socket=/tmp/mysql.sock

mycnf=/etc/my.cnf

[lvm]

vgname=myvg #卷组的名字

lvname=mylv #逻辑卷的名字

lvsize=5G #备份时创建的snapshot的大小

[fs]

mountdir=/opt/snap_mnt #snapshot的mount位置

backupdir=/backup #备份打包后的存放位置

relpath=mysqldata #如果只是想备份逻辑卷下的某个目录的话,则要指出来

[tools]

lvcreate=/usr/sbin/lvcreate

lvremove=/usr/sbin/lvremove

mount=/bin/mount

tar=/bin/tar

umount=/bin/umount

[misc]

prefix=backup #备份打包文件的命名前缀

suffix=_mysql #定义备份文件名后缀

2、备份数据库并验证备份文件

1

2

3

4

5

6

7

[root@202 ~]# mylvmbackup

20130906 11:55:33 Info: Running: lvremove -f /dev/myvg/mysql_snap

Logical volume "mysql_snap"successfully removed

20130906 11:55:34 Info: DONE: Removing snapshot

出现以上信息表示备份成功,最后删除快照卷!

[root@202 ~]# ls /mysqlbackup/

backup-201309029_115532_mysql.tar.gz

完整备份成功!