即使没有 Shell 访问权限,如何自动备份您的 DirectAdmin 经销商? 即使没有 Shell 访问权限,如何自动备份您的 DirectAdmin 经销商?

即使没有 Shell 访问权限,如何自动备份您的 DirectAdmin 经销商?

如果你一直关注我使用DirectAdmin的历程,就会知道我已在Silicom Network注册了DirectAdmin经销商账户:

还有一件事我想做:备份所有数据。

我的理念……或者更确切地说,是社群的理念

一方面,提供共享主机服务商负责备份。我来这里是为了使用 DirectAdmin,而不是管理服务器。我对网站备份一窍不通。如果服务器崩溃了,我希望服务商能将其恢复到正常运行状态,包括我的数据。

然后,还有现实。

花了那么多时间和精力建网站,我不想把所有鸡蛋都放在别人的篮子里。我想保留自己的备份。服务商可能会被黑客攻击、倒闭,甚至被陨石砸中等等。

备份应该自动化。如果我必须定期手动打开 FileZilla 进行备份,那肯定做不到。

备份也应该安全、异地保存、一式两份或三份、版本控制等等,但我们先把基本要素落实到位。

数据库备份

好消息是,编写一个脚本来自动复制DA经销商网站上的所有内容非常简单。但我们确实需要考虑MySQL。

数据库托管在数据库服务器上。它可能与 DA 服务器是同一台服务器,但关键在于数据并不存储在您的用户主目录中。因此,您需要先执行 MySQL 数据导出操作。

由于我们没有 shell 访问权限……该如何实现呢?

输入 cron。我们将创建一个 cron 任务来运行 mysqldump。

准备用于 MySQL 备份的 DA

首先,我们创建一个目录来存放备份文件。您希望将此文件夹放在 public_html 目录下,因为那样全世界的人都可以访问它!

在 DirectAdmin 中启动文件管理器。

DirectAdmin 文件管理器

然后,在左侧单击“新建文件夹”:

DirectAdmin 新建文件夹

将其命名为 mysql_backups。完成后,它应该看起来像这样:

DA 新文件夹已创建

现在我们来谈谈身份验证。

可以通过命令行以不同的方式对数据库进行身份验证。您可以输入密码,但这显然在这里行不通。

你也可以使用 MYPWD 环境变量。你会看到很多关于这样做“不安全”以及“会把你的密码显示在任何人都能看到的 ps 输出中”之类的无稽之谈。这是错误的。“export”命令是 shell 内置命令(仔细想想,它必须是内置命令)。只有你和 root 用户才能看到你的环境变量——而他们也能看到你做的任何操作。

但是,MYPWD 正在被弃用,所以我们将使用旧的可靠方法:.my.cnf 文件。

再次打开文件资源管理器,单击“新建文本文件”:

DA 新文本文件

将其命名为 .my.cnf。然后右键单击它,单击“编辑”:

DirectAdmin 编辑

按如下方式填写:

 [客户]
用户=您的数据库用户
密码=您的数据库密码
数据库=你的数据库名称

然后点击右上角的“保存文件”。

我们需要将此文件设置为只有所有者才能读写(权限模式 0600)。为此,请在文件管理器中右键单击该文件,然后选择“设置权限”:

DA 设置权限

在对话框中,将“Chmod”下方的值设置为“600”。或者,您可以勾选相应的复选框,使其看起来像这样:

DA 设置权限

点击保存。

创建定时任务

在 DA 面板中点击“Cron 作业”。

DirectAdmin 定时任务

然后点击右上角的“创建定时任务”。

在以下面板中,您需要选择此任务的触发时间。假设您希望它在上午 11 点运行,则在“小时”栏中输入“11”,其他设置保持不变。这样,该任务每天上午 11 点都会运行。您可以根据需要进行修改。

然后是工作本身,在“命令”下:

 mysqldump -u your-db-user -h localhost your-db-name > /home/your-da-user/mysql_backups/your-db-name.sql

这会将您的数据库转储到 mysql_backups 目录下名为 your-db-name.sql 的文件中。

如果您有多个数据库,则需要为每个数据库创建一个定时任务 (cron job)。您也可以创建一个脚本来处理它们,但这超出了本教程的范围。请参阅这篇StackOverflow 帖子,了解如何使用 .my.cnf 文件进行处理。

您还可以考虑点击“将所有 Cron 输出发送到电子邮件”并输入您的电子邮件地址。这样,您的 Cron 作业的任何错误都会发送到您的邮箱。

获取备用电源

在你的家用电脑上,你可以使用 wget 高效地下载“domains”文件夹中的所有内容:

例如,要注销我的 runningdos.com 帐户:

 wget -r --mirror 'ftp://raindog308:[email protected]:/domains

当然,请确保将此操作安排在数据库转储完成后进行。

可能的改进

这种设置可以通过以下几种方式进行改进:

  • 根据日期将数据库备份到不同的文件中,这样每次新的备份都不会覆盖旧的备份。
  • 如果这样做,则需要执行一项删除旧备份的任务。
  • 管理多个数据库
  • 除了“域名”文件夹之外,您还可以备份其他内容,例如您的电子邮件。

但我认为这些应该足够你入门了。祝你学习愉快!