MYSQL 全量和增量备份

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、前提条件

首先,需要设定一个同步的环境出来,可以在两个独立的主机或者同一个主机上实现,详细请参考MySQL做同步实例。接下来的备份工作就都是在Slave上实现了。

下面就拿一个实际的例子来讲解,MySQL Slave的版本为 5.0.27。

假定 datadir 为 /usr/local/mysql/data,备份文件存放目录为 /backup/mysql/,两种备份都由shell脚本来自动完成。

二、全量备份

全量备份的原理是停止slave之后,将数据刷新到磁盘中,然后直接拷贝数据文件。如果数据量相对较小,推荐使用mysqldump来做,较大的话,直接拷贝文件就更便捷了。

shell脚本文件名 backupmysql_fullly.sh:

1.#!/bin/sh

2.

3.#

4.

5.# created by yejr,2006/11/29

6.

7.#

8.

9.# 本脚本用于定期做全量备份,备份的对象是slave上的全部数据

10.

11.# 每次备份之前都先执行"STOP SLAVE; FLUSH TABLES;",然后将

12.

13.# 所有文件拷贝到备份目录下

14.

15.#

16.

17.#取得当前日期,作为备份目录名

19.today=`date +"%Y_%m_%d"`

20.

21.#源目录

22.

23.datadir=/usr/local/mysql/data

24.

25.#目标目录

26.

27.bkdir=/backup/mysql

28.

29.today_bkdir=$bkdir/$today

30.

31.today_full_bkdir=$today_bkdir/full_backup

32.

33.#修改上级目录属性

34.

35.chattr -i $bkdir

36.

37.#判断目标目录是否已经存在

38.

39.if [ ! -d $today_bkdir ] ; then

40.

41.mkdir -p $today_bkdir

42.

43.else

44.

45.chattr -i $today_bkdir

46.

47.fi

48.

49.#执行 slave-stop && flush-logs,停止slave,并且刷新缓存内容到磁盘

51.mysqladmin -hlocalhost -uroot -ppasswd stop-slave

52.

53.mysqladmin -hlocalhost -uroot -ppasswd flush-tables

54.

55.cd $datadir

56.

57.#将ibdata*以及其它需要备份的数据库目录拷贝到目标目录下

58.

59.cp -rf ib* forum f mysql news yejr $today_full_bkdir/

60.

61.#修改文件属主

62.

63.chown -R nobody:nobody $bkdir

64.

65.#执行 slave-start,启动slave

66.

67.mysqladmin -hlocalhost -uroot -ppasswd start-slave

68.

69.#删除过期文件

70.

71.cd $bkdir

72.

73.#找出6天前创建的目录

74.

75.for d in `find . -type d -mtime +6 -maxdepth 1`

76.

77.do

78.

79.#修改当前目录及其子目录属性,然后删除

80.

81.chattr -i $d

83.chattr -i $d/full_backup

84.

85.rm -fr $d

86.

87.done

88.

89.#增加属性标志位

90.

91.chattr +i $bkdir

复制代码

三、增量备份

增量备份的原理是利用binlog的特性,定期刷新binlog,然后将旧的binlog备份起来,再加上以前的全量备份,就能在较短时间内得到当前的运行数据。

shell脚本文件名 backupmysql_hourly.sh:

1.#!/bin/sh

2.

3.#

4.

5.# created by yejr,2006/11/29

6.

7.# 本脚本用于定期做增量备份,备份的对象是binlog

8.

9.# 每次备份之前都先执行 flush-logs,然后将最近的binlog移动

10.

11.# 到备份目录下

12.

13.#

14.

15.#取得当前日期,作为备份目录名

16.

17.today=`date +"%Y_%m_%d"`

18.

19.#源目录

20.

21.datadir=/usr/local/mysql/data

22.

23.#目标目录

24.

25.bkdir=/backup/mysql

26.

27.today_bkdir=$bkdir/$today

28.

29.#修改上级目录属性

30.

31.chattr -i $bkdir

32.

33.#判断目标目录是否已经存在

34.

35.if [ ! -d $today_bkdir ] ; then

36.

37.mkdir -p $today_bkdir

38.

39.else

40.

41.chattr -i $today_bkdir

42.

43.fi

44.

45.#先执行"flush logs",创建出新的log文件

46.

相关文档
最新文档