在 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 等开放源代码工具来构建新的解决方案。
- 最新评论
