PHP选择性备份MySQL数据库完整函数

16 篇文章 0 订阅

MySQL备份的方式很多,这里介绍如何用PHP有选择性的备份。

公共函数:传入连接数据库的参数和要备份的表即可,返回为表结构即数据sql字符串

function backup_tables($host, $user, $pass, $name, $tables = '*') {
	$link = mysql_connect($host, $user, $pass);
	if(!$link) die(" connection failed");
	mysql_select_db($name, $link);
	mysql_query('set names utf8');

	if($tables == '*') {
		$tables = array();
		$result = mysql_query('SHOW TABLES');
		while($row = mysql_fetch_row($result)) {
			$tables[] = $row[0];
		}
	}else{
		$tables = is_array($tables)?$tables:explode(',', $tables);
	}
	$return = '';

	foreach ($tables as  $table) {
		$result = mysql_query('SELECT * FROM '.$table);
		$num_fields = mysql_num_fields($result);
		$return .= 'DROP TABLE '.$table.';';
		$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
		$return .= "\n\n".$row2[1].";\n\n";

		for($i=0; $i<$num_fields; $i++) {
			while($row = mysql_fetch_row($result)) {
				$return .= 'INSERT INTO '.$table.' VALUES(';
				for($j=0; $j<$num_fields; $j++) {
					$row[$j] = addslashes($row[$j]);
					//$row[$j] = ereg_replace("\n", "\\n", $row[$j]);
					if(isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if($j<($num_fields-1)) { $return .= ','; }
				}
				$return .= ");\n";
			}
		}
		$return .= "\n\n\n";
	}

	return $return;
}

调用示例:

echo  backup_tables($host, $user, $passwd, $dbname, $table);

在浏览器中导出为文件:

$filename = "bak".date("Ymj").".sql";
header("Content-disposition:filename=".$filename);
header("Content-type:application/octetstream");
header("Pragma:no-cache");
header("Expires:0");

直接在浏览器中输出:

header('content-type:text/plain;charset=utf-8');

记得在脚本最开始关闭错误信息提示:

error_reporting(0);


下面是一个完整的示例:(导出文件到浏览器)

<?php
error_reporting(0);
//header('content-type:text/plain;charset=utf-8'); //这个是以纯文本输出用的
$host = 'localhost';
$user = 'root';
$passwd = '';
$dbname = 'db';

$filename = $dbname.date("Ymj").".sql";
header("Content-disposition:filename=".$filename);
header("Content-type:application/octetstream");
header("Pragma:no-cache");
header("Expires:0");

echo  backup_tables($host, $user, $passwd, $dbname);

function backup_tables($host, $user, $pass, $name, $tables = '*') {
	$link = mysql_connect($host, $user, $pass);
	if(!$link) die("fucking connection failed");
	mysql_select_db($name, $link);
	mysql_query('set names utf8');

	if($tables == '*') {
		$tables = array();
		$result = mysql_query('SHOW TABLES');
		while($row = mysql_fetch_row($result)) {
			$tables[] = $row[0];
		}
	}else{
		$tables = is_array($tables)?$tables:explode(',', $tables);
	}
	$return = '';

	foreach ($tables as  $table) {
		$result = mysql_query('SELECT * FROM '.$table);
		$num_fields = mysql_num_fields($result);
		$return .= 'DROP TABLE '.$table.';';
		$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
		$return .= "\n\n".$row2[1].";\n\n";

		for($i=0; $i<$num_fields; $i++) {
			while($row = mysql_fetch_row($result)) {
				$return .= 'INSERT INTO '.$table.' VALUES(';
				for($j=0; $j<$num_fields; $j++) {
					$row[$j] = addslashes($row[$j]);
					//$row[$j] = ereg_replace("\n", "\\n", $row[$j]);
					if(isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if($j<($num_fields-1)) { $return .= ','; }
				}
				$return .= ");\n";
			}
		}
		$return .= "\n\n\n";
	}

	return $return;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值