中企动力 > 商学院 > 数据库怎么恢复
  • ?

    如何恢复access 6.9门禁软件数据库

    纳木错

    展开

    如何恢复access 6.9门禁软件数据库

    1. 覆盖恢复法:如果您的数据库损害了,可以选择一个备份文件, 将其文件名改为 iccard.mdb,然后将用该文件 覆盖到软件的安装目录下(可参考1.4 节内容)。

    2.利用安装目录(默认是C:\Program Files\iCCard)下的server-setting进行数据库的恢复。

    点击用户指定文件后,会显示安装目录下backup下的备份文件。点如下图的“查看”菜单――详细资料,可以详细列出每个备份文件的详细信息。

    选择你所需要的备份文件(客户可以根据时间来确定要还原的备份文件)。然后打开。再执行如下的恢复数据库

    再次“确定”。成功后会有提示。这样文件还原完成。

    如果用户不点击   用户指定文件,而是点击选系统最近备份数据库后,系统会自动用最后一次数据库备份文件来进行还原。

  • ?

    如何利用wdcp面板备份并还原mysql数据库,这个有点难

    宣诗槐

    展开

    很多linux系统的服务器的新手都是利用的wdcp面板来操作的,我个人所用的万网服务器也是采用的linux系统的,最后采用的wdcp面板来操作的。wdcp面板确实非常实用,我个人也非常喜欢,它解决了像我这样菜鸟想使用linux系统建站的各种问题。虽然操作非常方便,但数据库备份还原还需要学习一下,那么如何利用wdcp面板备份mysql数据库和还原wdcp面板备份的mysql数据库呢?

    我个人还是建议使用直接数据库备份的方式来还原网站的,这种wdcp备份还原的方式只是作为备用的。因为操作起来相对比较麻烦,一般我也不会这样操作的。这次我的网赚论坛网站数据库备份就是因为我的疏忽,只采用的wdcp面板备份了,只做其他方式备份。所以不得不采用这种方法来还原网站。

    如何利用wdcp面板备份mysql数据库?备份非常简单,只需要在数据库备份列表中,选择需要备份的数据库,点击备份后就自动备份了。如下图

    如何还原wdcp面板备份的mysql数据库呢?

    1.到wdcp面板下的文件管理—备份管理—mysql里面下载已经做好的备份到电脑桌面上。如下图

    2.将下载好的数据库压缩包直接上传到默认mysql数据库文件及日志目录/www/wdlinux/mysql/var下面。注意提示上传成功即可,不用管它了,因为即使是上传成功了,也不能看到,也真无语了,刚开始还自己也以为上传失败了呢。从网上了解了一下,原来wdcp后台无法浏览/www/wdlinux/mysql/var里面的文件。

    3.执行下面3条语句就可实现系统的还原。

    service mysqld stop 意思是停止数据库tar zxvf /www/backup/mysql/database.tar.gz -C /www/wdlinux/mysql/var/ 意思是解压XX数据库service mysqld restart 恢复数据库

    一定要记得把里面的database.tar.gz修改成自己刚才上传的数据库的备份压缩包的名字。我的就是把database.tar.gz修改成了zhuimeng8bbs_201610152115.tar.gz

    执行上面的操作步骤就完成了数据库的还原。但是如果你数据库信息改变的,比如网站换空间,网站换域名,那么你还需要多操作下面的步骤。

    4.进入phpMyAdmin直接手动下载数据库,用记事本或者是notepad++修改相应的信息。修改完成后再利用phpMyAdmin直接还原数据库即可。

    一般只需要修改数据库地址、数据库名称、数据库地址、网站域名

    关于如何利用wdcp面板备份mysql数据库和还原wdcp面板备份的mysql数据库就先给大家介绍到这里了,如果你觉得有帮助,常来关注我吧!

  • ?

    MySQL update的数据恢复

    老汉

    展开

    这世界上有后悔药- houhuiyao.cc 后悔药数据恢复 站长语

    前面介绍了误删部分数据恢复MySQL恢复delete的数据。部分数据恢复指的是非计划清理的那部分数据,存在恢复的需求的一点建议。通常情况下是碰不到这类问题的,做好准备也可以规避掉类似的问题。

    有Delete误删数据,自然就联想到update误更新数据。本文探讨下MySQL update的数据恢复。

    实际上update误更新数据的隐蔽性相对于delete更强,少数据了自然相对容易对比数目、数据的连续性等直观感受发现。而数据变更了,尤其是非字符型数据(字符型数据如标题、作者等。非字符型如类别ID,浏览量等)的变更,很难一眼就发现。比如有几十上百个分类属性,文章数几十万,在进行部分特征文章进行分类批量迁移时,误把不需要进行迁移的文章分类一并由编号33更改为了35,而此类文章可能本身就因为什么原因关注度就一般,迁移完都没有感觉哪里不妥。

    此类情况很不易发现。虽然举的例子看起来关系很小,只是分类误更新了而已,后续还是可以发现了再调整。但如果这里调整的不是文章,而是有货币属性的,比如积分,代表用户可以透支的信用等级,甚至是利息,存款周期,货物价格等等。

    来看一个鲜活的例子:

    类似手滑的真实例子远不止这一两例。电商类的平台,想必价格管控复查等规范和流程都是健全的,依然避免不了意外(谁也不知道明天和意外哪个先来)。

    虽然啰嗦,依然想再提醒下:后悔药数据恢复再次提醒:

    1,首先需要说明的是,生产环境下慎重执行删除操作,除非你确实明白自己在做什么,否则不执行危险动作。

    2,有条件的情况下,依靠系统来管理数据和数据库,尽可能降低潜在的管理的风险。

    3,数据库有Update、Delete、Insert、Truncate、Drop类操作,先在测试环境执行一次,看结果和预期是否相符。生产环境执行前,先对要操作的表做一个备份,以防万一。

    4,备份,备份,备份。

    如果真的按照上面的提醒来操作,也几乎不可能会出现误删的情况除非是SQL自身存在逻辑不严谨问题 :)

    如果确实发现误更新了,怎么办?1,和delete相比,update有一个问题,就是要确认哪个数据才是最终更新前的可靠数据。Delete删除时,所删除掉的数据就是本条记录最终版本的数据,找回这条数据即可完整的恢复好本条记录。而update的变更版本多,所以确切的找回那条数据并能确认就是更新前的版本是一大关键,否则找回来的旧版本数据和当前误更新了的数据本质上是没有什么区别的:都不准。

    2,如果开启了binlog且日志完整,则相对容易找回数据。将binlog解析出来后,把最终导致误更新数据的那条SQL注释或者删除掉然后恢复数据即可,可以可以参考MySQL恢复误删的数据 。

    3,从备份中把数据恢复出来,进行比对。这里需要注意的依然是数据的有效性问题,备份的数据是历史版本旧数据,无法确认更新前的最终版本。可以用于参考,运气好的话,误更新的字段内容也许备份前就是最终版本,可以直接使用。

    4,有书面的单据或者其他纸质的内容、邮件等,可以用于确认数据的,都可以用于找回数据。

    如何最大限度避免误更新?1,不要使用数据库,则没有烦恼!

    2,参考上面的提醒。

    3,严谨的操作和执行到位的流程,可以很好的避免这类问题。

    4,找我们后悔药数据恢复houhuiyao.cc来提供服务吧,我们又稳又好用,这些操作都熟。

  • ?

    Linux系统上Oracle数据库备份和还原操作说明

    毕弘文

    展开

    Oracle数据库备份和还原操作说明

    使用Oralce数据库导出(expdp)、数据库导入(impdp)程序在Oracle数据库之间传输数据对象,进行数据库的备份和还原。数据泵程序需要在数据库服务端使用。使用导出备份时可能产生数据不一致,所以需要先停止应用程序,再进行导出备份。

    以下假设数据库账户为imanage,对同名的schema进行备份和还原。

    因为Linux系统中有文件权限控制,请用oracle用户登录操作系统,再进行以下操作。

    1. 创建备份目录

    1. 在数据库服务器上手工创建文件夹,比如:/home/oracle/data_dp,用于存放备份文件。比如,启动一个终端会话,执行以下命令。

    2. 启动一个终端会话,使用sqlplus以system帐户登入数据库,并执行如下语句创建和查看目录EXPDP_DIR。如图1所示。

    说明:EXPDP_DIR对应数据库服务器上已存在的路径,请根据实际环境修改。

    3. 如果想用8thManage数据库账户来备份,需要授予读写目录EXPDP_DIR的权限,执行如下语句。如图1所示。

    图1

    2. 备份

    启动一个终端会话,先设置NLS_LANG参数,再运行expdp,使用system帐户导出imanage schema。执行以下命令,如图2所示。

    参数说明:

    ORCL:数据库网络服务名(使用Oracle Net Manager配置)

    directory:导出文件保存目录

    schemas:要导出的方案的列表

    dumpfile:导出备件文件名

    logfile:导出的日志文件名

    图2

    3. 还原

    此处假设还原的目标数据库的schema为new_imanage(数据库用户),数据库表空间为new_imanage。

    1. 在sqlplus中,使用system帐户连接数据库查看是否存在同名的数据库表空间。查看语句如下:

    如果已存在同名的数据库表空间,则跳到第2步操作;

    如果不存在相同的数据库表空间,需先创建,执行语句如下:

    注意:datafile的路径是数据库服务器操作系统中的路径,请根据实际环境修改。

    2. 在sqlplus中,使用system帐户连接数据库查看是否存在同名的schemas。查看语句如下:

    如果已存在相同的schemas,需先删除再创建。

    删除schemas语句如下:

    创建schemas语句如下:

    3. 启动一个终端会话,先设置NLS_LANG参数,再运行impdp,使用system帐户导入imanage schema。执行以下命令:

    参数说明:

    ORCL:数据库网络服务名(使用Oracle Net Manager配置)

    directory:备份文件保存目录(比如值为EXPDP_DIR)

    dumpfile:使用的备件文件名

    logfile:导入的日志文件名

    remap_schema:将一个方案中的对象加载到另一个方案

    remap_tablespace:将表空间对象重新映射到另一个表空间

    备注:

    还原时impdp.log文件中出现以下ORA-编号开头的信息是正常的,可以忽略。

    ORA-31684: 对象类型 USER:"XXX" 已存在

    ORA-39082: 对象类型 XXX 已创建, 但带有编译警告

    ORA-39126: 在 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS] 中 Worker 发生意外致命错误 (这是最后导入统计信息出错,可以忽略)

  • ?

    实操有效的数据恢复小工具

    Rong

    展开

    借助专业的工具和手段对数据进行读取、抢救和恢复的技术称为数据恢复技术。

    根据不同的存储介质,数据恢复可分为硬盘数据恢复、移动存储设备及多媒体卡数据恢复、光盘数据恢复、软盘数据恢复。本文分别介绍数据无法正常读取的原因及恢复方法。

    硬盘数据恢复

    故障原因:

    1.物理故障

    包括电机不转、通电后磁头错位、磁头损坏、盘片划伤等,可采用更换、加载、定位等方法进行数据修复。

    2.其他原因

    系统不能正常启动密码或权限丢失MBR分区丢失误操作误删除误分区病毒破坏黑客攻击RAID磁盘阵列失效

    恢复数据包括:Office文档、图片、视频、数据库文件、邮件等

    推荐工具:

    R-Studio

    美国的R-tools公司的核心产品,目前市面上认可度比较高的数据恢复工具,可针对文档、图片、视频、文件、数据库文件等超过200种文件类型进行恢复,并支持对分区以及Raid阵列的恢复。

    Ontrack EasyRecovery

    操作简单的数据恢复工具,针对常见的文档、图片、视频、文件等数据类型可以进行快速的扫描和恢复。

    Recover数据恢复三件套

    澳大利亚经典数据恢复软件,分为文件恢复、图片恢复和邮件恢复三个组件,每个组件各司其职,其中文件恢复组件是核心组件,具备其他两个组件的功能,可以对常见文件、图片、视频、邮件等进行数据恢复。

    Stellar Phoenix Windows Data Recovery

    印度Stellar公司出品,专门针对Windows系统中的文件恢复,可对文档、图片、视频、邮件以及常用文件恢复。

    Stellar SQL Database Toolkit(SQL数据库恢复工具组)

    Stellar公司产品,主要针对SQL数据库的文件恢复。

    Stellar Outlook Toolkit(Outlook邮件恢复工具组)

    Stellar公司产品,针对Outlook的专门工具,可以对损坏Outlook文件进行修复,并支持对Outlook生成的pst文件进行备份、复制、拆分等操作。

    移动存储设备及多媒体卡数据恢复

    故障原因:

    常见短路、过电损坏、芯片损坏、闪存无法读取等

    设备包括:U盘、闪存、Mp4、CF、SD、XD、MMC、SM、SMC、记忆棒等

    推荐工具:

    效率源Flash

    光盘数据恢复

    故障原因:盘片划伤

    推荐工具:

    VMI Hybrid2.0光盘修复工具

    VMI2550i光盘修复工具

    软盘数据恢复

    故障原因:

    数据介质损坏出现的电路故障、磁头偏移等

    恢复方法:采用更换、加载、定位等方法进行数据修复

  • ?

    如何用好PostgreSQL的备份与恢复?

    科布伦茨

    展开

    高可用性是数据库的关键指标,简单说就是要做到故障时间短,数据不丢失,能够回退到指定位置(时间/事务)。实现高可用的基础是数据库的备份与恢复技术。

    PostgreSQL备份与恢复操作涉及的参数和相关文件较多,内部逻辑关系较复杂,恢复分类方式容易混淆,这些都会影响到PostgreSQL高可用方案的实现。

    本文首先介绍通常的数据库故障场景与处理方案,然后通过梳理PostgreSQL数据库备份与恢复的相关文件、参数配置与主要流程,对PostgreSQL恢复方式进行了清晰分类,最后给出了应对典型故障,PostgreSQL备份与恢复的配置方案。

    一、故障场景和处理方案

    数据库采用数据文件加日志文件,两份数据的存储方式。为提高性能,数据库运行时操作的数据位于内存缓冲区,缓冲区的数据延迟写入数据文件,因此数据文件会处于不一致的状态。数据的变更记录称为日志记录,日志记录以日志文件方式存储在磁盘上。日志记录也是先写入日志缓冲区,再写入日志文件。通过两个简单的规则Write-ahead log(将数据写入数据文件前,先将对应的日志记录写入日志文件)和Force log at commit(事务提交时,将其所有日志记录写入日志文件),可以保证通过日志文件完整的恢复数据文件。

    传统的故障类型包括事务内部故障、系统故障、介质(磁盘)故障。对于事务内部故障和系统故障,数据库使用日志文件自动恢复,不需要人工干预。为应对介质故障,DBA需事先备份数据,发生故障后,使用备份数据恢复数据库。

    可靠的磁盘设备可以大幅降低介质故障概率,但不能减少数据备份工作。一个常见的故障是数据误操作,即修改了不应该修改的数据。从数据库的角度看,误操作是正常的操作,不会进行自动恢复,只有使用备份数据才能恢复。同时,提供一段时间内历史数据的访问,也是一个常见的需求。

    数据的备份与恢复可以分为逻辑与物理两种方式。

    逻辑备份与恢复:备份时,使用工具将数据全量导出为外部文件,恢复时,使用工具,将备份文件导入新建的数据库

    物理备份与恢复:备份时,配置实例处于归档模式,将生成的日志文件保持到指定位置。使用热备工具直接拷贝数据的数据目录,作为基线数据。恢复时,使用基线数据和日志文件将数据恢复到一致的状态。

    逻辑方式不支持增量方式,适用于数据较小情况下的备份与恢复。物理方式支持增量备份,适合大数据量的备份与恢复。本文只讨论物理备份与恢复,下图为物理备份与恢复的基本流程。

    在高可用需求中,当单台实例发生故障,需要快速提供备用实例。备份基线数据+日志文件的方式无法满足时间要求。通常采用主备(master/slave)方案,master与slave通过日志流复制进行同步,slave可以提供只读数据访问,当master发送故障后,直接将应用请求转发到slave。

    在高可用方案中,需要支持介质故障恢复,实时故障切换,误操作数据恢复,查看历史数据等功能。流复制技术和物理备份与恢复的结合,可以满足数据库高可用的基本要求。

    流复制

    物理备份与恢复

    介质故障恢复

    支持

    实时故障切换

    不支持

    误操作数据恢复

    查看历史数据

    PostgreSQL备份与恢复相关文件、参数配置与主要流程

    PostgreSQL日志文件的命名

    日志序号 (lsn:log sequence number) 标识日志记录在日志文件中的位置。lsn是一个64位的整数。PostgreSQL运行时生成的日志文件存放在数据目录下的pg_xlog目录,每个日志文件称为一个segment,日志文件大小固定,由wal_segment_size参数指定,日志文件内部划分为多个wal page,每个page的大小由wal_block_size参数指定。

    对于一个64位的lsn,可以计算出其所在的xlog文件名。lsn可以划分segment序号高位,segment序号低位和块内序号三个部分。对于segment大小为64M和16M的情况如下:

    16M:segment序号高位(32比特)+segment序号低位(8比特)+块内序号(24比特)

    64M:segment序号高位(32比特)+segment序号低位(6比特)+块内序号(26比特)

    Xlog文件名由三部分组成,格式为:时间线+segment序号高位+segment序号低位,每个部分都表示为一个8位16进制数字。取出lsn中的segment高位和segment低位数值,就可以确定其所在的xlog文件。

    使用pg_current_xlog_location()查询当前lsn为0/1C000090(16进制高32位/16进制低32位),当前时间线为1,wal segment大小为64M,

    根据64M大小日志文件名格式,可计算出lsn的segment序号高32位为0x0,segment序号低位为0x7, 块内序号为0x90,xlog文件名为000000010000000000000007

    使用pg_xlogfile_name_offset()可以查询lsn对应的文件名文件内偏移,与上述计算一致。

    checkpoint与control文件

    PostgreSQL的数据文件和日志文件互为冗余。当某lsn之前的操作已经全部写入了数据文件后,则该lsn号之前的日志文件可以丢弃。checkpoint机制实现此功能。

    checkpoint操作在以下场景执行:管理员手工执行check命令、数据库启动完成恢复、数据库正常关闭,以及后台Checkpoint进程的定期执行。

    checkpoint流程可以简单描述为,首先构造checkpoint记录(redo字段为当前已写入日志文件的lsn),然后将数据缓冲区中的脏数据写入磁盘,最后写入checkepoint日志记录(包含checkpoint记录),并将checkpoint记录写入control文件。

    512字节的control文件是PostgreSQL的关键数据,用于数据库启动时,判断数据库状态和恢复位置。controlfile文件中记录了数据库的状态,最近checkpoint记录,最小恢复lsn信息和基本的参数配置。数据库的状态包括:

    DB_SHUTDOWNED(数据库正常关闭)

    DB_SHUTDOWNED_IN_RECOVERY(数据库在恢复时关闭)

    DB_SHUTDOWNING(数据库启动到正常关闭过程中崩溃)

    DB_IN_CRASH_RECOVERY(数据库在恢复过程中崩溃),

    DB_IN_ARCHIVE_RECOVERY(数据库处于归档恢复)

    DB_IN_PRODUCTION(数据库处于正常工作状态,等待接受事务处理)

    日志文件的生成与归档

    PostgreSQL日志文件的segment序号从1开始,一个日志文件写完后,会写入下一个序号的日志文件。checkpoint之后,最近一次checkpoint.redo lsn之前的日志文件可以丢弃。PostgreSQL会循环使用日志文件。checkpoint操作中,会将可丢弃的日志文件改名为未来的日志文件名,并该日志文件重新初始化。PostgreSQL在写新的日志文件时,如果该文件已存在,则使用该文件,否则才会创建新的文件。因此不能从pg_xlog目录中的文件名直接判断当前的日志文件,需要使用pg_current_xlog_location和pg_xlogfile_name_offset函数进行判断。

    为持久保存日志文件,需要开启日志归档模式。在该模式下,可丢弃日志文件被删除前,被拷贝到指定目录。在postgres.conf配置文件中设置三个参数:

    wal_level=replica 或更高archive_mode = onarchive_command = 'cp %p /mnt/server/archivedir/%f'%p表示pg_xlog目录路径和日志文件名,%f表示日志文件名。 日志被拷贝到/mnt/server/archivedir目录

    日志的归档过程如下:

    checkpoint操作中,当一个日志文件X可丢弃时,在pg_xlog的archive_status目中生成X.ready文件。

    后台archive进程负责日志文件的拷贝。该进程监控archive_status目录,当发现有X.ready文件名后,使用archive_command拷贝文件,并将X.ready命名为X.done

    下一次checkpoint操作中,将archive_status目中X.done对应的X日志文件改名。

    crash recovery

    PostgreSQL正常运行中,直接kill主进程,重启PostgreSQL,将进入crash recovery处理流程,从control文件中checkpoint的redo lsn位置开始,

    使用pg_xlog目录中的日志文件进行恢复。PostgreSQL能进行上述处理,是因为将其状态和最近的checkpoint记录在在control文件中。

    初始化数据库后,control文件DB状态初始值为shutdown。pg启动时,当control文件DB状态为shutdown,则将状态设置为production,退出恢复过程。在正常关闭服务时,执行checkpoint,并将control文件DB状态设置shutdown。pg启动时,当control文件DB状态为production,则说明发生了crash,会从control文件读取最近checkpoint,从redo lsn开始进行恢复,恢复完成后,将状态设置为production。

    热备

    备份分为冷备和热备。冷备是正常关闭服务后拷贝文件。热备是服务正常运行中拷贝文件。由于采用数据缓冲区机制,拷贝的文件数据会不一致。根据数据库恢复基本原理,只要确定某lsn之前的日志已经全部写入了数据文件,则在拷贝后的数据文件上,应用该lsn号之后的日志文件,可将数据恢复到一致的状态。

    热备包括以下步骤

    执行pg_start_backup函数:该函数执行checkpoint,将checkpont信息写入数据目录下的backup_label文件。

    拷贝数据目录到指定位置

    执行pg_stop_backup函数:该命令删除backup_label文件,写XLOG_BACKUP_END日志,并在pg_xlog目录中写入backup文件,该文件记录了热备开始和结束的lsn信息。

    backup文件格式为:热备开始lsn对应的日志文件名.开始lsn的块内偏移.backup

    使用归档日志恢复

    Crash recovery只能使用pg_log目录中的日志文件进行恢复,启用archive recovery模式后,可以使用其它目录的日志文件(归档日志文件)进行恢复。

    在数据目录存创建recover.conf文件,PostgreSQL启动时,读取到该文件,会进入archive recovery流程。在recover.conf中设置日志拷贝命令restore_command,pg恢复过程中,使用该命令将归档日志拷贝到pg_xlog目录后进行恢复。

    restore_command = 'cp /mnt/server/archivedir/%f "%p"'%f表示日志文件名 %p表示目标路径和文件名

    使用流复制恢复

    流复制可以视为archive recovery的一种情况。使用归档日志文件进行恢复时,备机需要获取主机一个完整xlog文件,才可进行恢复。在流复制中,主机产生日志记录后,会及时发送到备机。

    在slave节点数据目录的recover.conf中,配置到主机的连接信息primary_conninfo并设置standby_mode为on。

    standby_mode = 'on'primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'

    master节点的postgres.conf文件中指定wal_level和发送日志进程的数目max_wal_senders。

    wal_level=replica 或更高max_wal_senders=5

    在master的pg_hba.conf文件中允许复制连接建立

    host replication postgres 192.168.10.0/24 trust

    slave启动后会启动wal reciver进程,根据primary_conninfo向master发送连接请求。master收到请求后,启动wal sender进程,wal sender与reciver建立连接。 wal reciver将起始的lsn信息发送给wal sender,wal sender从该lsn开始,将日志记录持续发送给wal reciver,wal reciver将日志写入pg_xlog目录中的日志文件,并通知恢复进程读取文件进行恢复处理。

    恢复的退出与时间线

    Crash recovery模式下,应用完pg_xlog目录中的所有可用日志文件后,自动退出恢复,进入运行状态。Archive recovery模式下,recovery.conf文件中参数standby_mode为off时,应用完所有日志后,自动退出恢复,进入运行状态。standby_mode为on时,应用完所有日志后,恢复流程不会退出,持续读取可用日志(来自于归档日志文件或流复制),当收到pg_ctl工具发出的promote命令后,才退出恢复流程,进入运行状态。

    可以通过设置Recovery Target,使得archive recovery在指定的位置(时间或事务号)停止恢复。在recovery.conf文件配置如下参数,表示恢复流程在恢复完123947事务后结束。

    recovery_target_xid = '123947'

    时间线(Timeline)是PostgreSQL中的特有的概念。其初始值为1,退出archive recovery时,timeline增1,退出crash recovery时,timeline不变。Timeline反映在日志的文件名中,日志文件的命名格式为:时间线号+segment序号高位+segment序号低位。

    引入时间线概念后,日志位置的唯一标识从lsn变为时间线+lsn,checkpoint的结构中记录了当前的timeline。

    发生时间线切换时,在pg_xlog目录写入时间线history文件,文件名为"当前timelime.history",文件内记录了时间线切换的历史纪录,每一行记录一条时间线信息,格式为。

    parentTLI为时间线id,为切换发生后的lsn,为发生切换的原因。

    从时间线history文件中,可以计算出每条时间线的开始和结束lsn。

    时间线文件00000003.history,内容为1 0/14000060 no recovery target specified2 0/140420D0 no recovery target specified

    该文件含义为当前时间线为3,时间线1的lsn范围[0/0,0/14000060),

    时间线2的lsn范围[0/14000060,0/140420D0),时间线3从0/140420D0开始。

    使用timeline有以下优点:

    切换逻辑显得清晰。从时间线history文件,可以计算出每条时间线的开始和结束lsn。

    避免归档日志的覆盖。当备机与主机的归档目录相同时,备机升级为主机后,生成的日志文件名与原主机不同(时间线不同),拷贝到归档目录后,不会覆盖之前的日志文件。

    pg_basebackup、pg_rman工具

    pg_basebackup和pg_rman为备份与恢复提供良好的操作管理界面,避免手工管理配置文件。

    pg_basebackup是PostgreSQL自带的一个远程热备工具,可以将远程PostgreSQL热备到本地目录。其工作流程为,连接到一个远程PostgreSQL,执行pg_start_backup,将整个数据目录传输到本地,执行pg_stop_backup命令。

    将地址为192.168.0.1的PostgreSQL,备份到本地usr/local/pgsql/data目录pg_basebackup -h 192.168.0.1 -U test -D /usr/local/pgsql/data

    pg_basebackup支持在目标数据目录生成用于流复制的recovery.conf文件。

    pg_basebackup -h 192.168.0.1 -U test -R -D /usr/local/pgsql/data

    会在/usr/local/pgsql...

  • ?

    不小心删除了公司数据库,是什么样一种体验?

    红宝石

    展开

    人生大起大落落落落落落,实在是太刺激了,下面这真是一个悲伤的故事。

    那年公司 ERP 系统刚进行升级。

    因为公司陆续上了 MES 和 PDM 系统。为了加快整个公司信息化平台的统一,请了个第三方公司来做中间接口。

    然后故事开始了。

    某一个晚上,第三方人员问我要 ERP 的 SA 密码。

    我很警惕:“你要干嘛?”

    “我测试一下中间表。”

    “有没有写表的操作?”

    “没有,只有读表的操作。”

    于是我放心的给了 SA 密码。给了 VPN 权限通道。放她进来了。

    十分钟后…..

    她带着哭腔打电话来(是的,对方做测试的是个 93 年的萌妹子。)

    “吴哥哥, 服务器中毒了 。。。。”

    我当时还在逛果壳呢,一听她说我服务器中毒了,我表示无比淡定。还以大哥的经验教训了一顿她。

    “叫你不要往我服务器传插件嘛,这次帮你解决一下,下次不准了哟。”

    我认为是小 case 呢,不就中毒了嘛,系统往回滚一天就好了。

    然后悲剧的事情就出现了,远程进不去,于是我就去机房本地登录,居然也进不去。

    我不死心,强制重启,居然还是进不去。我的服务器系统就这样崩了。。。

    好在那几天在做开发,系统没有启用,于是我和我的老板汇报了这个情况:

    “老大,我们服务器系统崩了。”

    “哦,那就搞好它让它别崩。” 果然是霸道总裁啊。

    当时数据和应用服务器我都是分开跑的,所以应用服务器奔溃了,我觉得也没多大事,就重新做系统吧。于是我重新做了个系统,然后喊萌妹子上来搭平台。

    “小刘啊,你可害惨我了,一个下午给你重做服务器系统了,我基础环境都配置好了,你上来搭平台吧。”

    萌妹子那是无比的歉意啊,又是答应请我吃饭又是答应请我看电影的。我都想系统再崩溃一次了。

    按理说这样应该是没问题了,就在我走出机房,在外面抽了根烟,45 度仰望了一下天空,联想了一下和萌妹子点个 9 分熟的牛排,在喝一口二锅头这样浪漫的晚餐的时候。电话来了。

    来电话的是萌妹子的老板。

    “小吴,我想找一下 information.db 和 mfmedia.db 这两个总表没找到,你给我找一下。”

    我都蒙了,从来没人问过我这样的问题,难道她老板不是 IT 行业的。

    “ 数据库文件都在目录树里啊 ,自己去找啊。”

    “没有。”

    于是我登上服务器一看,我傻了。 所有的表都空了,所有的表都静静的躺在那,但是里面都空了。。。

    不可能啊,我数据库是放在另外一台服务器上的,怎么可能会没有了。

    于是我问萌妹子:“XXX,你到底做了什么操作啊,为毛我数据库都没了。”

    萌妹子说:“我啥也没干啊,只是按照步骤一路点 YES。”

    我才想起来, 在第一次配置基础环境的时候,建账套会提示是否初始环境,如果点是了,数据库就会被初始化 ,然后这位萌妹子傻傻的点了是。

    “你知道不知道你干了什么, 公司 06 年到现在所有的数据,财务的,供应链的,进销存的全部都在这台服务器里,200 多个 G 数据,因为你一个是,全没了 。”

    萌妹子也吓蒙了,话都说不出来了。

    没办法,我再给我老板打电话。

    “老板,有个好消息,有个坏消息。”

    “直接说坏的。” 我就喜欢我们老板这么直接。

    “恩。。恩。。那个。。就是那个。ERP 的数据没了。”

    “哦,那就找回来。” 老板还是那么的霸气。我特么都要爱上他了。

    “老板,我想你没明白这个的严重性。ERP 数据没了,从 06 年开始的都没了,这意味着就算找回来,整理所有的表,排错也需要 3 天左右时间,到时候所有的生产都要暂时停止。如果找不回来,我们可能就要倒闭了。”

    我忽然有种掌握天下苍生的感觉。。。

    对面沉默了 5 秒后,爆吼了一句:“吴 XX,你给我滚到我办公室来!!”

    中间和老板手握手谈心,被老板亲切慰问的细节跳过不表。

    当时公司高层对数据安全还没有那么重视,之前预算做的项目,我已经做了备份的计划书,一直没被审批下来,现在估计悔得肠子都清了。

    于是我开始漫长的 数据恢复之旅 。

    我之前已经做了个本地备份的计划,每天晚上会备份一次。我把希望都放在了它身上。等我把备份的数据库附件上去,发现时间居然都是两个星期之前的。

    而且还有一些新表都没有,我联系对方,对方告知研发人员两个星期前做测试的时候把备份计划关了。。。

    我心里万头草泥马奔腾而过。

    最后没有办法,把老服务器又翻了出来,翻出之前的老数据,开始转换。

    期间老板给我短信:“数据恢复进行的怎么样了呢。”

    “报告,正在稳步进行中,按照目前的状况,可恢复的可能性超过 90%。” 别问我 90% 怎么算出来的,我就是哄他才这样说的。

    “唉,真是心急呀,睡都睡不着。小吴呀,当初要是听你的,上了备份该多好呀。” 现在知道后悔了,哼哼。

    “老大别担心,我会搞定的。” 是的,作为一位负责的员工,我就是这么让老大心安。

    “恩,那就交给你了哦,熬夜少抽点烟哦。” 哎呀,瞬间觉得我老大萌萌哒有没有。

    这里花了我一个晚上加一个白天。

    数据转换好了,还有一些时间差的数据没法找到。于是通知各个部门,找单据,开始往里面补单子,一条一条的按照业务流程补进去。

    为了协同更方便,在会议室加设了几十台电脑集体办公。。。

    在大家一片怨声载道中,三天时间,终于把数据恢复了过来。三天内我没离开机房超过 10 米,吃喝拉撒都在机房,不对,拉撒不在。

    这件事情造成的后果:

    1. 大部分员工放假三天,我加班三天三夜。

    2. 本来很爱我的大部分员工因为单据事件,集体转为黑我恨我了。

    3. 公司立马批了我的计划,冷备,热备,异地容灾,全部上全了。

    4.我挥刀自宫,自己罚了自己,扣除了自己一个月工资。

    5.老板到现在还是在怀疑请的那家公司已经被我们竞争对手收买,是故意来破坏我们的。

    6.萌妹子拉黑了我。

    这真是个悲伤的故事。

    看完了这个悲伤的故事,我们要回归理性, MySQL 数据库误删除后怎么办?

    在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!

    然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办?

    下面,就 MySQL 数据库误删除后的恢复方案进行说明。

    工作场景

    MySQL 数据库每晚 12:00 自动完全备份。

    某天早上上班,9 点的时候,一同事犯晕 drop 了一个数据库!

    需要 紧急恢复 可 利用备份的数据文件以及增量的 binlog 文件进行数据恢复 。

    数据恢复思路

    利用全备的 SQL 文件中记录的 CHANGE MASTER 语句 ,binlog 文件及其位置点信息,找出 binlog 文件中增量的那部分。

    用 MySQLbinlog 命令将上述的 binlog 文件导出为 SQL 文件,并剔除其中的 drop 语句。

    通过全备文件和增量 binlog 文件的导出 SQL 文件,就可以恢复到完整的数据。

    实例说明

    首先,要 确保 MySQL 开启了 binlog 日志功能。 在 /etc/myf 文件里的 [mysqld] 区块添加,如下图,然后重启 MySQL 服务。

    1.在 ops 库下创建一张表 customers

    2.现在进行全备份

    参数说明:

    -B:指定数据库

    -F:刷新日志

    -R:备份存储过程等

    -x:锁表

    Cmaster-data:在备份语句里添加 CHANGE MASTER 语句以及 binlog 文件及位置点信息

    3.再次插入数据

    4.此时误操作,删除了 test 数据库

    此时,全备之后到误操作时刻之间,用户写入的数据在 binlog 中,需要恢复出来!

    5.查看全备之后新增的 binlog 文件

    这是全备时刻的 binlog 文件位置,即 mysql-bin.000002 的 106 行,因此 在该文件之前的 binlog 文件中的数据都已经包含在这个全备的 SQL 文件中了。

    6.移动 binlog 文件,并导出为 SQL 文件

    剔除其中的 drop 语句,查看 MySQL 的数据存放目录,由下面可知是在 /var/lib/mysql 下,将 binlog 文件导出 SQL 文件,并 vim 编辑它删除其中的 drop 语句。

    注意:在 恢复全备数据之前必须将该 binlog 文件移出,否则恢复过程中,会继续写入语句到 binlog,最终导致增量恢复数据部分变得比较混乱。

    7.恢复数据

    查看数据库,看看 ops 库在不在。

    此时恢复了全备时刻的数据。接着,使用 002bin.sql 文件恢复全备时刻到删除数据库之间,新增的数据。

    再次查看数据库,发现全备份到删除数据库之间的那部分数据也 恢复 了!!

    以上就是 MySQL 数据库增量数据恢复的实例过程!

    最后,总结几点:

    本案例适用于人为 SQL 语句造成的误操作或者没有主从复制等的热备情况宕机时的修复。

    恢复条件为 MySQL 要开启 binlog 日志功能,并且要全备和增量的所有数据。

    恢复时建议对外停止更新,即禁止更新数据库。

    先恢复全量,然后把全备时刻点以后的增量日志,按顺序恢复成 SQL 文件,然后把文件中有问题的 SQL 语句删除(也可通过时间和位置点),再恢复到数据库。

    来源:51CTO

    计 算 机 世 界

    C HINA C OMPUTER W ORLD

    关 于 IT 产 业 和 产 业 IT 的 一 切

  • ?

    sql server数据库错误数据恢复方法

    念余温

    展开

    1.硬件设备清单:

    硬件设备配置情况

    2.故障描述:

    需要进行数据恢复的服务器是一台r520型号存储,共有7块SAS硬盘分别组成raid1和raid5两组磁盘阵列。主要sql server数据库存放在C盘中,在使用过程中,客户发现C盘容量即将占满,于是将数据库路径指向了D盘,在D盘生成了一个.ndf文件。客户在继续使用了大约10天之后,数据库出现故障,连接失效,无法正常附加查询。

    3.备份数据:

    考虑到数据的安全性以及可还原性,在做数据恢复之前需要对所有源数据做备份,以防万一其他原因导致数据无法再次恢复。使用dd命令或winhex工具将所有磁盘都镜像成文件。

    4.故障分析:

    (a)分析故障原因;由于数据库文件所在磁盘容量不足,导致数据库无法继续正常运行,出现逻辑错误。

    (b)分析RAID组结构;客户服务器上共7块300G硬盘,其中2块硬盘做RAID 1,用于安装操作系统,其余5块硬盘做RAID 5存放数据。分析RAID 1和RAID 5的相关结构,重组虚拟出RAID 1和RAID 5,查看其中数据。

    (c)分析原始数据库文件;由于客户在数据库发生故障之后,进行过多次数据库恢复尝试,并且每一次尝试都是在源环境下进行的,导致原始数据库文件被更改覆盖,并且磁盘空间被多次复写,无法使用尝试恢复之后的数据库文件进行修复。询问客户得知,客户在数据库发生故障的时候,备份过一分原始的故障数据库文件。

    5.数据库修复:

    从虚拟出的RAID 5空间中将客户之前备份的数据库文件拷贝出来,尝试在数据库中附加,附加失败,错误提示如下图一:

    数据库附加失败

    错误提示主数据库文件和次级数据库文件不匹配,查看.ndf文件底层,发现.ndf文件中几乎没有数据,尝试取消.mdf文件和.ndf文件之间关联,只用.mdf文件进行附加。尝试后发现,只用.mdf文件附加时也发生错误,但是错误提示改变。图二:

    mdf文件附加错误

    此时错误提示日志文件(.ldf)和数据库文件(.mdf)不匹配。之后对数据库尝试进行无数据库附加,附加成功。但是发现数据库系统表损坏,无法正常使用。图三

    数据库系统表损坏

    对数据库的系统表尝试修复,但由于系统表损坏过于严重,无法修复。数据库记录提取;解析数据库文件中的数据库记录;编写相应的程序提取数据库文件中的数据库记录;根据客户以前的数据库备份获取数据库中的表结构;重构表结构并肩提取出的数据库记录导入到新的表中。

    6.数据验证:

    由客户对提取出的数据库记录进行验证,所有数据完全恢复,本次数据恢复成功。

    7.数据恢复结论:

    在数据库使用过程中,要合理分配数据库文件所在磁盘空间,及时清理垃圾数据,保证数据库的正常、安全运行。

  • ?

    如何修复SQL Server数据库中的MDF文件

    罗凡旋

    展开

    数据库文件对所有用户都很重要, 并存储大量重要信息。了解有关修复损坏的 SQL 数据库文件的手动和专业解决方案。  今天的MS SQL Server是最常用的关系数据库之一。 它具有先进的内部结构并提供很高的可靠性。 这就是大多数组织使用SQL Server数据库来保存所有关键业务数据的原因。 但是也有一些情况,如病毒感染,操作系统故障,文件系统损坏等等,因为SQL数据库变得损坏,并且存储在其中的所有数据都不可访问。 从SQL Server中的损坏状态修复.mdf文件不是一件容易的事。  用户可以使用手动技术来修复SQL数据库中损坏的MDF文件,但这不是一种可靠的方法,因为不能保证使用手动方法进行数据恢复。 但是,也有第三方工具,如SysTools SQL Recovery,声称以完美的方式修复.mdf文件。  因此,在这篇文章中,我们将讨论修复损坏的SQL数据库的最佳解决方案。 但在此之前,了解SQL数据库中损坏的原因很重要。  损坏的SQL数据库背后的原因  在SQL Server数据库中出现腐败背后可能有各种可能的原因。 众所周知,SQL数据库的MDF文件是主数据库文件。 它们存储所有用户数据,因此MDF文件中的损坏可能会损坏整个数据库。 因此,首先,我们将讨论MDF文件损坏背后的所有可能的原因:  存储介质中存储所有MDF文件的损坏。  如果用户将SQL数据库存储在压缩文件夹中,则MDF文件可能会损坏。  任何修改或更改都是在SQL Server帐户中完成的。  用户可能意外删除了一些数据。  如果文件头损坏,则会导致MDF文件损坏。  损坏的磁盘驱动程序。  如果SQL数据库正在使用,并且在两者之间存在网络故障,则会导致MDF文件损坏。  导致MDF文件损坏的其他可能原因包括病毒攻击,硬盘故障,系统异常关机和突然断电。  因此,如果MDF文件损坏,那么SQL数据库变得不可访问。 而且,如果用户试图访问损坏的数据库,则可能会遇到一些错误消息。 下面列出了最常遇到的错误消息:  存储所有MDF文件的存储介质中损坏。  如果用户将SQL数据库存储在压缩文件夹中,则MDF文件可能会损坏。  元数据损坏错误。  用户可能意外删除了一些数据。  SQL Server/Msg 825 (读取重试) 中 SQL Server/Msg 824 中的 Msg 823 错误。  除此之外,用户在访问损坏的SQL数据库时可能会遇到其他一些错误消息。 因此,数据库管理员有责任立即采取措施并防止任何类型的数据丢失。  如何通过手动修复MDF文件  有几种手动方法可用于修复损坏的SQL数据库,但手动解决方案不能保证数据库恢复。  为了恢复损坏的数据库,用户可以使用SQL Server的NDF文件(日志文件)。但是, 只有日志文件不足以在大多数损坏情况下还原数据库, 因为有时, 由于严重损坏, 备份文件也会损坏。  修复和恢复损坏的SQL数据库的另一种可能方法是在数据库控制台命令(即DBCC CHECKDB)的帮助下进行的。这对于在 SQL server 数据库中修复小的损坏问题非常有用。  使用DBCC CHECKDB修复损坏的MDF文件的步骤  首先,您需要通过执行以下查询在损坏的SQL数据库上运行DBCC CHECKDB:

    注意:您还可以使用DBCC CHECKDB定义一些选项,如no_infomsgs和infomsgs。  之后,您需要检查索引ID。  情况1:如果索引ID> 1,则将其放下并重新创建。  情况2:如果索引ID为0或1,则再次运行DBCC CHECKDB并使用适当的修复选项,如repair_rebuild,repair_fast或repair_allow_data_loss。  

    现在,为了确保零损坏,执行DBCC CHECKDB并显示一条消息,即DBCC CHECKDB在name_of_your_corrupt_database中显示0个分配错误和0个一致性错误。  如果手动方法失败怎么办?  手动解决方案并不总是一个万无一失的解决方案。 他们可能有一些限制。 例如,在严重损坏的MDF文件的情况下,手动失败很容易。 而且,手动解决方案要求用户在技术上强大。 因此,建议使用一些可靠的第三方软件来修复损坏的SQL数据库。 SQL数据库恢复程序是修复MDF文件中任何类型的损坏问题的最佳实用程序之一。  SQL恢复工具能够修复损坏的SQL数据库文件 - MDF和NDF。 它是一款无风险软件,可恢复存储在其中的所有数据项,如表格,规则,触发器,函数等。除此之外,软件只需几次点击即可修复数据库,而不会浪费任何时间。  从MDF文件修复损坏的SQL数据库的步骤  在本地机器上下载并运行SQL Recovery Program。  

    之后,打开您选择的损坏的SQL数据库文件(.mdf文件)。  

    选择扫描模式,然后单击确定。  

    该工具将提供存储在损坏的MDF文件中的数据项的预览。  

    点击导出保存恢复的数据库。  

    结论  数据库文件对于任何用户都非常重要,因为它们存储大量重要信息。 SQL数据库中的任何类型的损坏问题都可能给用户造成麻烦。 因此,为了克服所有这些问题,我们讨论了手动和专业解决方案来修复损坏的SQL数据库文件。

     更多阅读

    12种最受欢迎的编程语言

    软考网络工程师准备篇(二):上午答题技巧

    软考网络工程师备考篇(一):考前准备

  • ?

    MySQL数据库误删恢复

    温绿蕊

    展开

    这世界上有后悔药-houhuiyao.cc 后悔药数据恢复 站长语

    前面介绍了MySQL数据库在使用InnoDB引擎时,如果误删了数据表,在共享表空间MySQL数据表InnoDB引擎表误删恢复(共享表空间ibdata1)和独立表空间MySQL数据表InnoDB引擎表误删恢复(独立表空间innodb_file_per_table=1)的情况下如何恢复数据。

    本文将探讨下MySQL数据库误删恢复。

    后悔药数据恢复提醒您:

    1,首先需要说明的是,生产环境下慎重执行删除操作,除非你确实明白自己在做什么,否则不执行危险动作。

    2,有条件的情况下,依靠系统来管理数据和数据库,尽可能降低依潜在的管理的风险。

    3,数据库有Update、Delete、Insert、Truncate、Drop类操作,先在测试环境执行一次,看结果和预期是否相符。生产环境执行前,先对要操作的表做一个备份,以防万一。后续将针对每个危险动作如何在生产执行时即准备好危机应对动作做一个探讨。

    4,备份,备份,备份。

    数据库误删,不管是使用的rm -rf testdb还是drop database testdb,最终的效果都是一样的:数据目录下的testdb目录及目录下的文件都不可见了(和之前介绍的Linux下恢复删除的情况一致),实际上文件内容依然还在那里如果没有数据覆盖上去的话。

    #测试环境准备命令:mysql> create database testdb;Query OK, 1 row affected (0.08 sec)mysql> mysql> use testdb; Database changed mysql> mysql> create table aa(id int not null primary key, name varchar(20)); Query OK, 0 rows affected (0.34 sec)mysql> mysql> insert into aa values(1,'a'),(2,'b'),(3,'c'),(4,'d'); Query OK, 4 rows affected (0.17 sec) Records: 4 Duplicates: 0 Warnings: 0mysql> select * from aa; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +----+------+ 4 rows in set (0.00 sec)

    testdb数据库表文件:

    MySQL数据库恢复

    #删除数据库:#使用SQL命令 drop database testdb;#使用rm rm -rf testdb/

    那么,这种情况下的数据库恢复动作就简单了,参考前面介绍Innodb引擎时的恢复方法即可:

    1,完整的恢复testdb目录及目录下的文件即可找回删除掉的库名和表数据,然后针对具体的表引擎,将数据重新导入到数据库中即可。

    2,如果找回的是非完整的,那么操作思路是一样的,能恢复多少恢复多少,剩余的如果实在找不回来,从最近一次的备份里提取,然后依靠其他手段比如单据来补全数据。

    还是不知道怎么恢复MySQL数据库?找后悔药MySQL数据恢复houhuiyao.cc吧!

数据库怎么恢复

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP