开发者社区> 李振良> 正文

Mysql增量备份之Mysqldump & Mylvmbackup

简介:
+关注继续查看

简单介绍

备份类型 备份方式

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

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

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

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

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

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

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

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

逻辑备份
优点 缺点

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

恢复非常简单;

比较灵活;

与存储引擎无关;

有助于避免数据损坏;

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

恢复非常简单;

比较灵活;

与存储引擎无关;

有助于避免数据损坏;

 物理备份
优点 缺点

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

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

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

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

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

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

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

Mysqldump增量备份

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

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

一、备份数据库

1
2
3
mysqldump -uroot -p123.com --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

完整备份成功!


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql数据库高级篇 - Mysql性能优化(2)
Mysql数据库高级篇 - Mysql性能优化(2)
294 0
Mysql数据库高级篇 - Mysql性能优化(1)
Mysql数据库高级篇 - Mysql性能优化(1)
175 0
MySQL数据库系列(八)-------高级语句二
可以被当作是虚拟表或存储查询
37 0
MySQL触发器里的流程控制语句 case when .. then else ... end;组合+继承;高级数据库复习
MySQL触发器里的流程控制语句 实际上就是if 与 if else 我们的流程控制语句可以在业务实现类实现判断 也可以通过数据库MySQL触发器来实现流程控制语句
89 0
《MySQL高级篇》八、索引优化与查询优化(五)
《MySQL高级篇》八、索引优化与查询优化
111 0
《MySQL高级篇》八、索引优化与查询优化(四)
《MySQL高级篇》八、索引优化与查询优化
103 0
+关注
李振良
6年互联网运维经验,擅长Linux,Python,Docker,MySQL,运维自动化等技术领域。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
对比MySQL,看HBase的能力及场景
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像