Linux数据备份与恢复 dump、restore、dd命令

dump命令:备份分区、文件或目录

在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下:

[root@localhost ~]# yum -y install dump

dump 命令可以支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别。

也就是说,当我们备份一份数据时,第一次备份应该使用 0 级别,会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用  2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份;以此类推。

需要注意的是,只有在备份整个分区或整块硬盘时,才能支持 1~9 的增量备份级别;如果只是备份某个文件或不是分区的目录,则只能使用 0 级别进行完全备份。

dump 命令格式如下:

[root@localhost ~]# dump [选项] 备份之后的文件名 原文件或目录

[选项]:

-level:就是我们说的 0~9 共 10 个备份级别;
-f  文件名:指定备份之后的文件名;
-u:备份成功之后,把备份时间记录在 /etc/dumpdates 文件中;
-v:显示备份过程中更多的输出信息;
-j:调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级是 2;
-W:显示允许被 dump 的分区的备份等级及备份时间;

备份分区

我们先来看看如何使用 0 级别备份分区。命令如下:

[root@localhost ~]# df -h
文件系统  容量 已用 可用 已用% 挂载点
/dev/sda3   20G 3.0G 16G 17% /
tmpfs   30 6M 0 30 6M 0% /dev/shm
/dev/sda1   194M 26M 158M 15% /boot
/dev/sr0   3.5G 3.5G 0 100% /mnt/cdrom

系统中我们就分了/分区和/boot分区。根分区太大,备份速度太慢,所以只备份/boot分区

[rootSlocalhost ~]# dump -Ouj -f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013
#备份的级别和时间
DUMP: Dumping /dev/sdal (/boot) to /root/boot.bak.bz2
#备份源和目标
DUMP: Label: none
#分区没有卷标
DUMP: Writing 10 Kilobyte records
DUMP: Compressing output at compression level 2 (bzlib)
#备份时压缩
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 21846 blocks.
DUMP: Volume 1 started with block 1 at: Wed Jun 5 03:08:22 2013
DUMP: dumping (Pass III) [directories]
#开始dump 备份
DUMP: dumping (Pass XV) [regular files]
DUMP: Closing /root/boot.bak.bz2
#备份结朿,生成备份文件
DUMP: Volume 1 completed at: Wed Jun 5 03:08:30 2013
DUMP: Volume 1 took 0:00:08
DUMP: Volume 1 transfer rate: 2370 kB/s
DUMP: Volume 1 21930kB uncompressed, 18962kB compressed, 1.157:1
#数据容量
DUMP: 2X930 blocks (21.42MB) on 1 volume(s)
DUMP: finished in 7 seconds, throughput 3132 kBytes/sec
DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013
DUMP: Date this dump completed: Wed Jun 5 03:08:30 2013
DUMP: Average transfer rate: 2370 kB/s
DUMP: Wrote 21930kB uncompressed, 18962kB compressed, 1.157:1

查看备份时间文件

[root@localhost ~]# cat /etc/dumpdates
/dev/sdal 0 Wed Jun 5 03:08:22 2013 +0800
#备份的分区 备份级别 备份曰期

生成的备份文件

[root@localhost @]# 11 -h /root/boot.bak.bz2
-rw-r--r--. 1 root root 19M 65 03:08 /root/boot.bak.bz2

如果 /boot 分区的内容发生了变化,则可以使用 1 级别进行增量备份。当然,如果数据会继续发生变化,则可以继续使用 2~9 级别增量备份。命令如下:

[root@localhost ~]# ll -h /root/install.log
-rw-r--r--.1 root root 25K 4月 10 2149 /root/install.log
#查看安装软件包日志的大小为25KB
[root@localhost ~]# cp install.log /boot/
#复制日志文件到/boot分区
[root@localhost ~]# dump -1uj -f /root/boot.bak1.bz2 /boot/
#增量备份/boot分区,并压缩
[root@localhost ~]# ll -h boot.bak*
-rw-r--r--.1 root root 18K 6月 5 0316 boot.bak1.bz2
-rw-r--r--.1 root root 19M 6月 5 0308 boot.bak.bz2
#boot.bak1.bz2压缩文件只有18KB,证明增量备份只备份了0级别以后变化的数据
#boot.bak1.bz2压缩文件只有18KB,证明增量备份只备份了0级别以后变化的数据

如果备份的是整个分区,那么是可以使用“dump -W”命令来查询分区的备份时间及备份级别的。不过要注意,如果备份时没有使用“-u”选项,那么“dump -W”命令是不会记录备份的时间和级别的。命令如下:

[root@localhost ~]# dump -W
Last dump(s) done (Dump '>' file systems):
/dev/sda3 ( /) Last dump:Level 1, Date Wed Jun 5 023150 2013
/dev/sda1 ( /boot) Last dump:Level 1, Date Wed Jun 5 031627 2013
#我的/分区和/boot分区都进行过dump备份,/boot分区的最新备份级别是1

dump命令可以非常方便地实现增量备份,但如果实现差异备份时,先使用 0 级别完全备份一次,以后的每次备份都使用 1 级别进行备份。

备份文件或目录

dump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用 0 级别进行完全备份,而不再支持增量备份。同时,不能使用“-u”选项更新分区的备份时间,当然也不能使用“dump -W”命令查询到文件或目录的备份。我们说 /etc/ 目录是重要的配置文件目录,那么我们就备份这个目录来看看吧。命令如下:

[root@localhost ~]# dump -0j -f /root/etc.dump.bz2 /etc/
#完全备份/etc/目录
[root@localhost ~]# ll -h /root/etc.dump.bz2
-rw-r--r--.1 root root 8.6M 6月 5 0326 /root/etc.dump.bz2
#查看备份文件

使用增量备份命令如下:

[root@localhost ~]# dump -1j -f /root/etc.dump1.bz2 /etc/
DUMP:Only level 0 dumps are allowed on a subdirectory
DUMP:The ENTIRE dump is aborted.
#备份失败了,目录备份只能使用0级别

restore命令:还原dump操作备份下的文件、目录或分区

restore 命令是 dump 命令的配套命令,dump 命令是用来备份分区和数据的,而 restore 命令是用来恢复数据的,restore 命令的格式如下:

[root@localhost ~]# restore [模式选项] [选项]

[模式选项]

restore 命令常用的模式有以下 4 种,这 4 种模式不能混用:

  • -C:比较备份数据和实际数据的变化。如果实际数据中的现有数据发生了变化,那么这个选项能够检测到这个变化。但是如果实际数据中新增了数据,那么这个选项是不能检测到变化的。举个例子:别人给我了 100 万元投资(实际数据),但是他有一个投资的账本(备份数据),他要时不时地比对账本和实际的 100 万元投资,如果 100 万元减少则马上就能发现改变;但是如果投资增加,则不会报警;
  • -i:进入交互模式,手工选择需要恢复的文件;
  • -t:查看模式,用于查看备份文件中拥有哪些数据;
  • -r:还原模式,用于数据还原;

[选项]

  • -f:指定备份文件的文件名;

比较备份数据和实际数据的变化

数据比较只有在原有数据减少或发生变化时才能检测到变化,而新增的数据是不会被检测到的。命令如下:

[root@localhost ~]# touch /boot/abc
#在/boot/目录中新建abc文件
[root@localhost ~]# restore -C -f /root/boot.bak.bz2
Dump tape is compressed.
Dump date:Wed Jun 5 082002 2013
Dumped from:the epoch
Level 0 dump of /boot on localhost:/dev/sda1
Label:none
filesys = /boot

restore检测,没有发现任何变化,因为备份数据在备份时没有abc文件,所以restore命令是不能识别新建文件的

查看模式

查看备份文件中到底包含什么内容。命令如下:

[root@localhost ~]# restore -t -f boot.bak.bz2
Dump tape is compressed.
#备份数据是压缩的
Dump date:Wed Jun 5 082002 2013
#数据备份时间
Dumped from:the epoch
Level 0 dump of /boot on localhost:/dev/sda1
#备份等级
Label:none
#分区的卷标,没有设定卷标
2.
11 ./lost+found
12 ./grub
24 ./grub/grub.conf
13 ./grub/splash.xpm.gz
…省略部分输出…

还原模式

restore 命令的还原模式既可以用于还原整个分区,也可以用于还原文件或目录。命令格式是一样的,不过要注意,如果要还原增量备份的数据,则一定要先还原完全备份的数据。命令如下:

#还原boot.bak.bz2分区备份
#先还原完全备份的数据
[root@localhost ~]# mkdir boot.test
#建立准备解压缩的目录。当然,如果这个目录是我新建的分区,就可以直接把数据恢复到分区中
[root@localhost ~]# cd boot.test/
#进入解压缩目录
[root@localhost boot.test]# restore -r -f /root/boot.bak.bz2
Dump tape is compressed.
#备份数据是压缩数据
#解压缩

查看一下解压缩的文件

[root@localhost boot.test]#ll
总用量21300
-rw-r--r--. 1 root root 106611 6月 22 2012 config-2.6.32-279.el6.i686 drwxr-xr-x. 3 root root 4096 410 21:47 efi drwxr-xr-x. 2 root root 4096 410 21:49 grub
-rw-r--r--. 1 root root 14708399 410 21:49 initrara£s-2.6.32-279.el6.i686.img
drwx------. 2 root root 4096 410 21:44 lost+found
-rw-------. 1 root root 47504 65 09:44 restoresymtable
-rw-r--r--. 1 root root 175903 622 2012 symvers-2.6.32-279.el6.i686.gz
-rw-r--r--. 1 root root 1846041 622 2012 System.map-2.6.32-279.el6.i686
-rw-r--r--. 1 root root 1048576 65 02:38 test
-rwxr-xr-x. 1 root root 3856608 622 2012 vmlinuz-2.6.32-279.el6.i686
#再还原增量备份的数据

恢复增量备份的数据

[root@localhost boot.test]# restore -r -f /root/boot.bakl.bz2
Dump tape is compressed.

查看一下解压缩的文件

[root@localhost boot.test]# ll
总用量21328
-rw-r--r--. 1 root root 106611 622 2012 config-2.6.32-279.el6.i686
drwxr-xr-x. 3 root root 4096 410 21:47 efi
drwxr-xr-x. 2 root root 4096 410 21:49 grub
-rw-r--r--. 1 root root 14708399 410 21:49 initramfs-2.6.32-279.eX6.i686.img
-rw-r--r--. 1 root root 24772 65 08:20 install. log
#增量备份的install.log文件被恢复了
drwx------. 2 root root 4096 410 21:44 lost+found
-rw-------. 1 root root 47552 65 09:57 restoresymtable
-rw-r--r--. 1 root root 175903 622 2012 symvers-2.6.32-279.el6.i686.gz
-rw-r--r--. 1 root root 1846041 622 2012 System.map-2.6.32-279.el6.i686
-rw-r--r--. 1 root root 1048576 65 02:38 test
-rwxr-xr-x. 1 root root 3856608 6月  22 2012 vmlinuz-2.6.32-279.el6.i686

我们再来还原/etc/目录的备份etc.dump.bz2,其实还原的方法是完全一样的。命令如下:

[root@localhost ~]# restore -r -f etc.dump.bz2
Dump tape is compressed.
#还原etc.dump.bz2备份
[root@localhost ~]# ll -d /root/etc
drwxr-xr-x.103 root root 12288 6月 5 0745 /root/etc
#在root下生成了etc目录,里面的数据和/etc/目录中的数据完全一致

dd命令:数据备份,并在备份过程中进行格式转换

dd 命令主要用来进行数据备份,并且可以在备份的过程中进行格式转换。其实 dd 命令可以把源数据复制成目标数据,而且不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。dd 命令格式如下:

[root@localhost ~]# dd if="输入文件" of="输出文件" bs="数据块" count="数量"

参数:

  1. if:定义输入数据的文件,也可以是输入设备;
  2. of:定义输出数据的文件,也可以是输出设备;
  3. bs:指定数据块的大小,也就是定义一次性读取或写入多少字节。模式数据块大小是 512 字节;
  4. count:指定 bs 的数量;
  5. conv=标志:依据标志转换文件。标志有以下这些:
    • ascii:由 EBCDIC 码转换至 ASCII 码;
    • ebcdic:由 ASCII 码转换至 EBCDIC 码;
    • ibm:由 ASCII 码转换至替换的 EBCDIC 码;
    • block:将结束字符块里的换行替换成等长的空格;
    • unblock:将 cbs 大小的块中尾部的空格替换为一个换行符;
    • lcase:将大写字符转换为小写;
    • notrunc:不截断输出文件;
    • ucase:将小写字符转换为大写;
    • swab:交换每一对输入数据字节;
    • noerror:读取数据发生错误后仍然继续;
    • sync:将每个输入数据块以 NUL 字符填满至 ibs 的大小;当配合 block 或 unblock 时,会以空格代替 NUL 字符填充;

备份文件

[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak
记录了67+1 的读入
#数据占了写满的67个数据块,以及1个没有写满的数据块
记录了67+1 的写出
#默认数据块大小是512字节
34439字节(34 kB)已复制,0.0524897 秒,656 kB/秒
#如果要备份文件,那么dd命令和cp命令非常类似

查看一下生成的备份文件的大小

[root@localhost ~]# ll -h /tmp/httpd.bak
-rw-r--r--.1 root root 34K 6月 5 1804 /tmp/httpd.bak

 备份分区为一个备份文件

查看一下分区容量,我们备份/boot分区

[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 306M 0 306M 0% /dev/shm
/dev/sda1 194M 27M 157M 15% /boot
/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom

备份完成

[root@localhost ~]# dd if=/dev/sda1 of=/tmp/boot.bak

查看生成的备份文件

[root@localhost ~]# ll -h /tmp/boot.bak
-rw-r--r--.1 root root 200M 6月 5 1814 /tmp/boot.bak

#如果需要恢复,则执行以下命令

[root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1

如果想要把分区直接备份成另一个分区,就需要生成一个新的分区,这个分区的大小不能比源分区小,只能和源分区大小一致或比它大。命令如下:

[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1

#如果需要恢复,则只需把输入项和输出项反过来即可,命令如下

[root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1

整盘备份

把磁盘a备份到磁盘b

[root@localhost ~]# dd if=/dev/sda of=/dev/sdb

把磁盘a备份成文件disk.bak

[root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak

#备份恢复
#如果要备份到另一块硬盘上,那么,当源硬盘数据损坏时,只需用备份硬盘替换源硬盘即可
#如果要备份成文件,那么在恢复时需要把备份数据复制到其他Linux中,然后把新硬盘安装到这台Linux
#服务器上,再把磁盘备份数据复制到新硬盘中。命令如下

[root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb

复制软盘

在Linux中软盘的设备文件名是/dev/fd0,这条命令先把软盘中的数据保存为临时数据文件

[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak

然后更换新的软盘,把数据备份复制到新软盘中,就实现了软盘的复制

[root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0

如果需要备份的是光盘,那么在 Linux 中就是使用 dd 命令制作光盘的 ISO 镜像的。命令如下:

#制作光盘ISO镜像
[root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盘中所有的数据制作成ISO镜像
[root@localhost ~J # mkdir /mnt/cd
#建立一个新的挂载点
[root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #挂栽ISO文件到挂载点
[root@localhost ~]# cd /mnt/cd
#进入挂栽点
[root@localhost cd]# ls
CentOS_BuildTag images RELEASE-NOTES-en-tJS.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL
EULA    isolinux repodata   RPM-GPG-KEY-CentOS-Security-6
GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6
#数据是光盘当中的数据,这个ISO镜像是可以被当作真正的光盘使用的

我们有时需要制作指定大小的文件,比如,在增加 swap 分区时,就需要建立指定大小的文件,这时也使用 dd 命令。命令如下:

[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10
#数据输入项是/dev/zero会向目标文件中不停地写入二进制的0
#指定数据块大小是1MB
#指定生成10个数据块。也就是定义输出的文件大小为10MB
记录了10+0 的读入
#显示数据占满了10个数据块
记录了10+0 的写出
#不过这里数据块的大小已经是1MB了
10485760字节(10 MB)已复制,0.00709902 秒,1.5 GB/秒
[root@localhost ~]# ll -h /tmp/testfile
-rw-r--r--.1 root root 10M 6月 5 1846 /tmp/testfile
#生成的testfile文件的大小刚好是10MB

dd 命令在进行整盘复制时,类似于 GHOST 工具的功能,不过通过 dd 命令复制出来的硬盘数据要比 GHOST 复制出来的硬盘数据稳定得多。虽然 dd 命令功能强大,不过也有一个明显的缺点,就是复制的时间较长,复制 100GB 的数据需要 15~25 分钟(根据服务器的性能不同而不同)。

实现数据备份还有非常多的方法和工具,比如 tar 和 cpio 命令。至于网络复制工具,如 rsync 和 scp 等,需要较完善的网络知识才能够学习,这里不再介绍。

 

转载于:https://www.cnblogs.com/lizhouwei/p/10146092.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux数据库备份与恢复是指在Linux操作系统上对数据库进行备份和恢复操作。备份是指将数据库中的数据和结构复制到另一个存储介质中,以便在数据丢失或损坏时进行恢复恢复是指将备份的数据和结构还原到原始数据库中,以恢复原始数据。 在Linux操作系统上,可以使用各种工具进行数据库备份和恢复操作,如mysqldump、pg_dump、MongoDB的mongodump等。备份和恢复的过程需要根据具体的数据库类型和版本进行相应的配置和操作,以确保备份和恢复的成功。 备份和恢复是数据库管理中非常重要的一部分,它可以保证数据的安全性和完整性,避免数据丢失和损坏。因此,对于任何一种数据库系统,备份和恢复都是必不可少的操作。 ### 回答2: Linux数据库备份与恢复是数据库管理的重要环节,非常重要。备份是防止数据丢失的最重要的措施之一。数据库备份可以减少数据丢失的机会,保证数据库的安全。此外,如果数据库出现故障,备份还可以帮助我们快速恢复数据,以便我们尽快恢复业务运营。本文将为大家介绍Linux数据库备份与恢复的一些基本知识和方法。 一、备份方法 备份数据库时,我们可以使用以下两种基本方法。 1.日常备份 日常备份是我们最常见的备份方法。这种备份方法可以在每天的固定时间匹配定期自动备份数据库。备份文件需要存储在远程或本地计算机上,以便我们在需要时能够进行快速恢复。 2.实时备份 备份数据库时,我们也可以使用实时备份方法。此方法不需要停机,可以在数据库运行时进行备份。这是一种更加高级的备份方式,也是对数据完整性要求更高的信息系统采取的备份方式。 我们可以选择使用mysqldump进行备份,如下所示。 使用mysqldump进行备份的最简单方式是单独使用它的命令。例如,使用以下语法备份数据库: 要备份所有数据库,请使用以下命令: $ mysqldump -u root -p --all-databases > backup.sql 二、恢复方法 在数据丢失或故障的情况下,我们可以使用以下两种基本方法进行数据恢复。 1.还原数据库 如果我们备份了整个数据库,就可以使用还原数据库来恢复数据。这种方法需要在系统关闭之前准备一个备份程序,该程序将数据库文件恢复到原始状态,并在启动时重新加载。这可以减少需要手动还原数据库的麻烦。 2.手动还原 如果备份的是数据库中的单个表或内容,则可以使用手动还原来恢复数据。此方法已用于恢复丢失的表或文件。 在这种情况下,我们可以使用以下命令来还原整个数据库: $ mysql -u root -p dbname < backup.sql 到这里,我们介绍了Linux数据库备份与恢复的基本知识和方法。在数据库管理中,我们必须保证数据的安全与完整性,避免数据丢失和致命错误的发生,以保证系统的稳定和正常运行。因此,数据库备份与恢复非常重要,在技术操作上也需要有一定的娴熟度。 ### 回答3: Linux作为一种优秀的操作系统,在企业的应用场景中非常普遍,因此数据库备份与恢复Linux平台上也非常重要。在Linux中,常用的数据库备份与恢复有两种方式:手动备份和自动备份。 手动备份是指手动执行备份操作,通常使用一些命令工具来完成备份操作。在Linux平台上,最常用的备份工具是tar和rsync。tar命令是一款压缩命令,它可以将指定的目录或文件打包成一个压缩文件,使用tar命令可以很方便地进行备份。rsync是一款数据同步工具,它可以在网络中将本地和远程文件同步,使用rsync进行备份时,可以将备份文件传输到远程服务器,并保障备份文件的完整性和可用性。 自动备份是指利用一些工具配置定时备份任务来完成备份操作。在Linux平台上,常用的自动备份工具有Crontab和Anacron。Crontab是一款定时任务管理工具,它可以在指定的时间执行指定的任务。Anacron是一款在系统空闲时进行定时任务的工具,可以通过调整配置文件来实现备份任务的定时运行。 数据库恢复是指在系统出现故障或数据丢失时,通过备份文件恢复原有的数据库状态。在Linux平台上,常用的数据库恢复方式有两种:全量恢复和增量恢复。全量恢复是指将备份文件中的所有数据恢复到原有的数据库中,适用于数据不大的数据库。增量恢复是指将备份文件中新增的数据恢复到原有的数据库中,适用于数据比较大的数据库。 综上所述,Linux数据库备份与恢复是企业信息化建设中非常重要的一部分。无论是手动备份还是自动备份,都需要选择适当的工具来完成备份操作,并保证备份文件的完整性和可用性。在恢复时,需要根据具体情况选择全量恢复或增量恢复方式,确保数据库能够正常恢复。同时,也需要定期测试备份和恢复操作,以保证备份和恢复操作的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值