该文章转载于:http://lansgg.blog.51cto.com/5675165/1270430(Coffee_蓝山的博客)
热备份:读、写不受影响;
温备份:仅可以执行读操作;
冷备份:离线备份;读、写操作均中止;
mysqldump 逻辑备份工具,支持所有引擎,MyISAM引擎是温备,InnoDB引擎是热备,备份速度中速,还原速度非常非常慢,但是在实现还原的时候,具有很大的操作余地。具有很好的弹性。
mysqlhotcopy 物理备份工具,但只支持MyISAM引擎,基本上属于冷备的范畴,物理备份,速度比较快。
cp 冷备份,支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。
lvm 几乎是热备份,支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快,几乎是热备。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。
xtrabackup 开源工具 MyISAM是温备份,InnoDB是热备份 ,是ibbackup商业工具的替代工具
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@centos test]# vim /etc/my.cnf
[mysqld]
datadir=/usr/data
socket=/tmp/mysql.sock
user=mysql
server-id=
1
log-bin=mysql-bin
report-port=
3306
port=
3306
symbolic-links=
0
[mysql_safe]
log-error=/
var
/log/mysqld.log
pid-file=/
var
/run/mysqld/mysqld.pid
|
数据文件要在逻辑卷上;
此逻辑卷所在卷组必须有足够空间使用快照卷;
数据文件和事务日志要在同一个逻辑卷上;
1
|
mysql> show master status;
|
1
|
mysqldump -u root -p --all-databases --lock-all-tables --routines --triggers --events --master-data=
2
--flush-logs > /backup/
201308071550
.full.sql
|
1
2
3
4
5
6
7
|
--all-databases #备份所有库
--lock-all-tables #为所有表加读锁
--routinge #存储过程与函数
--triggers #触发器
--events #记录事件
--master-data=
2
#在备份文件中记录当前二进制日志的位置,并且为注释的,
1
是不注释掉在主从复制中才有意义
--flush-logs #日志滚动一次
|
1
|
mysql> insert into test.t1(id,user_name,user_passwd)values(
10000
,
'刘德华'
,
'123'
),(
10001
,
'张学友'
,
'123'
),(
10002
,
'郭富城'
,
'123'
);
|
1
|
cp /usr/data/mysql-bin.
000007
/backup/
201308071550
.full.binlog.
000001
|
1
2
3
4
5
6
|
rm -rf /usr/data/*
killall mysqld
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/data/ --user=mysql
service mysqld start
mysql -u root -p
mysql> source /backup/
201308071550
.full.sql
|
1
|
[root@centos ~]# mysqlbinlog /backup/
201308071550
.full.binlog.
000001
|mysql test
|
1
|
mysql> flush tables
with
read lock;
|
1
2
|
mkdir /backup/`date +%F-%H-%M-%S`
cp -pr /usr/data/* /backup/
2013
-
08
-
07
-
17
-
02
-
19
/
|
1
|
mysql> unlock tables;
|
1
2
3
4
5
|
rm -rf /usr/data/*
killall mysqld
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/data/ --user=mysql
cp -pr /backup/
2013
-
08
-
07
-
17
-
02
-
19
/* /usr/data/
service mysqld start
|
1
2
|
mysql> flush tables
with
read lock;
mysql> flush logs;
|
1
|
lvcreate -L 1G -n mysql-snapshot -s -p r /dev/mylvm/lansgg
|
1
2
3
4
|
-L 1G #逻辑卷大小
-n mysql-snapshot #生成快照的名字
-s #指定源逻辑卷
-p r #permission 权限设置
|
1
|
mysql> unlock tables;
|
1
2
3
4
5
|
mkdir /backup/lvmsnapshot
mount /dev/mylvm/mysql-snapshot /mnt/
cp -pr /mnt/* /backup/lvmsnapshot/
umount /mnt/
lvremove /dev/mylvm/mysql-snapshot
|
1
2
3
|
rm -rf /usr/data/*
killall mysqld
cp -pr /backup/lvmsnapshot/* /usr/data/
|
1
|
yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.* -y
|
1
2
3
4
|
wget http:
//www.percona.com/redir/downloads/XtraBackup/LATEST/binary/Linux/i686/percona-xtrabackup-2.1.3-608.tar.gz
tar zxvf percona-xtrabackup-
2.1
.
3
-
608
.tar.gz
cd percona-xtrabackup-
2.1
.
3
/bin/
cp * /usr/bin/
|
1
|
innobackupex --ibbackup=xtrabackup --user=root --password=
123
--defaults-file=/etc/my.cnf /tmp/data/
|
xtrabackup_checkpoints 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
xtrabackup_binlog_info mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
xtrabackup_binary 备份中用到的xtrabackup的可执行文件。
backup-my.cnf 备份命令用到的配置选项信息。
xtrabackup_logfile 记录标准输出信息xtrabackup_logfile
1
2
3
4
5
6
|
killall mysqld
rm -rf /
var
/lib/mysql/*
innobackupex --apply-log /tmp/data/
2013
-
08
-11_14-
54
-
26
/
innobackupex --copy-back /tmp/data/
2013
-
08
-11_14-
54
-
26
/
chown -R mysql.mysql /
var
/lib/mysql/
service mysqld start
|
1
|
mysql> insert into test.t1(id,user_name) values(
10
,
'张三'
);
|
1
2
3
4
|
innobackupex --ibbackup=xtrabackup --user=root --password=
123
--incremental --incremental-basedir=/tmp/data/
2013
-
08
-11_14-
54
-
26
/ /tmp/data/
#--incremental 指定是增量备份
#--incremental-basedir 指定基于哪个完整备份做增量备份,最后是增量备份保存的目录
ps:增量备份只能对InnoDB引擎做增量备份,对MyISAM的表是完全复制
|
1
2
3
4
5
6
7
|
killall mysqld
rm -rf /
var
/lib/mysql/*
innobackupex --ibbackup=xtrabackup --apply-log --redo-only /tmp/data/
2013
-
08
-11_14-
54
-
26
/
innobackupex --ibbackup=xtrabackup --apply-log /tmp/data/
2013
-
08
-11_14-
54
-
26
/ --incremental-dir=/tmp/data/
2013
-
08
-11_15-
16
-
47
/
innobackupex --copy-back /tmp/data/
2013
-
08
-11_14-
54
-
26
/
chown -R mysql.mysql /
var
/lib/mysql/
service mysqld start
|
1
|
innobackupex --ibbackup=xtrabackup --user=root --password=
123
--defaults-file=/etc/my.cnf --database=test --stream=tar /tmp/data/ > /tmp/data/testfull201308111624.tar
|
1
|
innobackupex --ibbackup=xtrabackup --user=root --password=
123
--defaults-file=/etc/my.cnf --database=test --stream=tar /tmp/data/ |gzip > /tmp/data/testfull201308111628.tar.gz
|
1
|
innobackupex --ibbackup=xtrabackup --user=root --password=
123
--database=test --incremental --incremental-basedir=/tmp/data/
2013
-
08
-11_14-
54
-
26
/ /tmp/data/add/
|