您好,欢迎访问一九零五行业门户网

php中实现mysql数据库备份与linux自动定时备份代码_PHP教程

文章介绍了二种数据库备案的代码,一种是我们php写的常用的数据库备份类,另一种是为linux朋友提供的一个自动定时备份mysql数据库的代码,有需要的同学可以参考一下。
把下面php代码保存成backdata.class.php文件
 代码如下 复制代码
mysql_link = $mysql_link;
    }
    public function backuptables($dbname,$datadir,$tablenames){//开始备份
        $this->dbname  = $dbname;
        $this->datadir  = $datadir;
        $this->tablenames = $tablenames;
        $tables=$this->delarray($this->tablenames);
        $sqls='';
        foreach($tables as $tablename){
            if($tablename==''){//表不存在时
                continue;
            }
//************************以下是形成sql的前半部分**************
            //如果存在表,就先删除
            $sqls .= drop table if exists $tablename;n;
            //读取表结构
            $rs = mysql_query(show create table $tablename,$this->mysql_link); 
            $row=mysql_fetch_row($rs);
            //获得表结构组成sql
            $sqls.=$row['1'].;nn;
            unset($rs);
            unset($row);
//************************以下是形成sql的后半部分**************
            //查寻出表中的所有数据
            $rs=mysql_query(select * from $tablename,$this->mysql_link);
            //表的字段个数
            $field=mysql_num_fields($rs);
            //形成此种sql语句:insert into `groups` values('1499e0ca25988d','主任','','0');
            while($rows=mysql_fetch_row($rs)){
                $comma='';//逗号
                $sqls.=insert into `$tablename` values(;
                for($i=0;$i                    $sqls.=$comma.'.$rows[$i].';
                    $comma=',';
                }
                $sqls.=);nnn;
            }
        }
        $backfilepath=$this->datadir.date(ymdhis,time()).'.sql';
//写入文件
        $filehandle = fopen($backfilepath, w);
        fwrite($filehandle, $sqls);
        fclose($filehandle);
    }
    private function delarray($array){    //处理传入进来的数组
        foreach($array as $tables){
            if($tables=='*'){    //所有的表(获得表名时不能按常规方式来组成一个数组)
                $newtables=mysql_list_tables($this->dbname,$this->mysql_link);
                $tablelist = array();
                for ($i = 0; $i                     array_push($tablelist,mysql_tablename($newtables, $i));
                }
                $tablelist=$tablelist;
            }else{
                $tablelist=$array;
                break;
            }
        }
        return $tablelist;
    }
}
?>
我们再创建一个新的文件与backdata.class.php保存在同一目录
使用方法:
 代码如下 复制代码
require_once(backdata.class.php);
$link = @mysql_connect(localhost,数据库名,密码) or die ('could not connect to server.');
mysql_query(use cms,$link);
mysql_query(set names utf8,$link);
$dbbck=new backupdata($link);//实例化它,只要一个链接标识就行了
//备份数据时,如想备份一个数据库中的所有表,你可这样写:
$dbbck->backuptables(cms,./,array('*'));
//备份数据时,如想备份一个数据库中的仅一个表时,你可这样写:
$dbbck->backuptables(cms,./,array('user'));
//备份数据时,如想备份一个数据库中的多个表时,你可这样写:
$dbbck->backuptables(cms,./,array('user','acl','informatoin'));
//注解:$dbbck->backuptables(参1,参2,array());中,
参1为:数据库名,
参2为:要存放备份数据的位置(即目录地址)
第三个为:你要保存那些表
下面为linux中的自动定时备份的代码
参考了网上的很多教程,外加自己的测试,以下脚本经测试可用。
 代码如下 复制代码
#!/bin/bash
#shell command for backup mysql database everyday automatically by crontab
#author : carlos wong
#date : 2010-08-24
#配置参数
user=root #数据库用户名 >用户名
password=××××× #数据库用户密码
database=tieniuzai    #数据库名称
webmaster=tieniuzai@qq.com #管理员邮箱地址,用以发送备份失败消息提醒
backup_dir=/var/www/data_backup/topons/ #备份文件存储路径
logfile=/var/www/data_backup/topons/data_backup.log #日记文件路径
date=`date ‘+%y%m%d-%h%m’` #日期格式(作为文件名)
dumpfile=$date.sql #备份文件名
archive=$date.sql.tgz #压缩文件名
options=”-u$user -p$password –opt –extended-insert=false –triggers=false -r –hex-blob –flush-logs –delete-master-logs -b $database”  #mysqldump 参数 详情见帮助 mysqldump -help
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $backup_dir ] ;
then
mkdir -p “$backup_dir”
fi
#开始备份之前,将备份信息头写入日记文件
echo ” ” >> $logfile
echo ” ” >> $logfile
echo “———————————————–” >> $logfile
echo “backup date:” $(date +”%y-%m-%d %h:%m:%s”) >> $logfile
echo “———————————————– ” >> $logfile
#切换至备份目录
cd $backup_dir
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
mysqldump $options > $dumpfile
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $archive $dumpfile >> $logfile 2>&1
#输入备份成功的消息到日记文件
echo “[$archive] backup successful!” >> $logfile
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $dumpfile
else
echo “database backup fail!” >> $logfile
#备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持
#mail -s “database:$database daily backup fail” $webmaster
fi
#输出备份过程结束的提醒消息
echo “backup process done”
使用:
将以上代码保存到: /usr/sbin/databackup     (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调 用,类似于windows下path变量指定的目录)
为脚本添加可执行权限:  sudo chmod +x  /usr/sbin/databackup
执行脚本: sudo  databackup
如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了:
01 3 * * * root /usr/sbin/databackup    #它代表着将于每天3点执行databackup脚本
小注意一下下:
linux 下的shell脚本定义变量的格式为:  key=value  ,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量。
用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘esc键下方。
这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份。
相对于两种方法定时备份算是最好的方法了,这样可以节省时间让机器在最少人访问时自动备案,而php备份类需要人为操作,当然在windows下也可以利用计划任务来实现了。
http://www.bkjia.com/phpjc/632935.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/632935.htmltecharticle文章介绍了二种数据库备案的代码,一种是我们php写的常用的数据库备份类,另一种是为linux朋友提供的一个自动定时备份mysql数据库的代码...
其它类似信息

推荐信息