mysql数据备份3种方案
本文源出处:http://www.lustlost.com/?p=101
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_file_per_table和innodb_expand_import)
完全备份整个数据库
innobackupex --user=root --password=123456 /tmp/backup
此时会在/tmp/backup目录下生成以时间为名的文件夹,里面是备份文件
在这里,备份的数据还不能直接用来还原,因为备份数据中会含有尚未提交的事务或者未同步到数据文件中的事物。这里需要用prepare回滚事物使数据文件处于一致性。
innobackupex --apply-log /tmp/backup/dir
处理完成后才能用来还原数据,用此命令还原
innobackupex --copy-back /tmp/backup/dir
要实现时间点还原,还是需要使用二进制日志
增量备份
增量备份支持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指向完全备份文件夹就行了
最后再废话一句:要实现时间点还原,是需要使用二进制日志的,所以备份好二进制日志至关重要。除非在恢复时间点和上一次备份时间点这段时间的数据对你来说无所谓。。。
转载于:https://blog.51cto.com/lustlost/974762
mysql数据备份3种方案相关推荐
- mysql数据备份方案
三种常用mysql数据备份方案 备份 MySQL 数据库有多种方案,以下是常见的几种备份方案及其操作步骤和相应的命令: 1.使用 mysqldump 命令进行逻辑备份: 操作步骤: 打开命令行或终端窗 ...
- 文件服务器文件多备份方案,FileYee数据备份四种备份方案详解
原标题:FileYee数据备份四种备份方案详解 其实有很多用户对FileYee数据备份软件不是特别熟悉,今天小编带大家了解一下FileYee的四种备份方案,一定会让大家对于数据备份有一个新的了解. 之 ...
- 几种异地数据备份软件/系统方案
异地数据备份软件/系统方案 1.如果远程机在同局域网,可以采用共享文件夹,只做复制脚本计划任务运行,定时拷贝到同网内机器共享文件夹内. 可以使用Windows server 自带的备份软件" ...
- MySQL数据备份与SQL语句
MySQL数据备份与SQL语句 1.mysql数据库备份与恢复 1.1 数据库常用备份方案 数据库备份方案: 全量备份 增量备份 差异备份 备份方案 特点 全量备份 全量备份就是指对某一个时间点上的所 ...
- Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程
本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 数据备份与还原第一篇分享给大家,具体内容如下 基础概念: ...
- mysql数据备份恢复
数据备份恢复 一.概述 MySQL数据备份即databases Binlog my.cnf 所有备份数据都应放在非数据库本地,而且建议有多份副本.测试环境中做日常恢复演练,恢复较备份更为重要. 备份: ...
- 7、 MySQL数据备份
MySQL数据备份.恢复 引言:在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,那么对于数据的备份就将显的十分重要.对于MySQL而言,在其备份中,日志起到了很重要的作用 一. ...
- mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程
原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...
- mysql 镜像备份_手动构建percona-xtrabackup Docker镜像,并实现mysql数据备份
由于最近项目比较多,并且都需要自己部署运维Mysql,为了保证mysql数据的安全,那么数据备份就必不可少了.之前做mysql数据备份的时候,都是使用的xtrabackup,所以这次也不例外,由于需要 ...
- mysql 数据备份
一:IDE工具介绍 生产环境还是推荐使用mysql命令行, 但为了方便我们测试 可以使用IDE 工具. 掌握 测试+链接数据库. 新建库 新建表,新增字段+类型+约束 设计表:外键 新增查询 备份库. ...
最新文章
- 机器视觉之医学诊断应用
- form表单用js提前执行函数若不成功则不提交_如何用Jmeter做接口自动化测试?跟着操作一次就明白了...
- context switch的切换过程(TTBR0的切换/ASID的介绍)
- C#图形处理系列(一)——最简单第一步:逆反处理、二值处理
- php伪静态后301,动态地址rewrite伪静态,然后301跳转到伪静态时死
- sharing-jdbc实现读写分离及分库分表
- word的使用(二)
- php分页类函数,php分页类的使用方法
- MySQL 之union all 与 order by 同时出现问题
- R语言生存分析:Cox回归
- HW--DSF服务配置文件
- web服务器性能排名,主流Web服务器性能测试
- YOLOv5剪枝✂️| 模型剪枝实战篇
- 技术人员的公众号如何打造高质量内容和精美排版?
- Java官方教程(三-1)运算符 operator(2020.12.18)
- laravel sail
- 登陆QQ时总显示QQ安全防护进程,而且点了确定后QQ还是登不上
- 扩音器软件测试简历,扩音器实验总结.docx
- 杰理之关于 SPI 主机配置参数的几个说明:【篇】
- Python 设置机器码验证