I ran into a problem this week when I tried to pull a file off of a backup and found out that I could not read any of the backup tapes that I had. I was using Dump to create the backups and when I tried to access them with Restore I got the error message that the tape was not a dump tape. I had tested this before I put the server into place, but something has changed in the last two months. I decided to change to a different method of creating backups. I am now going to tar the server and then use scp to move the tar file to a second server that is located off site.
Lets start with setting the machines up so that we can transfer files between the two servers without being prompted for a password. For this posting server1 will be the server that is being backed up and server2 will be the server that we are sending the backup to.
Configure the Client (server1)
Create the client key without a password:
[root@server1 /]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key [/root/.ssh/id_dsa]:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa
Your public key has been saved in /root/.ssh/id_dsa.pub
The key fingerprint is 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:root@server1
Lets take a look at the key:
[root@server1 /]# cd ~/.shh
[root@server1 /]# ls
id_dsa id_dsa.pub known_hosts
Copy the key to the server that we are going to copy the backup to:
[root@server1 /]# scp -r id_dsa.pub root@server1:key-temp.pub
Configure the server (server2)
Lets make a .ssh directory if the directory does not exist:
[root@server2:~#] mkdir .ssh
[root@server2:~#] chmod 700 .ssh
[root@server2:~#] cd .ssh
Add the key for the client to the authorized keys:
[root@server2:~#] cat ~/key-temp.pub >> authorized_keys
[root@server2:~#] rm ~/key-temp.pub
You should now be able to use ssh and scp from serve1 to server2 without being prompted for a password.
From here I had to create the script for creating the tar file of server1 and then copying it to server2. I created a directory called backup to hold my script and the MySQL backups. So on server1 we are going to create the directory and the script:
[root@server1: /#] cd /
[root@server1: /#] mkdir /backup
[root@server1: /#] cd /backup
[root@server1: /#] nano backup.sh
Now the script:
#!/bin/sh
# Define the variables for later use:
BACKUPFILE=backup-$(date +%Y%m%d)
OLDFILE=backup-$(date --date='7 day ago' +%Y%m%d) # We are keeping 7 days of databases dumps.
EXCLUDES="--exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/media --exclude=$BACKUPFILE.tgz"
BACKUPDIR=/
COPYTO=root@server2:/root/.
# Backup the MySQL Databases:
mysqldump -uroot --opt databasename1 > /backup/databasename1-$BACKUPFILE.sql
mysqldump -uroot --opt databasename2 > /backup/databasename2-$BACKUPFILE.sql
# Create the tar file:
tar cvpzf $BACKUPFILE.tgz $EXCLUDES $BACKUPDIR
# Upload the tar file:
scp -rp $BACKUPFILE.tgz $COPYTO
# Remove the backup file:
rm $BACKUPFILE.tgz
rm /backup/databasename1-$OLDFILE.sql
rm /backup/databasename2-$OLDFILE.sql
You should now be able to backup server1 with the command:
[root@server1: /#] sh /backup/backup.sh
Just want to say thanks to David for his demo at the last ECLUG meeting, because it gave me the point to jump off at.