在Ubuntu 14.04上如何备份和恢复Redis数据

这篇具有很好参考价值的文章主要介绍了在Ubuntu 14.04上如何备份和恢复Redis数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

Redis 是一个内存中的键值缓存和存储(也可以是数据库),同时也可以持久化(永久保存)到磁盘上。在本文中,您将了解如何在 Ubuntu 14.04 服务器上备份 Redis 数据库。

默认情况下,Redis 数据保存在一个 .rdb 文件中,这是您的 Redis 数据集的一个时间点快照。这个快照是在指定的时间间隔内生成的,非常适合用于备份。

先决条件

要完成本教程中的步骤,您需要:

  • 一个 Ubuntu 14.04 服务器
  • 安装 Redis。您可以按照这个 Redis 设置教程中的 master 设置(尽管在主从集群中同样适用)
  • 确保您的 Redis 服务器正在运行
  • 如果设置了 Redis 密码,强烈建议设置,确保您知道密码。密码在 Redis 配置文件 /etc/redis/redis.conf 中。

步骤 1 — 定位 Redis 数据目录

Redis 将其数据存储在服务器上的一个目录中,这就是我们要备份的内容。首先我们需要知道它的位置。

在 Ubuntu 和其他 Linux 发行版中,Redis 数据库目录是 /var/lib/redis。但是,如果您管理的服务器是继承而来的,并且 Redis 数据位置已更改,您可以通过输入以下命令来定位它:

sudo locate *rdb

或者,您也可以从 redis-cli 提示符中找到它。要做到这一点,输入:

redis-cli

如果 Redis 服务器没有运行,响应将是:

无法连接到 127.0.0.1:6379 的 Redis:连接被拒绝
未连接>

在这种情况下,启动 Redis 并使用以下命令重新连接:

sudo service redis-server start

redis-cli

Shell 提示现在应该变成:

127.0.0.1:6379>

连接到 Redis 后,接下来的两个命令将对其进行身份验证并获取数据目录:

auth 插入-redis-密码-这里

config get dir

最后一个命令的输出应该是您的 Redis 数据目录:

1) "dir"
2) "/var/lib/redis"

记下您的 Redis 目录。如果它与显示的目录不同,请确保在整个教程中使用此目录。

现在可以退出数据库命令行界面:

exit

检查这是否是正确的目录:

ls /var/lib/redis

您应该看到一个 dump.rdb 文件。这就是 Redis 数据。如果 appendonly 也已启用,您还将看到一个 appendonly.aof 或另一个 .aof 文件,其中包含服务器接收的所有写操作的日志。

有关 Redis 持久性的讨论,请参阅此帖子以了解这两个文件之间的区别。基本上,.rdb 文件是当前快照,而 .aof 文件保留了您的 Redis 历史。这两者都值得备份。

我们将从只有 .rdb 文件开始,并以自动备份这两个文件结束。

(可选)步骤 2 — 添加示例数据

在本节中,您可以创建一些示例数据以存储在您的 Redis 数据库中。如果您的服务器上已经有数据,您可以直接备份现有内容。

登录到数据库命令行界面:

redis-cli

进行身份验证:

auth 插入-redis-密码-这里

让我们添加一些示例数据。每个步骤后,您应该收到 OK 的响应。

SET shapes:triangles "3 sides"

SET shapes:squares "4 sides"

确认数据已添加。

GET shapes:triangles

GET shapes:squares

以下是输出:

"3 sides"

"4 sides"

要将这些更改保存到 /var/lib/redis/dump.rdb 文件中,请执行保存操作:

save

您可以退出:

exit

如果愿意,现在可以检查 dump 文件的内容。它应该包含您的数据,尽管以机器友好的形式呈现:

sudo cat /var/lib/redis/dump.rdb

步骤 3 —— 备份 Redis 数据

现在你知道了 Redis 数据的存储位置,是时候进行备份了。从官方 Redis 网站上可以找到以下引用:

Redis 非常友好地支持数据备份,因为你可以在数据库运行时复制 RDB 文件:一旦生成,RDB 就不会被修改,而在生成过程中会使用临时名称,并且只有在新快照完成时才会使用 rename(2) 原子地将其重命名为最终目的地。

因此,你可以在 Redis 服务器运行时备份或复制数据库文件。假设你要将其备份到家目录下的一个目录中,执行备份的命令如下:

sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001

Redis 定期保存内容,这意味着如果上述命令是你运行的全部内容,你不能保证备份是最新的。 你需要先保存你的数据。

然而,如果可以接受潜在的少量数据丢失,仅备份这一个文件就可以。

保存数据库状态

为了获得一个更加近期的 Redis 数据副本,更好的方法是访问 redis-cli,即 Redis 命令行。

按照第 1 步中的说明进行身份验证。

然后,像这样发出 save 命令:

save

输出应该类似于:

OK
(1.08s)

退出数据库。

现在你可以运行上面给出的 cp 命令,确信你的备份是完全最新的。

虽然 cp 命令将提供数据库的一次性备份,但最佳解决方案是设置一个可以自动化该过程的 cron 作业,并使用一个可以执行增量更新并在需要时恢复数据的工具。

步骤 4 —— 使用 rdiff-backup 和 Cron 配置自动更新

在本节中,我们将配置一个自动备份,备份整个 Redis 数据目录,包括数据文件。

有几种自动化备份工具可供选择。在本教程中,我们将使用一个较新且用户友好的工具,名为 rdiff-backup

rdiff-backup 是一个命令行备份工具。很可能你的服务器上尚未安装 rdiff-backup,因此你首先需要安装它:

sudo apt-get install -y rdiff-backup

现在它已经安装好了,你可以通过将 Redis 数据备份到家目录中的一个文件夹来测试它。在本例中,我们假设你的家目录是 /home/sammy

请注意,如果目标目录不存在,脚本将会创建它。换句话说,你不必自己创建它。

使用 –preserve-numerical-ids,源目录和目标目录的所有权将保持一致。

sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis

与之前的 cp 命令类似,这是一次性备份。不同之处在于现在我们备份整个 /var/lib/redis 目录,并且使用 rdiff-backup

现在我们将使用 cron 自动化备份,以便在设定的时间进行备份。为此,打开系统 crontab:

sudo crontab -e

(如果你在此服务器上以前没有使用过 crontab,请在提示时选择你喜欢的文本编辑器。)

在文件底部追加如下条目。

0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis

此 Cron 条目将在每天午夜执行一次 Redis 备份。–no-file-statistics 开关将禁用写入 rdiff-backup-data 目录中的 file_statistics 文件,这将使 rdiff-backup 运行更快,并且占用的磁盘空间稍少一些。

或者,你可以使用以下条目进行每日备份:

@daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis

有关 Cron 的更多信息,请阅读这篇关于 Cron 的文章。

目前,备份将每天执行一次,因此你可以明天回来进行最终测试。或者,你可以暂时增加备份频率以确保它正常工作。

由于文件的所有者是 redis 系统用户,你可以使用以下命令验证它们是否存在(确保你等到备份实际触发):

ls -l /home/sammy/redis

你的输出应该类似于:

total 20
-rw-rw---- 1 redis redis    70 Sep 14 13:13 dump.rdb
drwx------ 3 root  root  12288 Sep 14 13:49 rdiff-backup-data
-rw-r----- 1 redis redis   119 Sep 14 13:09 redis-staging-ao.aof

现在你的 Redis 数据每天都会在同一台服务器上的家目录中进行备份。

步骤 5 — 从备份中恢复 Redis 数据库

现在您已经学会了如何备份 Redis 数据库,接下来的步骤将向您展示如何从 dump.rdb 备份文件中恢复数据库。

恢复备份需要您用恢复文件替换活动的 Redis 数据库文件。由于这可能具有破坏性,我们建议如果可能的话,将其恢复到一个全新的 Redis 服务器。

您不希望用更有问题的恢复文件覆盖您的实时数据库。然而,即使是在恢复到同一台服务器时,重命名而不是删除当前文件可以最小化风险,这也是本教程展示的策略。

检查恢复文件内容

首先,检查您的 dump.rdb 文件的内容。确保它包含您想要的数据。

您可以直接检查转储文件的内容,尽管请记住它使用的是 Redis 友好的格式,而不是人类友好的格式:

sudo cat /home/gilly/redis/dump.rdb

对于一个小型数据库,您的输出应该看起来像这样:


REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?

如果您最近的备份没有所需的数据,那么您不应该继续进行恢复。如果内容存在,可以继续。

可选:模拟数据丢失

让我们模拟数据丢失,这将是从备份中恢复的原因。

登录到 Redis:

redis-cli

在这一系列命令中,我们将使用 Redis 进行授权并删除 shapes:triangles 条目:

auth insert-redis-password-here

DEL shapes:triangles

现在让我们确保该条目已被删除:

GET shapes:triangles

输出应该是:


(nil)

保存并退出:

save

exit

可选:设置新的 Redis 服务器

现在,如果您计划恢复到一个新的 Redis 服务器,请确保新的 Redis 服务器已经启动。

为了本教程的目的,我们将只遵循 Redis 集群教程的 第 1 步,尽管如果您想要一个更复杂的设置,可以遵循整篇文章。

如果您遵循了 第 2 步,在那里您添加了密码并启用了 AOF,请确保在恢复过程中考虑到这一点。

一旦您通过运行 redis-benchmark -q -n 1000 -c 10 -P 5 验证了新服务器上的 Redis 已经启动,您就可以继续。

停止 Redis

在我们替换 Redis 转储文件之前,我们需要停止当前运行的 Redis 实例。一旦停止 Redis,您的数据库将处于离线状态。

sudo service redis-server stop

输出应该是:


Stopping redis-server: redis-server

检查它是否真的停止了:

sudo service redis-server status

redis-server is not running

接下来,我们将重命名当前的数据库文件。

重命名当前的 dump.rdb

Redis 从 dump.rdb 文件中读取其内容。让我们将当前的文件重命名,为我们的恢复文件腾出空间。

sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old

请注意,如果您决定当前版本比您的备份文件更好,您可以恢复 dump.rdb.old

如果 AOF 已启用,请将其关闭

AOF 跟踪每个写操作到 Redis 数据库。然而,由于我们试图从时间点备份中恢复,我们不希望 Redis 重新创建其 AOF 文件中存储的操作。

如果您按照 Redis 集群教程中的说明设置了 Redis 服务器,则 AOF 已启用。

您还可以列出 /var/lib/redis/ 目录的内容。如果您在那里看到一个 .aof 文件,那么您已经启用了 AOF。

让我们将 .aof 文件重命名,暂时将其放在一边。这会将每个以 .aof 结尾的文件重命名,因此如果您有多个 AOF 文件,您应该单独重命名文件,而不要运行此命令:

sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old

编辑您的 Redis 配置文件,暂时关闭 AOF:

sudo nano /etc/redis/redis.conf

AOF 部分,查找 appendonly 指令,并将其从 yes 更改为 no。这将禁用它:


appendonly no

恢复 dump.rdb 文件

现在我们将使用我们的恢复文件,如果您按照本教程的先前步骤进行操作,该文件应该保存在 /home/sammy/redis/dump.rdb

如果您要将数据恢复到新的服务器,现在是从备份服务器上传文件到新服务器的时候了:

scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb

现在,在恢复服务器上,可以是原始的 Redis 服务器或者是新的服务器,您可以使用 cp 命令将文件复制到 /var/lib/redis 文件夹:

sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis

(如果您将文件上传到 /home/sammy/dump.rdb,则使用命令 sudo cp -p /home/sammy/dump.rdb /var/lib/redis 来复制文件。)

或者,如果您想使用 rdiff-backup,运行下面显示的命令。请注意,这只适用于从您最初使用 rdiff-backup 设置的文件夹进行恢复。使用 rdiff-backup 时,您必须指定目标文件夹中的文件名:

sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb

有关 -r 选项的详细信息,请参考本文末尾给出的项目网站。

为 dump.rdb 文件设置权限

如果您要将数据恢复到与备份相同的服务器,那么您可能已经拥有了正确的权限。

如果您将备份文件复制到新的服务器,您可能需要更新文件权限。

让我们查看 /var/lib/redis/ 目录中 dump.rdb 文件的权限:

ls -la /var/lib/redis/

如果您看到类似以下内容:

-rw-r-----  1 sammy sammy   70 Feb 25 15:38 dump.rdb
-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

您需要更新权限,以便文件归 redis 用户和组所有:

sudo chown redis:redis /var/lib/redis/dump.rdb

同时更新文件以便组也可以写入:

sudo chmod 660 /var/lib/redis/dump.rdb

现在再次列出 /var/lib/redis/ 目录的内容:

ls -la /var/lib/redis/

现在您恢复的 dump.rdb 文件已经拥有了正确的权限:

-rw-rw----  1 redis redis   70 Feb 25 15:38 dump.rdb
-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

启动 Redis

现在我们需要再次启动 Redis 服务器。

sudo service redis-server start

检查数据库内容

让我们看看恢复是否成功。

登录到 Redis:

redis-cli

检查 shapes:triangles 条目:

GET shapes:triangles

输出应该是:

"3 sides"

太棒了!我们的恢复工作正常。

退出:

exit

如果您不使用 AOF,那么您已经完成了!您恢复的 Redis 实例应该已经恢复正常。

(可选)启用 AOF

如果您想要恢复或开始使用 AOF 来跟踪数据库的所有写操作,请按照以下说明操作。AOF 文件必须从 Redis 命令行重新创建。

登录到 Redis:

redis-cli

打开 AOF:

BGREWRITEAOF

您应该会得到以下输出:

Background append only file rewriting started

运行 info 命令。这将生成大量输出:

info

滚动到Persistence部分,并检查aof条目是否与此处显示的内容匹配。如果 aof_rewrite_in_progress0,则 AOF 文件的重新创建已经完成。

持久化

. . .

aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok


如果确认AOF文件的重建已经完成,现在可以退出Redis命令行:

```custom_prefix(127.0.0.1:6379>)
exit

您可以再次列出/var/lib/redis中的文件:

ls /var/lib/redis

您应该再次看到一个活动的.aof文件,例如appendonly.aofredis-staging-ao.aof,以及dump.rdb文件和其他备份文件。

确认后,停止Redis服务器:

sudo service redis-server stop

现在,在redis.conf文件中再次启用AOF:

sudo nano /etc/redis/redis.conf

然后通过将appendonly的值更改为yes来重新启用AOF:


appendonly yes

启动Redis:

sudo service redis-server start

如果您想再次验证数据库的内容,只需再次运行检查数据库内容部分。

就是这样!您恢复的Redis实例应该恢复正常了。

结论

按照本文所述的方式备份Redis数据适用于当您不介意将数据备份到同一台服务器上的目录时。

当然,最安全的方法是将备份到不同的机器。您可以通过阅读以下关于备份的文章来探索更多备份选项:

  • 如何为您的VPS选择有效的备份策略

您可以使用许多这些备份方法与/var/lib/redis目录中的相同文件。文章来源地址https://www.toymoban.com/news/detail-845102.html

到了这里,关于在Ubuntu 14.04上如何备份和恢复Redis数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu20.04系统备份和恢复 -- 绝对好用

    前言 看了很多教程,多多少少都没说全,例如“如何找到分区”、如何删除原系统等等,此贴将详细讲解。 正文 首先看我的硬盘作为参考: 备份系统 第一步,在终端里进入root模式,并进入根目录: 第二步,备份系统: 注1:我把系统备份后的文件命名为:backup.tgz,也可以

    2024年02月20日
    浏览(40)
  • 如何备份与恢复MySQL数据库数据

    目录 一、MySQL备份 备份方式 完全备份 差异备份 增量备份 二、常见的备份方法 物理冷备 专用备份工具 mysqldump 或 mysqlhotcopy 启用二进制日志进行增量备份 第三方工具备份 三、MySQL完全备份 四、数据库完全备份分类 物理冷备份与恢复 mysqldump备份与恢复 五、物理冷备份与恢复

    2024年02月16日
    浏览(73)
  • 【Linux】Mysql的数据库备份及恢复

            备份就是为了防止原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或 者全部数据丢失后,备份文件可以帮我们找回丢失的数据。因此,数据备份是很重要 的工作。 常见数据库备份的应用场景如下: 数据丢失应用场景: 人为操作失误造成某些数据

    2023年04月10日
    浏览(54)
  • Linux环境Minio的数据迁移、备份和恢复

    下载Linux版客户端文件 安装Minio客户端: 到此Minio客户端就安装好了。 假定现在有两台Linux环境上部署的Minio服务器,分别是旧服务器A和新服务器B,所有操作都在新服务器B上进行。 在新服务器B上为服务器A和B分别设置别名 说明 : (a)minio_data_A和minio_data_B就是设置的别名;

    2024年02月13日
    浏览(48)
  • 如何使用 PHP 进行数据库备份和恢复?

    想要使用PHP进行数据库备份和恢复? 首先,我们要明白为什么要备份和恢复数据库。因为有时候,我们的数据库可能会被黑客攻击或者系统故障所影响,导致数据丢失或损坏。所以,为了防止这种情况发生,我们需要定期备份数据库,并在需要时快速恢复。 好了,现在我们

    2024年02月15日
    浏览(91)
  • 读高性能MySQL(第4版)笔记14_备份与恢复(中)

    7.3.6.1. 消除了底层数据存储引擎的差异 7.3.7.1. 如果MySQL在内存中的数据还没有损坏,当不能得到一个正常的裸文件备份时,或许可以得到一个可以信赖的逻辑备份 7.4.1.1. 某些场景下比数据库文件本身更大 7.4.2.1. 浮点表示的问题、软件Bug等都会导致问题 7.4.3.1. MySQL中导出数

    2024年02月08日
    浏览(33)
  • linux/ubuntu系统管理(8)ubuntu启动模式介绍以及如何进入单用户模式和恢复模式

    Ubuntu操作系统提供了多种启动模式,每种模式都有不同的用途和功能。下面将深入介绍Ubuntu的几种启动模式: 正常启动模式(Normal boot) :这是默认的启动模式,也是大多数用户使用的模式。在正常启动模式下,系统会按照正常的流程启动,加载所有必要的服务和驱动程序,

    2024年01月25日
    浏览(47)
  • Clonezila备份Linux并恢复

    Clonezila备份Linux并恢复 Tuxboot制作U盘镜像: tuxboot-0.8.2.exe 镜像版本: clonezilla-live-2.7.3-19-amd62.4.zip ​ 制作完成后需在U盘中新建目录用于存放镜像 ​ 不同品牌的主板设置U盘启动的方式不同,请根据主板品牌进行设置 ​ 参照: CentOS系统备份/恢复(Clonezila) 2.4.1、选择Clonezi

    2024年02月14日
    浏览(32)
  • 【Linux】MySQL备份与恢复

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 备份的主要目的是灾难恢氨 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 ●程序错误 ●人为操作错误 ●运算错误 ●磁盘故障 ●灾难 (如火灾、地

    2024年02月10日
    浏览(33)
  • Ubuntu20.04安装Postgres主从备份

    检查是否安装成功 配置远程连接 修改主服务器的配置文件(postgresql.conf、pg_hba.conf) 添加如下配置 重启服务 首先进行第一步的安装操作。 然后配置从服务器 使用下面命令备份主数据库中的数据 -h –指定作为主服务器的主机。 -D –指定数据目录。 -U –指定连接用户。 -P

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包