可以将这个脚本放进crontab,每天凌晨执行一次,自动备份 这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。 代码: 
#!/bin/bash 
#This is a ShellScript For Auto DB Backup 
#Powered by aspbiz 
#2004-09 #Setting 
#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式 
#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy 
#默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz 
DBName=mysql 
DBUser=root 
DBPasswd= 
BackupPath=/root/ 
LogFile=/root/db.log 
DBPath=/var/lib/mysql/ 
#BackupMethod=mysqldump 
#BackupMethod=mysqlhotcopy 
#BackupMethod=tar 
#Setting End 
NewFile="$BackupPath"db$(date +%y%m%d).tgz 
DumpFile="$BackupPath"db$(date +%y%m%d) 
OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz echo "-------------------------------------------" >> $LogFile 
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile 
echo "--------------------------" >> $LogFile 
#Delete Old File 
if [ -f $OldFile ] 
then 
rm -f $OldFile >> $LogFile 2>&1 
echo "[$OldFile]Delete Old File Success!" >> $LogFile 
else 
echo "[$OldFile]No Old Backup File!" >> $LogFile 
fi if [ -f $NewFile ] 
then 
echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile 
else 
case $BackupMethod in 
mysqldump) 
if [ -z $DBPasswd ] 
then 
mysqldump -u $DBUser --opt $DBName > $DumpFile 
else 
mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile 
fi 
tar czvf $NewFile $DumpFile >> $LogFile 2>&1 
echo "[$NewFile]Backup Success!" >> $LogFile 
rm -rf $DumpFile 
;; 
mysqlhotcopy) 
rm -rf $DumpFile 
mkdir $DumpFile 
if [ -z $DBPasswd ] 
then 
mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1 
else 
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1 
fi 
tar czvf $NewFile $DumpFile >> $LogFile 2>&1 
echo "[$NewFile]Backup Success!" >> $LogFile 
rm -rf $DumpFile 
;; 
*) 
/etc/init.d/mysqld stop >/dev/null 2>&1 
tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1 
/etc/init.d/mysqld start >/dev/null 2>&1 
echo "[$NewFile]Backup Success!" >> $LogFile 
;; 
esac 
fi echo "-------------------------------------------" >> $LogFile 

解决方案 »

  1.   

    用帝国备份王噢
    http://www.phome.net/product/Ebak/
      

  2.   

    #!/usr/local/php/bin/php
    <?
    #auto backup mysql date use mysqldump
    #author Robin([email protected])set_time_limit(0);
    $pwd              = "1q2w3e4r";
    $dbip             = "192.168.0.206";
    $user             = "root";
    $savepath         = "/db_bak/";
    $save_time_limit  = 60*60*2;
    $old_time_for_del = 3;
    if(!is_dir($savepath))
    {
            mkdir($savepath,0700);
    mkdir($savepath."log",0700);
    }
    while(true)
    {
    $fp = fopen ($savepath."log/".date("Ymd").".log", "a");
    flock($fp, LOCK_EX);

            $old_dir = date("Ymd",mktime(0,0,0,date("m"),date("d")-$old_time_for_del,date("Y")));
            
            system("rm -rf ".$savepath.$old_dir);
    fwrite($fp,"rm -rf ".$savepath.$old_dir."\n");

            $dir_child = date("Ymd");
            if(!is_dir($savepath.$dir_child))
            {
                    mkdir($savepath.$dir_child,0700);
    fwrite($fp,"create dir ".$savepath.$dir_child."\n");
            }        $filename = $savepath.$dir_child."/".date("His");
            fwrite($fp,date("H:i:s")." backup starting.............\n");
            system("/usr/local/mysql/bin/mysqldump  -u ".$user." -p".$pwd." -h ".$dbip." billing>".$filename."_billing.sql");
            system("/usr/local/mysql/bin/mysqldump  -u ".$user." -p".$pwd." -h ".$dbip." door_server>".$filename."_door_server.sql");
            system("/usr/local/mysql/bin/mysqldump  -u ".$user." -p".$pwd." -h ".$dbip." myth_world>".$filename."_myth_world.sql");        fwrite($fp,date("H:i:s")." backup succes.................OK\n\n\n");
    flock($fp,LOCK_UN);
    fclose($fp);
            sleep($save_time_limit);
    }
    ?>
    这是我自己写的....
      

  3.   

    贴下我的数据库服务器 crontab
    /etc/rc2.d/S99mysql stop #备份时先把数据库停了 
    /usr/bin/tar cf - /usr/local/mysql/var | /usr/local/bin/gzip -c > /usr/backup/17/mysql17.tar.gz #打包数据库文件
    /etc/rc2.d/S99mysql start #搞定后记得把数据库起来就这么简单