文章介绍了二种数据库备案的代码,一种是我们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数据库的代码...
