快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

在 Linux 上进行自动备份(2)


   cd /home/backup_agent

   # use mysqldump utility to export the sites database tables
   mysqldump -u sitedb -pG0oDP@sswrd --add-drop-table sitedb --tables
   tbl_ccode tbl_machine tbl_session tbl_stats > userdb.sql

   # compress and archive
   tar czf userdb.tgz userdb.sql

    在服务器 #2 上,我们将设置一个类似的脚本来备份站点数据库中给出的独有表单。每个脚本都通过下面的步骤标记为可执行:

    [server1]:$ chmod +x dbbackup.sh

    在服务器 #1 和 #2 上都有了 dbbackup.sh 文件之后,我们返回到离线数据服务器。在那里,我们将创建一个 shell 脚本来调用各个远程 dbbackup.sh 脚本,然后传输压缩的(.tgz)数据文件。

    清单 11. 离线数据服务器上使用的 shell 脚本 backup_remote_servers.sh

     #!/bin/sh

   # use ssh to remotely execute the dbbackup.sh script on server 1
   /usr/bin/ssh [email protected] "/home/backup_agent/dbbackup.sh"

   # use scp to securely copy the newly archived userdb.tgz file
   # from server 1.  Note the use of the date command to timestamp
   # the file on the offsite data server.
   /usr/bin/scp [email protected]:/home/backup_agent/userdb.tgz
   /home/backups/userdb-$(date +%Y%m%d-%H%M%S).tgz

   # execute dbbackup.sh on server 2
   /usr/bin/ssh [email protected] "/home/backup_agent/dbbackup.sh"

   # use scp to transfer transdb.tgz to offsite server.
   /usr/bin/scp [email protected]:/home/backup_agent/transdb.tgz
   /home/backups/transdb-$(date +%Y%m%d-%H%M%S).tgz

    shell 脚本 backup_remote_servers.sh 使用 ssh 命令执行远程服务器上的脚本。因为我们已经设置了无密码访问,所以 ssh 命令能够从离线服务器执行服务器 #1 和 #2 上的命令。现在,整个身份验证过程都是自动的,这归功于 keychain。

    调度

    本文的下一个也是最后一个任务是,调度离线数据存储服务器上的 shell 脚本 backup_remote_servers.sh 的执行。我们将给 cron 调度服务器添加两个条目,以要求每天对脚本备份两次,一次在凌晨 3:34,另一次在晚上 8:34。在离线服务器上使用编辑选项(-e)调用 crontab 程序。

    [offsite]:$ crontab -e

    crontab 调用默认编辑器。默认编辑器使用 shell 环境变量 VISUAL 或 EDITOR 来指定。下面键入两个条目,保存并关闭该文件。


    清单 12. 离线服务器上的 crontab 条目

   34 3 * * * /home/backups/remote_db_backup.sh
   34 20 * * * /home/backups/remote_db_backup.sh

    一个 crontab 行包括两个主要部分,即时间调度部分及其后接的命令部分。时间调度被划分为字段,用于说明命令应该在何时执行:

    清单 13. Crontab 格式

     +---- minute
          | +----- hour
          | | +------ day of the month
          | | | +------ month
          | | | | +---- day of the week
          | | | | | +-- command to execute
          | | | | | |
         34 3 * * * /home/backups/remote_db_backup.sh

    检验您的备份

    应该对备份进行例行检查,以保证备份过程工作正常。自动备份过程能够去除不必要的枯燥工作,但是不应因此而变得懒惰。如果数据值得备份,那么它也值得您时常进行抽样检查。

    考虑添加 cron 作业来提醒自己每月至少检查一次备份。此外,每隔一段时间修改一次安全密钥也是个好主意,也可以调度一个 cron 作业来提醒自己及时更改安全密钥。

    额外的安全措施

    为了加强安全,可以考虑在所有机器上安装和配置入侵检测系统(IDS),例如 Snort。当入侵正在发生或者最近曾发生过,IDS 将会通知用户。使用 IDS,还能够添加其他级别的安全性,例如对备份进行数字签名和加密。

    流行的开源工具(比如 GNU Privacy Guard (GnuPG)、OpenSSL 和 ncrypt)都支持通过 shell 脚本保护归档文件,但是本文不建议在没有 IDS 提供的额外防护级别的情况下这样做(有关 Snort 的更多信息,请参阅 参考资料)。

    结束语

    本文展示了如何在远程服务器上执行脚本,以及如何进行安全和自动化的文件传输。我希望您能由此得到灵感而开始考虑保护您自己的重要数据,并使用 OpenSSH 和 Snort 等开放源代码工具来构建新的解决方案。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论