我作为一个小公司的开发人员工作,远远不是一个Linux专业版或pipe理员。 不过,我已经build立了一个Ubuntu服务器文件的目的(LAMP与维基)和版本(SVN)。
我们的其他环境完全是基于Windows的。 我想同时备份SVN-repository和mySQL数据库。 为此,我们的pipe理员在我们的备份服务器上build立了一个共享。
我想要的是一个方便简单的方法来打包所有需要的东西(用于恢复wiki和SVN的东西),并把它放在共享目录(这是经常备份的基础上)。
我需要备份什么?
我该怎么做呢?
我如何自动执行这些任务?
我会build议使用包backupninja – 它基本上是一些自动脚本的包装,做各种服务的备份。 我可以使用duplicity , rdiff-backup (我的首选),刻录DVD ISO等。
sudo apt-get install backupninja rdiff-backup
为了让你开始(将引导你设置各个部分):
sudo ninjahelper
这也允许你添加随机path进行备份,无论如何。 从备份中救出了一些机器,我发现能够复制一个已知的/ etc / srv / http(我保留networking资料)和数据库转储的方便。
一旦完成,唯一的问题是ninjahelper坚持要么在远程机器上设置root密码 – 要么手动传输SSH密钥(如果你做了远程备份的话):
在本地机器上:
sudo ssh-keygen sudo scp /root/.ssh/id_dsa.pub [email protected]:backup_key
Ubuntu每个默认都有一个备份用户,所以我们添加SSH密钥以允许远程login:
sudo mkdir -p /var/backup/.ssh sudo mv backup_key /var/backup/.ssh/authorized_keys sudo chown backup:backup /var/backup/.ssh/authorized_keys
(这是从内存,所以我可能会在确切的命令…)
您将需要备份Wiki和SVN以及数据库的文件。 我强烈build议您保留多个备份。 如果每天只有一个备份被覆盖,那么当数据发生问题时,您可以轻松地将损坏的数据replace为唯一的备份。 我build议一个滚动的7天备份策略,比如使用星期一,星期二等备份。 这样,您有一个星期才能注意到,在用损坏的数据replace上一次良好的备份之前,存在一个问题。
到目前为止最简单的事情就是编写自己的备份脚本,然后由root的cron每晚调用。 就我个人而言,我将Perl用于脚本,因为这恰好是我select的语言,但是您可以使用任何您喜欢的脚本语言。 你select写什么,你会最终使用相同的工具:
如果有帮助,下面是我的一个备份脚本的匿名版本:
#!/usr/bin/perl use strict; # # Set up variables # my $dbname = 'xxxxx'; my $dbuser = 'xxxxxxx'; my $dbpass = 'xxxxxxx'; my $uploadsDir = '/xxxxxx/blog/wp-content/uploads/'; my $backupLocal = '/home/xxxxx/backup/blog/'; my $baseFolderName = 'blogBackup'; my $backupRemote = 'user@server:~/backup/blog/'; # # Should never have to edit anything below here # # # Step 1 - get the day of the week and set up the folder to use for the backup # my @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun); my @time = localtime(); my $dayOfWeek = $weekDays[$time[6]]; my $backupFolder = "$baseFolderName-$dayOfWeek"; # if the folder exists, delete it my $ignore; if(-e "$backupLocal$backupFolder"){ $ignore = `/bin/rm -rf $backupLocal$backupFolder`; } # create the folder $ignore = `/bin/mkdir $backupLocal$backupFolder`; # # Step 2 - do the DB backup # $ignore = `/usr/bin/mysqldump -u $dbuser --password=$dbpass $dbname > $backupLocal$backupF older/database.sql`; # # Step 3 - do the uploads dir backup # $ignore = `/bin/tar -pczf $backupLocal$backupFolder/uploads.tar.gz $uploadsDir`; # # Step 4 - scp the backup to the remote location # $ignore = `/usr/bin/scp -r $backupLocal$backupFolder $backupRemote`;
很难说你还需要备份什么。 这真的取决于情况。 这个Ubuntu机器只是一个数据库和SVN服务器,还是提供其他服务?
您可以使用mysqldump创build一个MySQL转储。 作为备份解决scheme,我会向你推荐口供 。 作为易于configuration的前端,您可以使用ftplicity 。 这些工具将有助于将所有数据备份到(可能是已签名和encryption的)tar归档文件中,并将它们上传到FTP空间或将其存储在其他任何地方。
为了使备份过程自动化,你可以看看cron 。