来将一些数据库表导出到一个 SQL 输入文件中。
清单 10. 服务器 1 的 dbbackup.sh shell 脚本
#!/bin/sh # change into the backup_agent directory where data files are stored. 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. 用在离线的数据服务器上的 backup_remote_servers.sh shell 脚本
#!/bin/sh # use ssh to remotely execute the dbbackup.sh script on server 1 /usr/bin/ssh backup_agent@server1.com "/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 backup_agent@server1.com:/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 backup_agent@server2.com "/home/backup_agent/dbbackup.sh" # use scp to transfer transdb.tgz to offsite server. /usr/bin/scp backup_agent@server2.com:/home/backup_agent/transdb.tgz /home/backups/transdb-$(date +%Y%m%d-%H%M%S).tgz
backup_remote_servers.sh shell 脚本使用 ssh 命令来执行远程服务器上的脚本。由于我们 已经设置的无密码的访问,ssh 命令可以通过离线的服务器在服务器 1 和 2 上远程地执行命令。 感谢 keychain,整个认证过程现在可以自动完成。
调度 我们的下一个步骤,也是最后一个步骤,是调度 backup_remote_servers.sh shell 脚本在 离线的数据存储服务器上的执行。我们将向 cron 调度服务器中添加两个条目,以要求每天执行 备份脚本两次,3:34 执行一次,8:34 再执行一次。在离线的服务器上使用 edit(-e)选项调用 crontab 程序。
[offsite]:$ crontab -e
crontab 调用 VISUAL 或 EDITOR shell 环境变量所指定的默认的编辑器。然后,输入两个条目并保存和关闭文件。
清单 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 作业来提醒您做这件事。
另外的安全防范 要获得更高的安全性,可以考虑在每台机器上安装并配置一个入侵检测系统(ntrusion Detection System,IDS),比如 Snort。可以预见,当入侵正在发生或者近期发生过时,IDS 将会 通知您。IDS 到位后,您将可以添加其他层次上的安全,比如对您的备份进行数字签名和加密。
GNU Privacy Guard(GnuPG)、OpenSSL 和 ncrypt 等流行的开放源代码工具可以支持通过 shell 脚本 对存档文件进行加密,不过不建议在没有 IDS 提供的额外层次保护的情况下这样做(参阅 参考资料 以获得关于 Snort 的更多信息)。
结束语 本文向您展示了如何让您的脚本在远程服务器执行以及如何执行安全自动的文件传输。 我希望您能由此得到灵感而开始考虑保护您自己的重要数据,并使用 OpenSSH 和 Snort 等 开放源代码工具来构建新的解决方案。
参考资料 - 在官方的 OpenSSH 主页和 OpenSSH Security page 您将找到下载、文档以及更多内容。
- 阅读 Daniel Robbins 的由三部分构成的极好的 IBM developerWorks 文章“OpenSSH 密钥管理”(developerWorks,2001 年)并下载他的 keychain 应用程序。
- 要深入学习 SSH,Carlos 向您推荐 O''''Reilly 的 SSH, The Secure Shell: The Definitive Guide(O''''Reilly & Associates,2001 年)。
- Snort 入侵检测系统(IDS)是一个开放源代码的最佳产品,设计 用来检测并报告未授权的访问或可疑的行为。如果您正在计划自动化对存档文件的签名和加密,那么一定 要使用一个 IDS。
- 您可以使用 GNU Privacy Guard(GnuPG)、OpenSSL 和 ncrypt 在 shell 脚本中对存档备份文件进行 签名和加密。
- 如果您没有使用过它们,那么请参考 TCP wrappers 和 xinetd 中的提示。
- Perl 爱好者还会有兴趣阅读“使用 Perl 自动化 UNIX 系统管理”(developerWorks,2001 年)、 “介绍用于系统管理的 cfengine ”(developerWorks,2002 年)和 “用 Perl 进行应用程序配置”(developerWorks,2000 年),它们都是 Ted Zlatanov 的作品。
- developerWorks 文章“Windows 到 Linux 之旅:第 8 部分. 备份与恢复”(developerWorks,2003 年)给出了关于备份策略的技巧。
- IBM''''s Tivoli Storage Manager for Linux 也可以根据定制的时间表在 Linux 计算机和服务器上自动执行可靠 的备份、存档和集中数据管理。此外, 提供了用于用户管理、访问控制、网络监控 —— 还有更多功能 —— 的产品,都有统一的 环境和接口。
- 通过 IBM developerWorks Tivoli 专区 深入了解 Tivoli 解决方案。
- 在 developerWorks Linux 专区 可以找到 更多为 Linux 开发者准备的参考资料。
- 在 Developer Bookstore Linux 区中定购 打折出售的 Linux 书籍。
- 通过 developerWorks Subscription 使用最新的 IBM 工具和中间件来开发和测试您的 Linux 应用程序:您可以自 WebSphere、DB2、 Lotus、Rational、和 Tivoli 得到 IBM 软件,以及一个可以在 12 个月内使用这些软件的许可,所有的花费都比您想像的要低。
- 自 developerWorks 的 Speed-start your Linux app 专区下载可以运行于 Linux 之上的经过挑选的 developerWorks Subscription 产品免费测试版本,包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server。要更快速地开始上手,请参阅针对各个产品的 how-to 文章和技术支持。
关于作者
Carlos Justiniano 是 Ecuity, Inc 的一名软件设计师。他所感兴趣的方面包括通信和分布式计算。Carlos 为 很多技术杂志撰写文章。他还是基于 Linux 的 ChessBrain 项目的奠基人和设计师,那个项目赢得了与分布式计算 相关的 2005 Guinness World Record。您可以通过 carlos.justiniano@ecuityinc.com 与他联系。
全文出自 : IBM developerWorks 中国网站
上一页 [1] [2] |