php中实现mysql数据库备份与linux自动定时备份代码
文章介绍了二种数据库备案的代码,一种是我们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测试数据 $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测试数据 #管理员邮箱地址,用以发送备份失败消息提醒 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下也可以利用计划任务来实现了.
查看更多关于php中实现mysql数据库备份与linux自动定时备份代码的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30448