MySQL的第一款备份工具mysqldump,我们在上篇文章中已经和大家聊过,如果大家还有疑惑,请点击mysqldump
MySQL的第二款备份工具lvm快照,那么今天我们就聊聊它lvm快照卷温备
mysqldump能够实现对InnoDB存储引擎实现热备,但是却无法实现对MyISAM引擎进行热备;
而今天将要和大家介绍lvm能够实现对MyISAM引擎实现几乎热备
使用lvm快照进行mysql的备份时,需要满足以下条件:
-
数据文件要在逻辑卷上
-
此逻辑卷所在卷组必须有足够空间使用快照卷
-
数据文件和事务日志要在一个逻辑卷上
实现lvm快照进行mysql备份的流程
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
|
1
、打开会话,施加读锁,锁定所有表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2
、通过另外一个终端,保存二进制日志文件及相关位置信息;
# mysql -e 'show mater status' > /proc/master.info
3
、创建快照卷
# lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv
4
、释放锁
mysql> UNLOCK TABLES;
5
、挂在快照卷、备份
# mount
# cp -a
6
、删除快照卷和无用数据
# lvremove --force LV_NAME
# rm -rf mysql-bin.*
7
、增量备份二进制日志
# cp
8
、故障发生、恢复数据
# source
|
mysql数据库lvm快照备份
1、打开会话,施加读锁,锁定所有表,并刷新日志;
1
2
|
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
|
2、通过另一个终端,保存二进制日志文件及湘椴信息;
1
2
|
# mysql -uroot -p -e 'show master status\G;' > /backup/master-`date +%F`.info
# cat /backup/master-`date +%F`.info
|
3、创建快照卷
1
|
# lvcreate -L 3G -s -p r -n mydata_snap /dev/myvg/mydata
|
4、释放锁
1
|
mysql> UNLOCK TABLES;
|
5、挂在快照卷、备份
1
2
3
4
5
|
# mkdir /mnt/mydata_snap
# mount /dev/myvg/mydata_snap /mnt/mydata_snap/ -o ro
# mkdir /backup/full-backup-`date +%F`
# cp -a /mnt/mydata_snap/* /backup/full-backup-
2015
-
03
-
05
/
|
6、删除快照卷和无用数据
1
2
3
4
5
6
|
删除快照卷
# umount /mnt/mydata_snap/
# lvremove --force /dev/myvg/mydata_snap
由于这里备份的日志文件爱你是无用的,因此可以删除
# rm -rf /backup/full-backup-2015-03-05/data/mysql-bin.*
|
7、增量备份二进制日志
(1)首先在mysql数据库中做一些写入操作:
1
2
3
4
5
6
7
8
9
10
11
|
mysql> FLUSH LOGS;
mysql> USE mydb;
mysql> INSERT INTO tutor(Tname) VALUES(
'it'
);
mysql> INSERT INTO tutor(Tname) VALUES(
'3dmax'
);
mysql> show master status;
#日志文件变化、数据偏移位发生变化
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 584 | | |
+------------------+----------+--------------+------------------+
1 row
in
set
(0.00 sec)
|
(2)备份增量日志:需要注意的是,由于我使用了FLUSH LOGS滚动日志,因此理论上是引用lvm快照卷备份后有两个日志的增量数据需要备份即mysql-bin.000004和mysql-bin.000005
(3)查看备份开始时的日志位置:
1
2
3
4
5
6
|
[root@localhost ~]# cat /backup/master-2015-03-05.info
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
|
(4)导出日志:
1
2
|
# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000004 > /backup/04.sql
# mysqlbinlog /mydata/data/mysql-bin.000005 > /backup/05.sql
|
8、恢复数据库
1)模拟损坏:
我这里还是采用这直接删除数据文件和目录的方式:
1
|
# rm -rf /mydata/data*
|
2)恢复完全备份:直接cp
1
|
# cp -a /backup/full-backup-2015-03-05/data/* /mydata/data/
|
3)启动mysql服务
1
|
# service mysqld start
|
4)导入增量备份
1
2
|
# mysql -uroot -p < /backup/04.sql
# mysql -uroot -p < /backup/05.sql
|
5)使用lvm快照卷备份注意事项:如果需要备份单一库,则InnoDB需设置为独立表空间
1
2
3
4
5
6
7
8
|
设置每个表独立使用一个表空间
mysql> SHOW GLOBAL VARIABLES LIKE
'%innodb_file_per_table%'
;
+---------------- -------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row
in
set
(0.00 sec)
|
-
个人愚见:
-
这种热备工作我用的不是很多,可能是公司的环境不同吧!我会在后续章节中和大家介绍第三款开源备份工具xtrabackup,这款备份工具个人感觉是非常不错,在性能方面远超mysqldump,那么我们下回聊。
-
下几篇mysql文章的方向:
-
性能调试工具
-
压力测试