Since Mac OS-X is a *nix, you should have rsync available.
I use rsync for backing up every system I maintain, and I follow the same basic pattern for each platform, though the details vary a bit.
On the business server, I have another machine connected across one segment of the LAN, and I do my daily backups using rsync to that other machine. That machine’s entire purpose for existing is to keep the backups for the business server.
On my workstation, which has 6 hard drives in it, I back up the system daily from one hard drive to another, and all my personal files (my /home directory) from one hard drive to another. On a weekly basis I ship a copy of both backups to an external drive, and I take the external drive offsite.
Daily backups are kept for one week. Once a week on Saturday night, the oldest daily backup is redefined as a weekly backup and kept indefinitely.
Recovery, on those occasions where it is necessary, is a trivial exercise and I NEVER lose data.
Here are the rsync scripts I use on my workstation:
dosysbackup (runs nightly at 4 AM)
#!/bin/bash
rm -rf /mnt/sda6/back/backup6
mv /mnt/sda6/back/backup5 /mnt/sda6/back/backup6
mv /mnt/sda6/back/backup4 /mnt/sda6/back/backup5
mv /mnt/sda6/back/backup3 /mnt/sda6/back/backup4
mv /mnt/sda6/back/backup2 /mnt/sda6/back/backup3
mv /mnt/sda6/back/backup1 /mnt/sda6/back/backup2
cp -al /mnt/sda6/back/backup0 /mnt/sda6/back/backup1
rsync -a --delete --exclude /dev --exclude /tmp --exclude /home --exclude /media --exclude /proc --exclude /sys --exclude /mnt --exclude /var/tmp --exclude /var/lib/mysql --exclude /var/cache / /mnt/sda6/back/backup0
rsync -a /mnt/sde1/var/lib/mysql /mnt/sda6/back/backup0/var/lib
do home backup (nightly at 4:15AM)
#!/bin/bash
rm -rf /mnt/sdc9/homeback/backup6
mv /mnt/sdc9/homeback/backup5 /mnt/sdc9/homeback/backup6
mv /mnt/sdc9/homeback/backup4 /mnt/sdc9/homeback/backup5
mv /mnt/sdc9/homeback/backup3 /mnt/sdc9/homeback/backup4
mv /mnt/sdc9/homeback/backup2 /mnt/sdc9/homeback/backup3
mv /mnt/sdc9/homeback/backup1 /mnt/sdc9/homeback/backup2
cp -al /mnt/sdc9/homeback/backup0 /mnt/sdc9/homeback/backup1
rsync -a --delete --exclude tmp --exclude .Mail/spam --exclude .Mail/trash /mnt/sde1/home /mnt/sdc9/homeback/backup0
doweeklysysbackup (runs on sunday morning at 3:45 AM)
#!/bin/bash
dirname=date
;
mv /mnt/sda6/back/backup6 /mnt/sda6/back/weeklybackups/"$dirname"
doweeklyhomebackup (runs Sun morning at 3:50 AM)
#!/bin/bash
dirname=date
;
mv /mnt/sdc9/homeback/backup6 /mnt/sdc9/homeback/weeklybackups/"$dirname"