Linux下数据备份的一般方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 一个应用中有很多的重要数据,为了在数据灾难发生后我们能够及时、迅速、准确的恢复我们的应用到一个比较合适的位置,我们必须定期的对我们的数据资料进行备份,今天所要讨论的就是Linux下数据资料备份的方法。1、本机数据手工备份    Linux上有功能强大的tar命令,tar最初是为了制作磁带备份而设计的,他的作用是把文件和目录备份到磁带中,然后从磁带中提取或恢复文件。
一个应用中有很多的重要数据,为了在数据灾难发生后我们能够及时、迅速、准确的恢复我们的应用到一个比较合适的位置,我们必须定期的对我们的数据资料进行备份,今天所要讨论的就是Linux下数据资料备份的方法。

1、本机数据手工备份
    Linux上有功能强大的tar命令,tar最初是为了制作磁带备份而设计的,他的作用是把文件和目录备份到磁带中,然后从磁带中提取或恢复文件。现在我们可以使用tar来备份数据到任何存储介质上。
    tar命令备份数据的格式如下:
        tar cvf backup.tar /home/www    这个命令的含义就是将 /home/www/ 打包为 backup.tar 文件,如果我们需要压缩,则需要加上 z 命令。
    使用这个命令,我们可以手工备份服务器上的数据,但是要做到定时自动备份,我们还需要借助下一个技巧。

2、本机数据自动备份
    要实现自动备份,我们首先需要将 tar 命令写在脚本里。比如下面这样一个脚本:
        #!/bin/sh
        
        tar zcvf test.tar /home/www/
    保存为 test.sh 并添加可执行权限,执行后,发现提示:tar: Removing leading `/' from member names
    这个问题是由于脚本执行的时候默认是在用户目录下的。这样就选成了问题的存在,解决办法就是在执行 tar 之前 cd 切换到要打包的目录就可以了。
    
    有了可以执行命令的脚本,还要能够让他定时执行,这个就要借助于计划任务了。
    
    Linux 为我们提供了 cron 这个强大的工具,我们可以用它来实现几乎任何类型的定时触发。每个用户都有自己的 cron 配置文件,一般来说,我们都是通过 root 用户来运行 cron 任务,以保证我们能够获得足够的权限。
    如果我们希望每天凌晨四点定时运行我们之前写好的脚本,我们可以通过 crontab -e 来编辑配置文件,并加入:
        0 4 * * * /home/test.sh
    这样,每天凌晨4点系统会自动运行这个备份脚本。

    下面是一个自动备份的脚本的例子:

# !/bin/sh

# aim to backup the resorces files and mysql data that used by shenti system
# crontab run at 4:00AM every day
# procedure: first backup all the data, then check if 3 days ago backup files exist, then delete prior
# created by shiqiang at 2009-10-28


BACKDIR
= " /home/backup/ "
LOGFILE
= " /home/backup/shenti_backup_log "
MYSQLBIN
= " /etc/init.d/mysql "

RESOURCEPATH
= " /home/ "      #  add the path var to avoid the 'Removing leading / from member names tips'
RESOURCEDIR = " www/ "

MYSQLDATAPATH
= " /var/lib/mysql/ "
MYSQLDATADIR_1
= " wys/ "
MYSQLDATADIR_2
= " wys2/ "

#  cd $BACKDIR

YEAR
= `date  + %Y `
MONTH
= `date  + %m `
DAY
= `date  + %d `

echo 
" ----------------------------------- "   >>   $LOGFILE
echo $(date 
+ " %Y-%m-%d %H:%M:%S " ) "  Shenti backup begin "   >>   $LOGFILE

DIRNAME
= $BACKDIR$YEAR - $MONTH - $DAY
FILENAME
= $DIRNAME / $YEAR - $MONTH - $DAY - shenti - resorces - backup . tar

#  change dir to correspond folder
if  [  !   - $DIRNAME  ]
then
    
mkdir   $DIRNAME
fi

#  backup the resources folder
cd  $RESOURCEPATH
tar zcvf 
$FILENAME   $RESOURCEDIR   >>   $LOGFILE   2 >& 1

#  backup the mysql data folder, we should be attion about the data consistency

$MYSQLBIN  stop  >>   $LOGFILE   2 >& 1

cd 
$MYSQLDATAPATH
FILENAME
= $DIRNAME / $YEAR - $MONTH - $DAY - mysqldata - wys - backup . tar
tar zcvf 
$FILENAME   $MYSQLDATADIR_1   >>   $LOGFILE   2 >& 1

FILENAME
= $DIRNAME / $YEAR - $MONTH - $DAY - mysqldata - wys2 - backup . tar
tar zcvf 
$FILENAME   $MYSQLDATADIR_2   >>   $LOGFILE   2 >& 1

$MYSQLBIN  start  >>   $LOGFILE   2 >& 1

echo 
" Resources and mysql data backup finished at " $(date  + " %Y-%m-%d %H:%M:%S " >>   $LOGFILE

#  check the old backup folder
OLDBACKDIR = " $BACKDIR " $(date  + %Y - %m - %d   -- date = ' 3 days ago ' )

if  [  - $OLDBACKDIR  ]
then
         `rm 
- rf  $OLDBACKDIR >>   $LOGFILE   2 >& 1
    echo 
"  [$OLDBACKDIR] Delete Old Backup Folder Success! "   >>   $LOGFILE
else
         echo 
" No Old backup folders $OLDBACKDIR  ! "   >>   $LOGFILE
fi

echo 
" Shenti Backup finished at  " $(date  + " %Y-%m-%d %H:%M:%S " >>   $LOGFILE

cd 
$BACKDIR

 

3、双机数据自动备份
    从安全性上考虑来讲,将备份文件存放在宿主机器上本事是不安全的,真的在灾难性情况下,这种备份时很脆弱的,所以我们需要将数据备份到另外的一台服务器上。但是,我们这里实现的双机定时的备份,而不是实时的备份。因为实时备份(热备)对于技术的要求很高,属于商业应用级的。
    
    双机备份,我们可以现在本机上备份文件,在将备份的文件传输到其他机器上。但是这个方法并不好,实际中也不会这么去做。
    查看一些资料,有的说可以通过 Mirror 来实现双机的备份[1],但是这个还需要借助第三方的软件,我觉得并是很好的办法,因为 linux 中同时还有一个强大的工具 scp 。
    同时,我们也可以考虑使用 rsync 来同步两个服务器之间的数据,关于 rsync 的使用,在本博中曾经有过一篇做了介绍,这里就不再多说了,希望大家能够找到适合自己的数据备份方案。

参考资料:
1、 Linux下数据的备份方法           
2、 一个Mysql自动备份脚本          
3、 验证命令是否成功执行           
4、 Mysql备份和恢复策略           
5、 tar在脚本中使用的错误信息       
6、 计划任务CRON的配置和说明       
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
Linux Python
在Linux下升级到Python3的两种方法
在Linux下升级到Python3的两种方法
34 0
|
2天前
|
Linux
linux不同场景下修改文件名的五种方法
linux不同场景下修改文件名的五种方法
6 1
|
4天前
|
Linux 芯片
一篇文章讲明白Linux下控制GPIO的三种方法
一篇文章讲明白Linux下控制GPIO的三种方法
16 3
|
10天前
|
监控 算法 Linux
探索Linux中的lz4命令:高效的数据压缩工具
**探索Linux中的LZ4工具:快速数据压缩。LZ4算法提供高速压缩与解压缩,适合实时数据处理。命令行工具如`lz4c`用于文件压缩(`lz4c file.txt compressed.lz4`)和解压缩(`lz4c -d compressed.lz4 decompressed.txt`)。特点是速度快、低内存占用,可选压缩级别。注意命令的实际形式取决于安装的实现,使用前应查阅文档。**
|
10天前
|
存储 算法 安全
探索Linux的md5sum命令:保障数据完整性的利器
`md5sum`是Linux下的命令行工具,用于计算文件的MD5哈希,确保数据完整性。通过比较哈希值,它可以检测文件是否在传输或存储中被更改。常用参数包括`-b`(二进制模式)、`-c`(校验文件)、`--tag`(创建校验和文件)和`--status`(仅返回校验状态)。尽管MD5因安全性问题不建议用于加密,但仍然用于快速校验。例如,`md5sum filename.txt`计算文件哈希,`md5sum -c checksums.txt`校验文件完整性。注意,应结合安全存储和备份策略使用。
|
13天前
|
数据挖掘 Linux Perl
Linux命令join:高效处理文本数据的利器
`join`是Linux文本处理的强兵,用于基于共同字段合并两个已排序文件。它按字典序比较字段,支持自定义分隔符,且能处理未匹配行。`-a`显示未匹配行,`-e`指定空字段替换值,`-j`设置共同字段,`-o`定制输出格式,`-t`定义字段分隔符。在数据分析时,务必先排序文件,并根据需求调整参数。可与`sort`、`cut`等命令配合使用。
|
23天前
|
Linux Python
在 Linux 中查看目录文件数的方法
【6月更文挑战第7天】在 Linux 中查看目录文件数的方法包括:使用 `ls` 命令结合 `wc -l`,`find` 命令,`tree` 命令,以及编程方式(如 Python)。`ls` 和 `find` 命令通过管道传递给 `wc -l` 统计行数,而 `tree` 命令提供树状视图并显示文件数。编程方式则允许自定义实现,例如 Python 中的 `os.walk()`。注意权限、效率和场景适用性,选择合适的方法以提高 Linux 操作效率。
38 3
|
2天前
|
算法 Linux 数据处理
Linux命令ptx:数据索引利器
**Linux的ptx命令是文本索引工具,用于读取英文文本并创建排序索引。它支持关键字搜索、排序,并可定制输出。例如,提取`example.txt`的关键词(参照`keywords.txt`)并按字母顺序排序至`index.txt`:`ptx -o keywords.txt example.txt > index.txt`。使用时注意文件编码、参数选择,可与其他命令结合使用,并优化处理大量数据时的性能。是数据分析的好帮手。**
|
2天前
|
Linux 数据库
Linux安装达梦数据库达梦数据
Linux安装达梦数据库达梦数据
4 0
|
2天前
|
Linux 数据处理
Linux中的pr命令:数据格式化与打印的艺术
`pr`命令是Linux下用于文本格式化的工具,擅长分页、设置页眉页脚及列宽,方便打印和阅读。它可以处理文件、管道输入,常用参数如 `-h` 设定页眉,`-t` 设置页脚,`-l` 控制每页行数,`-w` 设置列宽。例如,`pr -h "标题" -t "页码:%d" -l 2 file.txt` 可以将文本文件格式化并添加定制的页眉页脚。结合其他命令使用能增强文本处理能力。记得测试输出,了解详细帮助可查阅`man pr`。