文档章节

mysql常用的数据备份方案

stone_
 stone_
发布于 2016/07/11 17:52
字数 1967
阅读 76
收藏 0
点赞 0
评论 0

1. 冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行;
2. 温备(warm backup): 服务在线,但仅支持读请求,不允许写请求;
3. 热备(hot backup):备份的同时,业务不受影响。.

建议的备份和恢复方案:

完全+增量+二进制日志
完全+差异+二进制日志

1. 对单表进行备份。

mysql> use hellodb;     //打开hellodb库 
mysql> select * from students;  查看students的属性 
mysql> select * from students where Age > 30 into outfile ‘/tmp/stud.txt' ;   //将年龄大于三十的同学的信息备份出来 


mysql> load data infile '/tmp/stud.txt' into table students;  //恢复数据

2. 对数据库进行完全备份。(每天晚上12点做一次全备,每隔一小时备份binlog,也就是增量备份)

#!/bin/sh
# mysql data backup script #
# use mysqldump --help,get more detail.
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqldump --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir

增量备份

#!/bin/sh
# mysql binlog backup script
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in  $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
 
echo "backup mysql binlog ok"

增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个.

因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了.

数据还原:

先还原最近的完全备份数据:

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

再还原binlog :

./mysqlbinlog --start-date="2009-04-10 17:30:05" --stop-date="2009-04-10 17:41:28" /usr/local/mysql/data/mysql-bin.000002 |mysql -u root -p123456

4. 双机热备(利用数据库主从技术)。

http://my.oschina.net/shyl/blog/709981

5. 基于Xtrabackup做备份恢复。

官方站点:www.percona.com

优势:

1、快速可靠的进行完全备份
2、在备份的过程中不会影响到事务
3、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。
4、可以自动备份校验数据的可用性。

安装Xtrabackup

 

复制代码代码如下:


[root@www ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.i686.rpm 

 

其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得

注意:在备份数据库的时候,我们应该具有权限,但需要注意的是应该给备份数据库时的用户最小的权限,以保证安全性,

4.1前提:

应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复。
在配置文件里边的mysqld段加上

innodb_file_per_table = 1

4.2备份策略
完全备份+增量备份+二进制日志
4.3准备个目录用于存放备份数据

 

复制代码代码如下:


[root@www ~]# makdir /innobackup

 

4.4做完全备份:

 

复制代码代码如下:


[root@www ~]# innobackupex --user=root --password=mypass /innobackup/

 

注:

1、只要在最后一行显示 innobackupex: completed OK!,就说明你的备份是正确的。
2、另外要注意的是每次备份之后,会自动在数据目录下创建一个以当前时间点命名的目录用于存放备份的数据,那我们去看看都有什么

[root@www 2013-09-12_11-03-04]# ls
backup-my.cnf ibdata1 performance_schema xtrabackup_binary xtrabackup_checkpoints
hellodb mysql test xtrabackup_binlog_info xtrabackup_logfile
[root@www 2013-09-12_11-03-04]#
xtrabackup_checkpoints :备份类型、备份状态和LSN(日志序列号)范围信息;
xtrabackup_binlog_info :mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
xtrabackup_logfile :非文本文件,xtrabackup自己的日志文件
xtrabackup_binlog_pos_innodb :二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
backup-my.cnf :备份时数据文件中关于mysqld的配置

4.5回到mysql服务器端对数据进行更新操作

 

复制代码代码如下:


mysql> use hellodb; 
mysql> delete from students where StuID>=24;

 

4.6增量备份

 

复制代码代码如下:


innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2013-09-12_11-03-04/ 
--incremental  指定备份类型 
--incremental-basedir= 指定这次增量备份是基于哪一次备份的,这里是完全备份文件,这样可以把增量备份的数据合并到完全备份中去

 

4.7第二次增量

先去修改数据

 

复制代码代码如下:


mysql> insert into students (Name,Age,Gender,ClassID,TeacherID) values ('tom',33,'M',2,4); 
innobackupex --user=root --password=mypass --incremental /innobackup/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/ 
 这里只须要把最后的目录改为第一次增量备份的数据目录即可 

 

4.8最后一次对数据更改但是没做增量备份

 

复制代码代码如下:

mysql> delete from coc where id=14;

 

4.9把二进制日志文件备份出来,(因为最后一次修改,没做增量备份,要依赖二进制日志做时间点恢复)

 

复制代码代码如下:

[root@www data]# cp mysql-bin.000003 /tmp/

 

4.10模拟数据库崩溃

 

复制代码代码如下:


[root@www data]# service mysqld stop 
[root@www data]# rm -rf * 

 

恢复前准备

4.11对完全备份做数据同步

 

复制代码代码如下:

[root@www ~]# innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/

 

4.12对第一次增量做数据同步

 

复制代码代码如下:


innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/

 

4.13对第二次增量做数据同步

 

复制代码代码如下:


innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-45-53/ 
--apply-log 的意义在于把备份时没commit的事务撤销,已经commit的但还在事务日志中的应用到数据库

 

注:

对于xtrabackup来讲,它是基于事务日志和数据文件备份的,备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据库文件中的事务,还应该对其做预处理,把已提交的事务同步到数据文件,未提交的事务要回滚。因此其备份的数据库,不能立即拿来恢复。

预处理的过程:

首先对完全备份文件只把已提交的事务同步至数据文件,要注意的是有增量的时候,不能对事务做数据回滚,不然你的增量备份就没有效果了。

然后把第一次的增量备份合并到完全备份文件内,

以此类推,把后几次的增量都合并到前一次合并之后的文件中,这样的话,我们只要拿着完全备份+二进制日志,就可以做时间点恢复。

4.14数据恢复

 

复制代码代码如下:


[root@www ~]# service mysqld stop 
[root@www data]# rm -rf *  模拟数据库崩溃 
[root@www ~]# innobackupex --copy-back /innobackup/2013-09-12_11-03-04/ 
--copy-back数据库恢复,后面跟上备份目录的位置

 

4.15检测:

 

复制代码代码如下:


[root@www ~]# cd /mydata/data/ 
[root@www data]# chown mysql:mysql * 
[root@www data]#service mysqld start

 

检测结果数据正常。

 

© 著作权归作者所有

共有 人打赏支持
stone_
粉丝 19
博文 221
码字总数 163611
作品 0
洛阳
程序员
mysql如何实时热备份

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

swingcoder
2016/02/25
120
0
MySQL管理工具

一、MySQL工具 二、mysqladmin工具 三、mysqldump工具(备份用) 一、MySQL工具 mysql是一个简单的命令行SQL工具,该工具支持交互式和非交互式运行 使用范例: 1、使用root账户连接服务器,默...

youshine
2015/07/14
0
0
MySQL数据库备份与恢复

在使用MySQL的过程中,我们免不了数据的备份与恢复,数据库的迁移等操作,针对不同的情形,可以选取不同的方案。还记得之前GitLab删库事件吗?在那么多牛逼的工程师力挽狂澜下,最后还是丢失...

tianya1993
2017/05/19
0
0
mysql增量备份及恢复解决方案

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

徐学良
2015/07/23
0
0
Navicat for MySQL 有哪些常用功能

Navicat for MySQL 是一套管理和开发 MySQL 或 MariaDB 的理想解决方案,支持单一程序,可同时连接到 MySQL和MariaDB。这个功能齐备的前端软件为数据库管理、开发和维护提供了直观而强大的图...

Navicat数据库管理工具
2016/06/02
148
1
CentOS下MySQL移至MariaDB

Google都将MySQL移至MariaDB了,我的朋友也Ubuntu下移至MariaDB,我还是不能落后吧,今天将CentOS下MySQL移至MariaDB。总结下我的步骤: 1、备份 首先是备份,保证所有数据安全,具体备份我就...

加咧个油
2013/09/26
0
3
MySQL阶段六——MySQL备份与增量备份

MySQL备份与增量备份 01)MySQL备份常用参数 myisam引擎压根不支持事务,所以不能用--single-transaction操作;myisam实现数据一致采用参数--lock-all-tables,这样在flush tables with read ...

花开半夏qb
2017/05/27
0
0
美图秀秀DBA谈MySQL运维及优化

随着MySQL应用的不断普及和自身发展,如何更好的优化MySQL和使用MySQL,依然是一个比较有挑战的问题,尤其是在业务快速增长的场景下。本次分享主要介绍一些通用的运维优化实践和问题,以及未...

杨尚刚
2015/12/31
0
0
如何基于 Kubernetes 开发高可靠服务?

Kubernetes 是当前主流的容器编排服务,它主要解决「集群环境」下「容器化应用」的「管理问题」,主要包括如下几方面: 容器集群管理: 编排 调度 访问 基础设施管理: 计算资源 网络资源 存...

Docker
05/01
0
0
MySQL备份恢复基础知识及MySQLdump讲解

数据库备份恢复知识要点: 时间轴备份类型分类: 完全备份:备份整个数据集 增量备份:上一次完全备份,或上一次增量备份以后变化的数据的备份(还原麻烦,节省空间) 差异备份:仅备份最近一次...

大飞侠大虾
2017/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部