文档章节

MySQL常用的三种备份方法

Tosmiling
 Tosmiling
发布于 2015/05/19 12:21
字数 1434
阅读 4
收藏 0
点赞 0
评论 0

mysql按照备份恢复方式分为逻辑备份和物理备份。逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现,物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。

这2种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小

下面介绍以下3种常用的备案方法

一、mysqldump工具备份

mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具。支持基于InnoDB的热备份。但由于是逻辑备份,所以速度不是很快,适合备份数据量比较小的场景。
mysqldump完全备份+二进制日志 —>实现时间点恢复

温备:

在使用MyISAM引擎中,只能使用温备份,这时候要防止数据的写入,所以先加上读锁

这时候可以进入数据库手动加读锁。这样比较麻烦,在mysqldump工具中直接有一个加锁的选项

mysqldump --databases mydatabase --lock-all-tables --flush-logs> /tmp/backup-`date +%F-%H-%M`.sql

如果是针对某张表备份,只要在数据库名称后面加上表名称就行了

这里注意,要实现时间点的恢复,加上--flush-logs选项,在使用备份文件恢复后,然后再基于二进制日志进行时间点的恢复

时间点的恢复方法

mysqlbinlog mysql-bin.000000x > /tmp/PointTime.sql

然后用mysql命令导入这个sql脚本就行了

热备:如果使用的是InnoDB引擎,就不必进行对数据库加锁的操作,加一个选项既可以进行热备份:--single-transaction
mysqldump --databases mydb --single-transaction --flush-logs --master-data=2 > /tmp/backup-`date +%F-%H-%M`.sql

注意点
恢复的时刻关闭二进制日志
mysql>set sql_log_bin=0;
因为这是基于逻辑备份方式,在恢复日志时会执行sql语句插入数据,而恢复时候插入数据的日志没有意义。

二、基于LVM快照备份

在物理备份中 ,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令打包。但这些只能进行冷备份
不同的存储引擎能备份的级别也不一样,MyISAM能备份到表级别,而InnoDB不开启每表一文件的话就只能备份整个数据库。

下面就介绍下使用LVM的快照功能进行备份
为了安全 首先在数据库上施加读锁
mysql>FLUSH TABLES WITH READ LOCK;

刷新一下二进制日志,便于做时间点恢复

mysql>FLUSH LOGS;

然后创建快照卷

lvcreate –L 1G –s –n data-snap –p –r /dev/myvg/mydata

最后进入数据库释放读锁

UNLOCK TABLES;

挂载快照卷进行备份

mount –r /dev/myvg/data-snap /mnt/snap

然后对/mnt/snap下的文件进行打包备份
还原的时候,关闭mysqld,然后备份二进制日志后将原来备份的文件还原进去,然后通过二进制日志还原到出错的时间点(通过二进制还原时间点的时候不要忘了暂时关闭二进制日志)

三、使用percona提供的xtrabackup(推荐)

支持InnoDB的物理热备份,支持完全备份,增量备份,而且速度非常快,而且支持InnoDB引擎的数据在不同数据库迁移
为了让xtrabackup支持更多的功能扩展,配置InnoDB每表一个文件的功能
在my.cnf的mysqld中加入此项: innodb_file_per_table=1
此项不启用将不支持备份单独的表
但如果之前没有启用这个选项,要实现单表一文件的话,可以用mysqldump导出数据,然后启用该选项,恢复回去后就是单表一文件了

首先下载xtrabackup,下载地址:http://www.percona.com/software/percona-xtrabackup,可以直接下载rpm包安装即可。

xtrabackup有完全备份,增量备份和部分备份(前面开启innodb每表一文件,就是为了此功能)

1.完全备份整个数据库

innobackupex --user=root --password=123456 /tmp/backup

此时会在/tmp/backup目录下生成以时间为名的文件夹,里面是备份文件

在这里,备份的数据还不能直接用来还原,因为备份数据中会含有尚未提交的事务或者未同步到数据文件中的事物。这里需要用prepare回滚事物使数据文件处于一致性。

innobackupex --apply-log /tmp/backup/dir

处理完成后才能用来还原数据,用此命令还原

innobackupex --copy-back /tmp/backup/dir

要实现时间点还原,还是需要使用二进制日志

2.增量备份
 
增量备份支持Innodb,对于MyISAM只能完全备份
innobackupex –incremental /tmp/backup/incremental --incremental-basedir=/tmp/backup/dir

在进行一次增量备份--incremental-basedir要指向上一次增量备份的目录

如果要进行还原,先进行prepare处理

这里处理的方式,将备份合并

innobackupex --apply-log --redo-only /tmp/backup/dir

innobackupex --apply-log --redo-only /tmp/backup/dir --incremental-dir=/tmp/backup/incremental

最后使用完全备份的那个备份还原

至于差异备份,只要每次将basedir指向完全备份文件夹就行了

最后再废话一句:要实现时间点还原,是需要使用二进制日志的,所以备份好二进制日志至关重要。除非在恢复时间点和上一次备份时间点这段时间的数据对你来说无所谓。


本文转载自:

共有 人打赏支持
Tosmiling
粉丝 3
博文 3
码字总数 0
作品 0
杭州
MYSQL的mysqldump+binlog备份

mysql是一个关系型数据库管理系统,由瑞典Mysql AB公司开发,目前属于Oracle旗下的产品。Mysql是最流行的关系型数据库之一,在web应用方面,Mysql是最好的RDBMS(Relational Database Managem...

mlon ⋅ 2017/11/25 ⋅ 0

基于mysqldump及lvm snapshot备份mysql数据库

mysql备份类型主要有一下三种: 热备份:备份时服务照常在线,读写都不受影响; 温备份:备份时仅可进行读操作,需要申请锁; 冷备份:也叫离线备份,读写操作必须中止; 不同的存储引擎对备...

li13522275125 ⋅ 2014/04/22 ⋅ 0

MYSQL常用三种备份方式

MYSQL备份: 一:单表数据备份: 每次只能备份一张表,只能备份数据,不能备份表结构。 通常的应用:将表中的数据进行导出到文件。 备份:从表中选出一部分数据保存到外部的文件。 语法:(前...

LUKE1993 ⋅ 2016/10/20 ⋅ 0

MySQL DBA 常用手册

1.mysql的远程连接命令可以远程导入导出数据 mysqldump --default-character-set=gb2312 -h255.255.000.00 -uroot -pxxxxxx mydatabase>d:data.sql 将指定的数据库导出到一个外部SQL文件中去...

芒果龙 ⋅ 2011/11/10 ⋅ 1

mysql备份之mysqldump工具

参考文档: 利用mysqldump+二进制日志实现备份恢复数据库:http://www.178linux.com/60616 mysql进阶篇(三种备份方法总结:lvm, mysqldump, xtrabackup):http://www.178linux.com/9781 注意...

黎晨 ⋅ 2017/05/19 ⋅ 0

mysql如何实时热备份

要保证线上数据库的安全,备份是通常会想到的办法,常用的备份方案有,热copy,第3方工具,快照,镜像等,这些方法均对数据库或系统有一定的影响,还有个方案就是主从,而且从库不要实时同步...

swingcoder ⋅ 2016/02/25 ⋅ 0

mysql增量备份及恢复解决方案

前言 操作系统崩溃、电源故障、文件系统崩溃和硬件故障等异常状况都可能导致我们正在使用的数据库出现故障而产生数据库中数据不一致的情况。为了保证数据库使用安全,必须定期备份数据库;数...

徐学良 ⋅ 2015/07/23 ⋅ 0

第19章 简单的MySQL操作

1. 如何更改系统环境变量PATH? vim /etc/profile.d/path.sh 加入 #!/bin/bash export PATH=$PATH:/usr/local/mysql/bin:/usr/local/apache2/bin 2. 默认mysql安装好后,并没有root密码,如何......

WINWINJJ ⋅ 2016/11/14 ⋅ 0

TODO:MongoDB MySQL数据库备份

TODO:MongoDB MySQL数据库备份 MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodump –d databasename –o /data/dbbak...

OneTODO ⋅ 2016/11/05 ⋅ 0

MySQL数据库的备份与恢复的三种方法

MySQL数据库的备份与恢复的三种方法 1.利用mysqldump实现从逻辑角度完全备份mysql,配合二进制日志备份实现增量备份 2.利用lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现...

挚爱linux ⋅ 2017/07/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

005. 深入JVM学习—Java堆内存参数调整

1. JVM整体内存调整图解(调优关键) 实际上每一块子内存区域都会存在一部分可变伸缩区域,其基本流程:如果内存空间不足,则在可变的范围之内扩大内存空间,当一段时间之后,内存空间不紧张...

影狼 ⋅ 10分钟前 ⋅ 0

内存障碍: 软件黑客的硬件视图

此文为笔者近日有幸看到的一则关于计算机底层内存障碍的学术论文,并翻译(机译)而来[自认为翻译的还行],若读者想要英文原版的论文话,给我留言,我发给你。 内存障碍: 软件黑客的硬件视图...

Romane ⋅ 43分钟前 ⋅ 0

SpringCloud 微服务 (七) 服务通信 Feign

壹 继续第(六)篇RestTemplate篇 做到现在,本机上已经有注册中心: eureka, 服务:client、order、product 继续在order中实现通信向product服务,使用Feign方式 下面记录学习和遇到的问题 贰 or...

___大侠 ⋅ 今天 ⋅ 0

gitee、github上issue标签方案

目录 [TOC] issue生命周期 st=>start: 开始e=>end: 结束op0=>operation: 新建issueop1=>operation: 评审issueop2=>operation: 任务负责人执行任务cond1=>condition: 是否通过?op3=>o......

lovewinner ⋅ 今天 ⋅ 0

浅谈mysql的索引设计原则以及常见索引的区别

索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索...

屌丝男神 ⋅ 今天 ⋅ 0

String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 首先说运行速度,或者说是, 1.执行速度 在这方面运行速度快慢为:StringBuilder(线程不安全,可变) > StringBuffer...

时刻在奔跑 ⋅ 今天 ⋅ 0

java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/Credentials credentials = Wallet......

以太坊教程 ⋅ 今天 ⋅ 0

Oracle全文检索配置与实践

Oracle全文检索配置与实践

微小宝 ⋅ 今天 ⋅ 0

mysql的分区和分表

1,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一...

梦梦阁 ⋅ 今天 ⋅ 0

exception.ZuulException: Forwarding error

错误日志 com.netflix.zuul.exception.ZuulException: Forwarding error Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: xxx timed-out and no fallback available. Ca......

jack_peng ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部