志在指尖
用双手敲打未来

mysql数据库三种备份方式(数据库备份与恢复)

mysql数据库三种备份方式

一、备份的意图
1.做灾难康复:对损坏的数据进行康复和还原
2.需求改动:因需求改动而需求把数据还原到改动以前测验:测验新功用是否可用
二、备份需求考虑的问题
1.能够忍受丢失多长时刻的数据;
2.康复数据要在多长时刻内完;
3.康复的时分是否需求持续提供服务;
4.康复的目标,是整个库,多个表,仍是单个库,单个表。
三、备份的类型
1、根据是否需求数据库离线
冷备(coldbackup):需求关mysql服务,读写恳求均不答应状况下进行;
温备(warmbackup):服务在线,但仅支撑读恳求,不答应写恳求;热备(hotbackup):备份的一起,业务不受影响。
注:
1、这种类型的备份,取决于业务的需求,而不是备份东西
2、MyISAM不支撑热备,InnoDB支撑热备,可是需求专门的东西
2、根据要备份的数据调集的规模
彻底备份:fullbackup,备份全部字符集。
增量备份:incrementalbackup前次彻底备份或增量备份以来改动了的数据,不能独自运用,要借助彻底备份,备份的频率取决于数据的更新频率。
差异备份:differentialbackup前次彻底备份以来改动了的数据。
建议的康复战略:
彻底+增量+二进制日志
彻底+差异+二进制日志
3、根据备份数据或文件
物理备份:直接备份数据文件,长处:备份和康复操作都比较简略,能够mysql的版别;康复速度快,属于文件体系级别的。建议:不要假设备份必定可用,要测验mysql>checktables;检测表是否可用。逻辑备份:备份表中的数据和代码长处:康复简略;备份的成果为ASCII文件,能够编辑;与存储引擎无关;能够经过网络备份和康复;缺点:;备份或康复都需求mysql服务器进程参加;备份成果占有更多的空间;浮点数可能会丢失精度;还原之后,缩影需求重建mysql
四:备份的目标
1、数据;
2、装备文件;
3、代码:存储过程、存储函数、触发器
4、os相关的装备文件
5、仿制相关的装备
6、二进制日志
五、备份和康复的完成
1、运用selectintooutfile完成数据的备份与还原
1.1把需求备份的数据备份出来
mysql>usehellodb;//翻开hellodb库mysql>select*fromstudents;检查students的属性
mysql>select*fromstudentswhereAge>30intooutfile‘/tmp/stud.txt’;//将年纪大于三十的同学的信息备份出来
留意:
备份的目录途径必须让当时运转mysql服务器的用户mysql具有拜访权限
备份完成之后需求把备份的文件从tmp目录仿制走,要不就失掉备份的意图了
回到tmp目录下检查方才备份的文件
[root@www~]#cd/tmp
[root@wwwtmp]#catstud.txt
3XieYanke53M216
4DingDian32M44
6ShiQing46M5\N
13TianBoguang33M2\N
25SunDasheng100M\N\N
[root@wwwtmp]#
你会发现是个文本文件。所以不能直接导入数据库了。需求运用loaddatainfile康复;回到mysql服务器端,删去年纪大于30的用户,模仿数据被损坏:
mysql>deletefromstudentswhereAge>30;
mysql>loaddatainfile’/tmp/stud.txt’intotablestudents;
2、运用mysqldump东西对数据进行备份和还原,mysqldump常用来做温备,所以咱们首先需求对想备份的数据施加读锁。
2.1施加读锁的方法:
1.直接在备份的时分增加选项
–lock-all-tables是对要备份的数据库的所有表施加读锁
–lock-table仅对单张表施加读锁,即使是备份整个数据库,它也是在咱们备份某张表的时分才对该表施加读锁,因而适用于备份单张表
2、在服务器端书写命令,
mysql>flushtableswithreadlock;施加锁,表明把位于内存上的表通通都同步到磁盘上去,然后施加读锁
mysql>flushtableswithreadlock;释放读锁但这对于InnoDB存储引擎来讲,尽管你也能够恳求道读锁,可是不代表它的所有数据都现已同步到磁盘上,
因而当面临InnoDB的时分,咱们要运用
mysql>showengineinnodbstatus;看看InnoDB所有的数据都现已同步到磁盘上去了,才进行备份操作。
2.2备份的战略:
彻底备份+增量备份+二进制日志
演示备份的过程;
2.3先给数据库做彻底备份:
[root@www~]#mysqldump-uroot–single-transaction–master-data=2–databaseshellodb>/backup/hellodb_`date+%F`.sql–single-transaction:根据此选项能完成热备InnoDB表;因而,不需求一起运用–lock-all-tables;–master-data=2记载备份那一时刻的二进制日志的方位,并且注释掉,1是不注释的
–databaseshellodb指定备份的数据库然后回到mysql服务器端
2.4回到mysql服务器端更新数据
mysql>createtabletb1(idint);创立表
mysql>insertintotb1values(1),(2),(3);刺进数据,这儿只做演示,随便刺进了几个数据
2.5先检查彻底备份文件里面记载的方位:
[root@wwwbackup]#cathellodb_2013-09-08.sql|less–CHANGEMASTERTOMASTER_LOG_FILE=’mysql-bin.000013′,MASTER_LOG_POS=15684;记载了二进制日志的方位
2.6在回到服务器端:
mysql>showmasterstatus;显现此刻的二进制日志的方位,从备份文件里面记载的方位到咱们此刻的方位,即为增量的部分+——————+———-+————–+——————+
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
+——————+———-+————–+——————+
|mysql-bin.000004|15982|||
+——————+———-+————–+——————+
2.7做增量备份
[root@wwwbackup]#mysqlbinlog–start-position=15694–stop-position=15982/mydata/data/mysql-bin.000013>/backup/hellodb_`date+$F_%H`.sql
2.8再回到服务器
mysql>insertintotb1values(4),(5);在刺进一些数值
mysql>dropdatabasehellodb;删去hellodb库
2.9导出这次得二进制日志:
mysqlbinlog–start-position=15982/mydata/data/mysql-bin.000013检查删去操作时二进制日志的方位#mysqlbinlog–start-position=15982–stop-position=16176/mydata/data/mysql-bin.000013>/tmp/hellodb.sql//导出二进制日志
2.10先让mysql离线
mysql>setsql_log_bin=0;关闭二进制日志
mysql>flushlogs;翻滚下日志
2.11模仿数据库损坏
mysql>dropdatabasehellodb;
2.12开端康复数据:
[root@www]#mysql</backup/hellodb_2013-09-08.sql//导入彻底备份文件[root@www]#mysql</backup/hellodb_2013-09-08_05.sql//导入增量备份文件[root@www]#mysql<hellodb.sql//导入二进制文件mysql验证完成,显现成果为咱们预想的那样
注:
1、真实在出产环境中,咱们应该导出的是整个mysql服务器中的数据,而不是单个库,因而应该运用–all-databases
2、在导出二进制日志的时分,能够直接仿制文件即可,可是要留意的是,备份之前翻滚下日志。
3、运用lvm快照完成几乎热备的数据备份与康复
3.1战略:
彻底备份+二进制日志;
3.2预备:
注:业务日志必须跟数据文件在同一个LV上;
3.3创立lvmLvm的创立这儿就不多说
3.4修正mysql主装备文件存放目录内的文件的权限与属主属组,并初始化mysql
仿制代码代码如下:
[root@www~]#mkdir/mydata/data//创立数据目录
[root@www~]#chownmysql:mysql/mydata/data//改属组属主
[root@www~]#cd/usr/local/mysql///必须站在此目录下
[root@wwwmysql]#scripts/mysql_install_db–user=mysql–datadir=/mydata/data//初始化mysql
3.5修正装备文件:
vim/etc/my.cof
datadir=/mydata/data增加数据目录
sync_binlog=1敞开此功用
3.6发动服务
[root@wwwmysql]#servicemysqldstart
mysql>setsessionsql_log_bin=0;关闭二进制日志
mysql>source/backup/all_db_2013-09-08.sql读取备份文件
3.7回到mysql服务器:
mysql>FLUSHTABLESWITHREADLOCK;恳求读锁注:不要退出,另起一个终端:mysql>SHOWMASTERSTATUS;检查二进制文件的方位+——————+———-+————–+——————+
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
+——————+———-+————–+——————+
|mysql-bin.000004|107|||
+——————+———-+————–+——————+1rowinset(0.00sec)
mysql>FLUSHLOGS;建议翻滚下日志。这样备份日志的时分就会很方便了
3.8导出二进制文件,创立个目录独自存放
[root@www~]#mkdir/backup/limian
[root@www~]#mysql-e’showmasterstatus;’>/backup/limian/binlog.txt
3.9为数据所在的卷创立快照:
[root@www~]#lvcreate-L100M-s-pr-nmysql_snap/dev/myvg/mydata
回到服务器端,释放读锁
mysql>UNLOCKTABLES;
[root@www~]#mount/dev/myvg/mysql_snap/mnt/data
[root@wwwdata]#cp*/backup/limian/
[root@wwwdata]#lvremove/dev/myvg/mylv_snap
3.10更新数据库的数据,并删去数据目录先的数据文件,模仿数据库损坏
mysql>createtablelimiantb(idint,nameCHAR(10));
mysql>insertintolimiantbvalues(1,’tom’);
[root@wwwdata]#mysqlbinlog–start-position=187mysql-bin.000003>/backup/limian/binlog.sql
[root@wwwbackup]#cd/mydata/data/
[root@wwwdata]#rm-rf*
[root@www~]#cp-a/backup/limian/*/mydata/data/
[root@wwwdata]#chownmysql:mysql*
3.11测验
发动服务
[root@wwwdata]#servicemysqldstart
[root@wwwdata]#mysql登陆测验
mysql>SHOWDATABASES;
mysql>SETsql_log_bin=0
mysql>source/backup/limian/binlog.sql;#二进制康复
mysql>SHOWTABLES;#检查康复成果
mysql>SETsql_log_bin=1;#敞开二进制日志注:此方法完成了接近于热备的方法备份数据文件,并且数据文件放在lvm中能够根据数据的巨细灵活改动lvm的巨细,备份的方法也很简略。
4、根据Xtrabackup做备份康复
官方站点:www.percona.com
优势:
1、快速可靠的进行彻底备份
2、在备份的过程中不会影响到业务
3、支撑数据流、网络传输、紧缩,所以它能够有用的节省磁盘资源和网络带宽。
4、能够主动备份校验数据的可用性。
安装Xtrabackup
[root@www~]#rpm-ivhpercona-xtrabackup-2.1.4-656.rhel6.i686.rpm
留意:在备份数据库的时分,咱们应该具有权限,但需求留意的是应该给备份数据库时的用户最小的权限,以保证安全性,
4.1条件:
应该确定选用的是单表一个表空间,否则不支撑单表的备份与康复。
在装备文件里面的mysqld段加上
innodb_file_per_table=1
4.2备份战略
彻底备份+增量备份+二进制日志
4.3预备个目录用于存放备份数据
[root@www~]#mkdir/innobackup
4.4做彻底备份:
[root@www~]#innobackupex–user=root–password=mypass/innobackup/
注:
1、只需在最后一行显现innobackupex:completedOK!,就阐明你的备份是正确的。
2、另外要留意的是每次备份之后,会主动在数据目录下创立一个以当时时刻点命名的目录用于存放备份的数据,那咱们去看看都有什么:
[root@www2013-09-12_11-03-04]#ls
backup-my.cnfibdata1performance_schemaxtrabackup_binaryxtrabackup_checkpoints
hellodbmysqltestxtrabackup_binlog_infoxtrabackup_logfile
[root@www2013-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>usehellodb;
mysql>deletefromstudentswhereStuID>=24;
4.6增量备份
innobackupex–user=root–password=mypass–incremental/innobackup/–incremental-basedir=/innobackup/2013-09-12_11-03-04/–incremental指定备份类型–incremental-basedir=指定这次增量备份是根据哪一次备份的,这儿是彻底备份文件,这样能够把增量备份的数据合并到彻底备份中去
4.7第2次增量
先去修正数据
mysql>insertintostudents(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>deletefromcocwhereid=14;
4.9把二进制日志文件备份出来,(因为最后一次修正,没做增量备份,要依赖二进制日志做时刻点康复)
[root@wwwdata]#cpmysql-bin.000003/tmp/4.10模仿数据库溃散[root@wwwdata]#servicemysqldstop
[root@wwwdata]#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对第2次增量做数据同步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~]#servicemysqldstop
[root@wwwdata]#rm-rf*模仿数据库溃散
[root@www~]#innobackupex–copy-back/innobackup/2013-09-12_11-03-04/–copy-back数据库康复,后边跟上备份目录的方位
4.15检测:
[root@www~]#cd/mydata/data/[root@wwwdata]#chownmysql:mysql*[root@wwwdata]#servicemysqldstart
检测成果数据正常。

数据库备份与恢复

MySQL是一个联系型数据库,它是一个真实多用户,多线程结构化查询言语数据库服务器。SQL是当前最流行的数据库言语。但有些新手却不了解怎样将MySQL数据库备份与康复,下面为大家介绍MySQL数据库备份与康复的办法,一起来看看吧。
MySQL数据库备份与康复办法
办法1、备份数据库文件
MySQL中的每一个数据库和数据表别离对应文件体系中的目录和其下的文件。
在Linux下数据库文件的寄存目录一般为/var/lib/mysql。在Windows下这个目录视MySQL的安装途径而定,DiaHosting的技术员一般为客户安装在D:serversoftmysql下。
如,有一个名为bbs的数据库,那么bbs的数据库文件会寄存在/var/lib/mysql/bbs(linux)或者D:serversoftmysqlbbs(Windows)下。
备份文件前,需求将MySQL服务中止,然后将数据库目录复制即可。
康复数据数据库时,需求先创立好一个数据库(不一定同名),然后将备份出来的文件(留意,不是目录)复制到对应的MySQL数据库目录中。
运用这一办法备份和康复数据库时,需求新旧的MySQL版本一致,否则可能会呈现错误。
办法2、运用命令行东西
1、备份数据库:
mysqldump–user=root–password=root密码–lock-all-tables数据库名>备份文件.sql
2、康复数据库:
mysql-uroot–password=root密码数据库名<备份文件.sql
3、运用Web程序
在这里咱们“帝国备份王”为例,对MySQL进行备份。
登录“帝国备份王”
用户名:admin
默许密码:123456

未经允许不得转载:IT技术网站 » mysql数据库三种备份方式(数据库备份与恢复)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载