MYSQL 全量和增量备份
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.