php中实现mysql数据库备份与linux自动定时备份代码
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-11 09:13:16 浏览: 评论:0
文章介绍了二种数据库备案的代码,一种是我们php写的常用的数据库备份类,另一种是为linux朋友提供的一个自动定时备份mysql数据库的代码,有需要的同学可以参考一下.
把下面php代码保存成backdata.class.php文件,代码如下:
- <?php
- /*
- *
- *简单的一个Mysql备份数据类
- *
- */
- class backupData{
- private $mysql_link;//链接标识
- private $dbName; //数据库名
- private $dataDir; //数据所要存放的目录
- private $tableNames;//表名
- public function __construct($mysql_link){
- $this->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<$field;$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 < mysql_numrows($newtables); $i++){
- array_push($tableList,mysql_tablename($newtables, $i));
- }//开源代码phpfensi.com
- $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下也可以利用计划任务来实现了.
Tags: mysql数据库备份 linux定时备份
相关文章
- ·利用php把mysql数据库备份导出成sql示例(2014-09-10)
- ·PHP Mysql数据库备份类程序总结(2014-09-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)