脚本化备份过程
我们的下一个任务是创建执行必要的备份过程的 shell 脚本。目标是执行服务器 1 和 2 的完全数据库备份。在我们的例子中,每个服务器都运行着 MySQL 数据库服务器,我们使用 mysqldump 命令行工具来将一些数据库表导出到一个 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 提供的额外层次保护的情况下这样做。
结束语
本文向您展示了如何让您的脚本在远程服务器执行以及如何执行安全自动的文件传输。我希望您能由此得到灵感而开始考虑保护您自己的重要数据,并使用 OpenSSH 和 Snort 等开放源代码工具来构建新的解决方案。
关于作者
Carlos Justiniano 是 Ecuity, Inc 的一名软件设计师。他所感兴趣的方面包括通信和分布式计算。Carlos 为很多技术杂志撰写文章。他还是基于 Linux 的 ChessBrain 项目的奠基人和设计师,那个项目赢得了与分布式计算相关的 2005 Guinness World Record。您可以通过 carlos.justiniano@ecuityinc.com 与他联系。
(出处:http://down.vipcn.com/)
|