
大致思路是:
-- 只保留新增的记录,前提是必须要有一个唯一ID字段-- 备份数据表 到 tbsrc_171201
select id,fld1,fld2 into tbsrc_171201 from tbsrc
-- 对 tbsrc 表 *** 作,(新增/删除/更新数据)
-- 将新增记录插入备份表
insert into tbsrc_171201 (id,fld1,fld2) select id,fld1,fld2 from tbsrc where id >(select max(id) as maxid from tbsrc_171201)
-- 将原表清空
truncate table tbsrc
-- 再将备份表插回到原表中
insert into tbsrc (id,fld1,fld2) select id,fld1,fld2 from tbsrc_171201 order by id
-- 再删除备份表
drop table tbsrc_171201
1:官方百万级别的测试数据库:
官方测试数据库github网址:>
MySQL数据库备份与还原
备份和恢复数据
生成SQL脚本
在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一个数据库之后再去恢复数据。
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
现在可以在C盘下找到mydb1sql文件了!
注意,mysqldump命令是在Windows控制台下执行,无需登录mysql!!!
执行SQL脚本
执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!!!
执行SQL脚本不只是用来恢复数据库,也可以在平时编写SQL脚本,然后使用执行SQL 脚本来 *** 作数据库!大家都知道,在黑屏下编写SQL语句时,就算发现了错误,可能也不能修改了。所以我建议大家使用脚本文件来编写SQL代码,然后执行之!
SOURCE C:\mydb1sql
注意,在执行脚本时需要先行核查当前数据库中的表是否与脚本文件中的语句有冲突!例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!
还可以通过下面的方式来执行脚本文件:
mysql -uroot -p123 mydb1<c:\mydb1sql
mysql –u用户名 –p密码 数据库<要执行脚本文件路径
这种方式无需登录mysql!
摘要 本文探讨了基于 IBM DB 的各种数据库备份与恢复策略 并附有完整的实验步骤 本文试图通过具体的实验使读者领会各种数据库备份方式的优劣和异同 并掌握 IBM DB 的数据库备份与恢复技术
若无特殊说明 以下数据库备份与恢复的试验环境均为 Windows XP + IBM DB V 企业版 同样的语句也在 AIX + IBM DB V 上验证通过
一 数据库备份的重要性
在信息日趋发达的时代 数据显得尤其重要 如何保障数据的完整性和安全性呢?如何避免数据灾难事故的发生呢?数据库备份作为数据安全和完整最有利保障手段的重要性就不言而喻了
数据库备份的重要性主要体现在
提高系统的高可用性和灾难可恢复性 (在数据库系统崩溃的时候 没有数据库备份怎么办!?)
使用数据库备份还原数据库是数据库系统崩溃时提供数据恢复最小代价的最优方案 (总不能让客户重新填报数据吧!?)
没有数据就没有一切 数据库备份就是一种防范灾难于未然的强力手段 (没有了数据 应用再花哨也是镜中花水中月)
对于DBA来说 最首要也是最重要的任务就是数据库备份
二 DB 数据库备份的方式与分类
按照数据库备份对数据库的使用影响来划分
A 联机备份(也称热备份或在线备份)
B 脱机备份(也称冷备份或离线备份)
说明 联机备份和脱机备份最大的不同在于 联机备份数据库时 数据库仍然可以供用户使用 而脱机备份数据库则不行 脱机备份数据库时 必须断开所有与数据库有连接的应用后才能进行
按照数据库的数据备份范围来划分
A 完全备份
B 增量备份
说明 完全备份数据库是指备份数据库中的所有数据 而增量备份只是备份数据库中的部分数据 至于增量备份到底备份哪些数据 稍候会提到
增量备份的两种实现方式
A 增量备份(也称累计备份)
B delta备份
说明 这两种备份方式的严格定义如下
增量备份是自最近成功的完全备份以来所有更改的数据的备份
delta 备份则是上一次成功的完全 增量或 delta 备份以后所做更改的数据的备份
这里请读者们仔细的看上面两个增量备份方式的定义 注意这两种备份方式的细微差别 这里我们举一个例子来说明
假设有一个数据库 它每天都有部分数据在发生变化 我们星期一晚上对该数据库做了一次完全备份 星期二晚上对该数据库做了一次增量备份A(注 这里的增量备份是指累计备份 下同) 星期三晚上又做了一次增量备份B 星期四则做了一次delta 备份
那么 我们可以得出以下结论
星期一的数据库备份包含了所有的数据
星期二没有变动过的数据没有发生备份 在星期二变动过的数据会备份 并且备份到增量备份A中
星期三的备份中含有自星期一完全备份以来发生过变动的所有数据 包含了星期二和星期三发生过变动的数据 显然 增量备份A 被 增量备份 B 包含
星期四做的是delta备份 注意 它会也只会备份自星期三备份之后变动过的数据
三 DB 备份文件的结构介绍
在不同的 *** 作系统下 DB 的备份文件的结构是不同的 这里概要地介绍一下
Windows *** 作系统下的数据库备份文件结构
说明 Windows *** 作系统下的数据库备份文件是嵌套在一系列文件夹之下的特殊结构 上例中 D:\DB _Train 是指备份目录 TESTDB 是指数据库名称为 TESTDB DB 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的年月日 形如YYYYMMDD 是指备份发生的时间 精确到秒 也就是指 点 分 秒 形如HHMMSS 最后的 则是备份文件的一个序列号
Unix *** 作系统下的数据库备份文件结构
说明 Unix *** 作系统下的数据库备份文件就是一个文件 上例中 HTDC 是指数据库名称 db inst 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的具体时间 形如YYYYMMDDHHMMSS 同样地 它的时间精确到秒 也就是指 年 月 日 点 分 秒发生备份 最后的 则是备份文件的一个序列号
四 DB 数据库备份实验(附完整命令脚本清单)
DB 数据库实验准备工作
( ) Step 创建测试数据库 TestDB
脚本清单 CREATE DATABASE TestDB ON D: USING CODESET GBK TERRITORY CN WITH Pjj s Test DB ; }
( ) Step 创建数据库管理表空间 Data_SP(注意路径 如果没有请创建)
脚本清单 CREATE REGULAR TABLESPACE Data_SP PAGESIZE K MANAGED BY DATABASE USING ( FILE D:\DB \Container\TestDB\UserData\UserData ) BUFFERPOOL IBMDEFAULTBP;
说明 上面的脚本创建了一个名为 Data_SP 的数据库管理表空间 该表空间使用的缓冲池为 IBMDEFAULTBP 存储路径为 D:\DB \Container\TestDB\UserData\ 存储文件名为 UserData 大小为 K = M 页大小为 K
( ) Step 创建测试表 TestTable 并插入测试数据
脚本清单
CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE ) Message VARCHAR( ) PRIMARY KEY(ID) )IN Data_SP;
插入测试数据 INSERT INTO TestTable(Message) VALUES( 测试表建立成功 );
说明 建立测试表并插入数据是为了稍候验证数据库恢复的时候用的
( ) Step 创建测试表 TestTable 并插入测试数据
脚本清单 CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE ) Message VARCHAR( ) PRIMARY KEY(ID) )IN Data_SP;
插入测试数据 INSERT INTO TestTable(Message) VALUES( 测试表建立成功 );
DB 数据库脱机备份与恢复实验
脚本清单
Step 完全备份数据库(脱机 备份时间戳记为 )
db backup db TestDB to D:\DB _Train
Step 模拟灾难 强制删除数据库
db drop db TestDB
Step 根据该数据库完全备份还原数据库
db restore db TestDB from D:\DB _Train taken at
DB 数据库增量备份与恢复实验
脚本清单
数据库增量备份以及还原实验
修改数据库参数 TrackMod 使之支持数据库进行增量备份
db update db cfg using TrackMod YES
更改参数后必须完全离线备份数据库(脱机 备份时间戳记为 )
db backup db TestDB to D:\DB _Train
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始增量数据库备份测试 );
开始增量备份(脱机 备份时间戳记为 )
db backup db TestDB incremental to D:\DB _Train
删除数据库 模拟数据灾难
db drop db TestDB
首先还原至完全离线备份状态
db restore db TestDB from D:\DB _Train taken at
还原至增量离线备份状态
db restore db TestDB incremental automatic from D:\DB _Train taken at
注意 上述语句中 有一个 automatic 它表示无论有多少个增量备份 系统将全自动检索恢复数据库的顺序并自动恢复数据库 如果没有 automatic 则需要多次手动恢复数据库 很麻烦而且容易出错
Step 根据该数据库完全备份还原数据库
db restore db TestDB from D:\DB _Train taken at
还原数据库后查询测试表数据检验数据是否恢复成功
DB 数据库联机机备份与恢复实验
说明 联机备份数据库可以使数据库在备份的同时仍然保持在可用状态 要让数据库支持联机备份 必须更改数据库的日志归档方式 在脱机备份模式下 数据库采用循环日志方式记录数据库日志 在联机备份模式下 数据库则采用归档日志的方式备份数据库日志 另外 对于联机备份的数据库来说 活动日志和归档日志就很重要了 一定要经常备份 保存
脚本清单
数据库联机备份以及还原实验
连接至数据库并插入测试数据
db connect to TestDB
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始联机数据库备份测试 完全备份 );
修改数据库参数 使之支持在线联机备份
db update db cfg for TestDB using logretain on trackmod on
执行增量 在线备份之前必须执行离线全备份一次 否则数据库将处于备份暂挂的不可用状态
(联机完全备份 时间戳记 )
db backup db TestDB
连接至数据库并插入测试数据
db connect to TestDB
插入测试数据
INSERT INTO TestTable(Message) VALUES( 开始联机数据库备份测试 增量备份 );
执行联机备份 备份同时再打开一个会话 模拟应用在线(联机增量备份 时间戳记 )
db backup db TestDB online incremental to D:\DB _Train
模拟灾难 删除数据库!
重要 此前一定要将活动日志文件备份至另一个路径 保存好 本例中 活动日志保存在 C:\db admin 下
db drop db TestDB
根据在线完全备份恢复数据库
db restore db TestDB from D:\DB _Train taken at
根据在线增量备份恢复数据库
db restore db TestDB incremental automatic from D:\DB _Train taken at
恢复后的数据库处于前滚暂挂的不可用状态
db connect to TestDB
前滚数据库 并指定归档日志位置 重要!
db ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND PLETE OVERFLOW LOG PATH ( C:\db admin )
五 综述
对于数据库管理人员或者维护人员来说 怎么强调数据库备份的重要性都不为过
希望本文能抛砖引玉 能让大家对 IBM DB UDB 的数据库备份与恢复有一些深入的认识 也希望大家能在本机上按照本文的脚本认真的做一次实验 这样 你的认识会更加深刻
lishixinzhi/Article/program/Oracle/201311/18590
备份数据库
1、打开sql企业管理器,在控制台根目录中依次点开microsoft
sql
server
2、sql
server组-->双击打开你的服务器-->双击打开数据库目录
3、选择你的数据库名称(如财务数据库cwdata)-->然后点上面菜单中的工具-->选择备份数据库
4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份。
在完整恢复模式或大容量日志恢复模式下,必须先备份活动事务日志(称为日志尾部),然后才能在SQLServerManagementStudio中还原数据库。有关详细信息,请参阅如何备份事务日志(SQLServerManagementStudio)。若要还原已加密的数据库,您必须有权访问用于加密数据库的证书或非对称密钥。如果没有证书或非对称密钥,数据库将无法还原。
认识数据库备份和事务日志备份
数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点。
数据库备份
数据库备份可以手动备份和语句备份
一手动备份数据库
1鼠标右键选择你要进行备份的数据库-任务-备份
可以在常规选项页面你可以选择备份类型是进行完整数据库备份还是差异数据库备份
2点击添加选项,选择数据库文件的存放路径
注意文件名记得加后缀bak,便于恢复时的查找
3你还可以在选项页面是追加到现有的备份集,还是覆盖所有的现有备份集,还可以选择备份验证完整性(建议选择),还可以选择是否压缩备份等。
二语句备份数据库
use master goBACKUP DATABASE [test] TO DISK = N'D:Microsoft sql serverMSSQL10MSSQLSERVERMSSQLBackup estbak' WITH NOFORMAT, NOINIT, NAME = N'test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO
数据库日志备份
首先需要注意,数据库日志的备份是基于数据库完整备份,也就是说你备份数据库日志之前你首先要先对数据库进行一次完整的备份,因为之间会涉及到坚持到检查点 lsn, 这也是本文接下来要讲的重点。
一手动备份数据库日志
1右键数据库-任务-备份-选择备份类型(事务日志)
2点添加,添加日志文件备份存储路径
3同数据库完整备份一样,你也可以选择覆盖现有备份集或者追加到现有备份集,这里现在覆盖现有备份集、验证完整性,然后确认备份
二语句备份数据库事务日志
BACKUP LOG [test] TO DISK = N'D: esttrn' WITH NOFORMAT, INIT, NAME = N'test-事务日志 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO
数据库还原
右键数据库-还原数据库-添加需要进行还原的数据库文件路径
在还原源选项中你可以选择‘源数据库’,‘源设备’。1选择源数据库工具会自动显示该数据库之前的一些备份,然后直接选择需要还原的数据库备份集。
2选择源设备点击后面的,添加需要还原的数据库文件
2点击确认还原数据库
数据库恢复
数据库恢复的前提是1一个完整的数据库备份2包含这个完整数据库备份的事务日志备份3完整备份之间也可以存在数个差异备份
对于数据库维护空间始终是一个比较头疼的问题,特别是对于大型数据库而言,每天的日志文件增长是庞大的,很多数据库管理员会定时对数据库日志文件进行收缩,但是经常收缩会存在收缩完日志文件还是不能减少,这是因为存在很多活动的日志无法收缩可以用
DBCC LOGINFO('数据库名称')
我们看到
status=0的日志,代表已经备份到磁盘的日志文件;而
status=2的日志还没有备份。当我们收缩日志文件时,收缩掉的空
间其实就是
status=0的空间,如果日志物理文件无法减小,这里一
定能看到非常多status=2的记录
解决办法:1可以分离要收缩的数据库,然后手动删除日志文件,然后附加数据库,数据库就会产生一个很小的日志文件(不推荐使用这种方法)
2右键要出来的数据库选择“属性”-"选项",将恢复模式改成"简单",然后利用收缩工具可以讲日志文件收缩到很小,收缩完记得讲恢复模式改成"完整"
也可以用语句进行处理(dbname是你要进行收缩的数据库名,dbname_log是你要进行收缩的数据库的逻辑日志名称)
USE [master]
GO ALTER DATABASE [dbname] SET recovery SIMPLE WITH NO_WAIT GO
ALTER DATABASE [dbname] SET RECOVERY SIMPLE --简单模式
GO
USE [dbname]
GO
DBCC SHRINKFILE (N'dbname_log' , 11, TRUNCATEONLY) GO
USE [master]
GO
ALTER DATABASE [dbname] SET RECOVERY FULL WITH NO_WAIT ALTER DATABASE [dbname] SET RECOVERY FULL
对于第一种方法不赞同使用,首先对于数据库的分离与附加有时候会破坏数据库,造成数据库无法还原,还有就是对于在线数据库也不允许进行分离 *** 作。
对于第二种方法是slq2008收缩日志文件的一种方法,但是此方法也不能使用过于频繁,因为进行数据库恢复模式的更改会截断事务日志文件,这样的话当时利用事务日志文件进行恢复的时候检查点不能包含数据库文件,而且当你要对事务日志进行备份的时候会重新提示你需要对数据库进行完整备份。
举个例子:比如你昨天晚上进行了一次完整备份,然后同时你也进行了一次日志备份(提前日志未被截断),然后你每个小时进行过一次差异备份,最近的差异备份时间点是14点,如果此时数据库错误修改了数据,你可以立马备份一个日志文件将数据库恢复到日志备份开始到日志备份终点前的任意时间点 。
如果此时你进行了修改数据库模式,截断日志进行了收缩,那么你的数据只能恢复到昨天晚上备份的那个日志备份时间前的任意时间点,也就是今天所做的数据库更改无法再恢复了,因为日志文件已经被截断了,不知道这样解释是否明白
因为日志文件的检查点(lsn)是连续的,每一次日志备份都是在上一次备份的基础上lsn往后增加的,lsn的范围也包括了数据库文件的lsn,也只有日志文件的lsn包括了数据库文件的lsn,才能将数据库文件进行回滚。
上图中总共有三个备份文件,一个完整备份、一个差异备份、一个日志备份,大家可以注意观察完整备份的第一个lsn与最后一个lsn,和检查点
第二个差异备份文件的的第一个lsn与最后一个lsn,和检查点,最后的日志备份的第一个lsn和最后一个lsn包含了前面两个备份文件的lsn,这种情况数据库就可以恢复到日志文件备份前的任意时间点,如果日志文件没有包含数据库文件的最后一个lsn也就无法恢复了。
方法/步骤
1双击“\MySQL Tools for 50\MySQLAdministratorexe”
2备份:点击OK,进入主界面如下图:点击倒数第三个Backup
3点击:NewProject 后如下图:
4在ProjectName:修改输入后,选择中要备份的数据库,按标有“>”按钮。
5接着点击:ExecutBackup Now
6选择直接保存在桌面。直到出现如下图提示:表示数据已经备份完成,存放在以下路径。
7还原:选中倒数第二个Restore
8点击:OpenBackup File 按钮出现
9 点击:打开按钮返回
10点击:StartRestore 按钮
选择需要备份的数据库,右键--任务--还原。
如何备份与还原数据库
如图点击添加,选择我们需要备份到哪里。
如何备份与还原数据库
如下图选择好路径后,给备份文件命名。
如何备份与还原数据库
如何备份与还原数据库
依次点击确定,完成以后会提示还原成功。
如何备份与还原数据库
可以把刚刚那边备份文件还原到原来的数据库,也可以还原给一个新的空的数据库。假设我们还原一个新的数据库。如图依次展开
如何备份与还原数据库
勾上选择源设备--选择路径。
如何备份与还原数据库
通过添加--找到刚刚我们备份的那个文件。
如何备份与还原数据库
如何备份与还原数据库
依次点击确定后,回到还原数据库界面,勾上还原文件。
如何备份与还原数据库
在还原数据库选项中点击选项,找到我们这个新建的数据的文件和日志存放路径。(如果不知道,可以选中该数据库--属性--文件里面找到默认路径),勾上覆盖原有数据库。确定就OK了。
如何备份与还原数据库
以上就是关于备份数据库中的表与还原全部的内容,包括:备份数据库中的表与还原、MySQL的备份与还原,非常规备份,全量备份,增量备份、mysql数据库备份和还原等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)